PHP: FPM-Backend offline nach Update
Nach dem Einspielen der heute bei Ubuntu 14.04 LTS veröffentlichten PHP-Updates für 5.5.9, blieb das PHP-Backend (FPM) für den Webserver nicht erreichbar. Seitenaufrufe meines Blogs resultierten in einem Fehlercode. Was war passiert?
Status 503 und 502
Der dem Webserver nginx vorgeschaltete Varnish meldete einen 503 Service Unavailable. Statische Inhalte funktionierten.
Ok, FPM ist wohl nicht erreichbar. ps aux | grep fpm zeigte allerdings, dass es läuft. Die Logfiles von nginx sind aufschlussreicher. Laut Accesslog wird 502 Bad Gateway an Varnish gemeldet. Das Errorlog gibt den entscheidenden Hinweis.
[crit] 1337#0: *169 connect() to unix:/var/run/php5-fpm.sock failed (13: Permission denied) while connecting to upstream, client: xxx.xxx.xxx.xxx, server: gnuheidix.de, request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "gnuheidix.de"
Wie sich herausstellte, hatte der Unix Domain Socket mit root:root 660 für nginx unpassende Einstellungen.
Anpassung der Konfiguration
Die Prozesspool-Einstellung /etc/php5/fpm/pool.d/www.conf habe ich nach kurzer Recherche um folgende Zeilen erweitert.
listen.owner = daemon listen.group = daemon listen.mode = 0660
Diese Einstellung lässt die FPM-Worker den gleichen Nutzer und Gruppe nehmen wie nginx. Nach dem Durchstarten von FPM war mein Blog wieder vollständig erreichbar.
Hintergrund
FPM war nicht mehr zugreifbar, weil die Defaults, welche meine Konfiguration nutzte, geändert wurden. Im Rahmen von CVE 2014-0185 konnten beliebige Prozesse auf den Socket zugreifen. Dies ist im Ubuntu-Bugreport schön dokumentiert.
Meine FPM-Konfiguration war bis zum Zeitpunkt meiner heutigen Änderung nicht wasserdicht. Ich hatte es nicht gemerkt, weil der Default mit 0666 jedem Prozess Zugriffsrechte eingeräumt hatte.
Fazit
Gute Software erkennt man an sinnvollen und vorausschauend gewählten Defaulteinstellungen. PHP ist nun ein kleines Stückchen besser und ich ein bisschen achtsamer geworden.
Kommentare
Frank am :