Ubuntu és a php5-fpm frissítése

A mai napon az Ubuntu maintainerek frissítették a php5-fpm csomagot. A frissítés valamennyi támogatott szerververziót érinti, azaz 10.04-től 14.04-ig valamennyi Ubuntu szerver érintett. Csak egy nagyon apró javításról van szó, de mégis érdemes most kicsit jobban odafigyelni a frissítésre. A rutinszerű „apt-get dist-upgrade” után a PHP5 alapú lapok helyén könnyen 500/502 hibaoldalak jelenhetnek meg.

A probléma kiváltó oka

A szokásos beállítások szerint egy unix socketen (/var/run/php5-fpm.sock) keresztül zajlik a kommunkáció a webszerverek (Apache, Nginx, stb.) és a php5-fpm között. A php5-fpm csomagban található konfigurációs állományban (/etc/php5/fpm/pool.d/www.conf) állíthatóak be ennek socketnek a jogai. A konfigurációs fájl kommentjei szerint a futtató user/group érvényesül, és alapértelmezetten 0660 jogokat kap a socket. Ezt sugallják a kikommentezett, alapértelmezettnek tűnő értékek is.

; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
user = www-data
group = www-data

; Set permissions for unix socket, if one is used. In Linux, read/write
; permissions must be set in order to allow connections from a web server. Many
; BSD-derived systems allow connections regardless of permissions.
; Default Values: user and group are set as the running user
; mode is set to 0660
;listen.owner = www-data
;listen.group = www-data
;listen.mode = 0660

A probléma az, hogy a fenti beállítások mellett a socket root/root tulajdonossal és csoporttal jön létre. A 0660 jogok pedig nem teszik lehetővé, hogy a szokásosan www-data felhasználói jogokkal futtatott webszerverek olvashassák és írhassák ezt a socketet.

root@www:~# ls -l /var/run/php5-fpm.sock
srw-rw---- 1 root root 0 Jun 23 22:41 /var/run/php5-fpm.sock

Miért csak mostani, szinte bagatell frissítés után jelentkezik a probléma? Egyszerű, a jogok eddig 0666 értéken voltak, azaz bárki írhatta, olvashatta a socketet. Ezt a biztonsági problémát szerették volna foltozni, csakhogy ezzel sok webszerver működésébe is beleszólt a frissítésük.

A probléma esetén az Apache error.log ilyesmit mutat:

[Mon Jun 23 20:00:01.837023 2014] [fastcgi:error] [pid 1800:tid 140664380520192] (13)Permission denied: [client 192.168.2.22:59586] FastCGI: failed to connect to server "/usr/lib/cgi-bin/php5-fcgi": connect() failed

Az Nginx kicsit értelmesebb (ebben is), ott az error.log ehhez hasonló sorokat tartalmaz:

2014/06/23 20:00:01 [crit] 1405#0: *4632 connect() to unix:/var/run/php5-fpm.sock failed (13: Permission denied) while connecting to upstream, client: 192.168.2.22, server: www.example.com, request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "www.example.com"

A probléma megoldása

Nem kell nagy varázslatra gondolni, csupán érvényesítenünk kell az /etc/php5/fpm/pool.d/www.conf fájl vonatkozó, alapértelmezettnek hitt sorait. Ezt célszerű még a frissítés előtt megtenni, majd az állományt nem felülíratni a frissítés során. Néhány pontosvessző eltávolítása csodákra képes.

listen.owner = www-data
listen.group = www-data

Remélem, hogy segítettem néhány embernek, hogy egy 2 percesnek gondolt frissítés ne éles weblapok leállásával járó hibakeresésbe torkolljon.

Hivatkozások:

http://www.ubuntu.com/usn/usn-2254-1/