Apache 2.4 & PHP5-FPM

Par défaut, lorsque Apache travaille sur un fichier ou un script php, il le fait en tant qu’utilisateur www-data (l’utilisateur Apache du système, qui possède des droits particuliers). Le problème, c’est que si un de ces scripts est mal conçu et possède une faille de sécurité, un pirate peut avoir accès à cet utilisateur système qui possède des droits importants, il pourrait donc toucher à tous les sites hébergés sur le même serveur.

Pour éviter ça on va utiliser PHP-FPM qui permet de déclarer un utilisateur par site web hébergé.

Pour installer les paquets nécessaires, vérifier que les dépôt “non-free” sont bien déclarés dans /etc/apt/sources.list :

deb http://ftp.fr.debian.org/debian/ jessie main non-free
deb-src http://ftp.fr.debian.org/debian/ jessie main non-free

deb http://security.debian.org/ jessie/updates main non-free
deb-src http://security.debian.org/ jessie/updates main non-free

# jessie-updates, previously known as 'volatile'
deb http://ftp.fr.debian.org/debian/ jessie-updates main non-free
deb-src http://ftp.fr.debian.org/debian/ jessie-updates main non-free

Sinon ajoutez “non-free” à la fin de chaque ligne.

Ensuite on lance la commande :

sudo apt-get update

Puis

sudo apt-get install libapache2-mod-fastcgi php5-fpm

On active le module action :

sudo a2enmod actions

On va ensuite configurer PHP-FPM pour utiliser les sockets UNIX plutôt que TCP. Dans cette commande on va utilisr grep pour déterminer si les sockets sont déjà utilisés.

sudo grep -E '^\s*listen\s*=\s*[a-zA-Z/]+' /etc/php5/fpm/pool.d/www.conf

Vous devriez voir la ligne suivante :

listen = /var/run/php5-fpm.sock

Si ce n'est pas le cas, remplacez la ligne “listen” par celle ci-dessus et redémarrez le service php5-fpm

On va ensuite éditer le fichier /etc/apache2/mods-enabled/fastcgi.conf

sudo vi /etc/apache2/mods-enabled/fastcgi.conf

Et remplacer le contenu par les lignes suivantes

<IfModule mod_fastcgi.c>
    AddType application/x-httpd-fastphp5 .php
    Action application/x-httpd-fastphp5 /php5-fcgi
    Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
    FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization
    <Directory /usr/lib/cgi-bin>
        Require all granted
    </Directory>
</IfModule>

On désactive le mod_php5 d'Apache et on redémarre le service :

sudo a2dismod php5 && sudo service apache2 restart

Dans cet exemple on va configurer le pool pour l'utilisateur bob

On commence par copier le fichier du pool par défaut de PHP-FPM :

sudo cp /etc/php5/fpm/pool.d/www.conf /etc/php5/fpm/pool.d/example.com.conf

Puis on va éditer le fichier /etc/php5/fpm/pool.d/example.com.conf :

sudo vi /etc/php5/fpm/pool.d/example.com.conf

On y modifie les lignes suivantes :

;remplacer [www]
[example.com]

...

user = bob
group = bob

...

listen = /var/run/php5-fpm_example.com.sock

Puis on redémarre le service php5-fpm :

sudo service php5-fpm restart

On va ensuite éditer le vhost pour y faire ajouter les lignes du mod_fastcgi :

<VirtualHost *:80>
    ServerAdmin webmaster@example.com
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com/public_html/
    ErrorLog /var/www/example.com/error.log
    CustomLog /var/www/example.com/access.log combined

    <IfModule mod_fastcgi.c>
        AddType application/x-httpd-fastphp5 .php
        Action application/x-httpd-fastphp5 /php5-fcgi
        Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi_example.com
        FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi_example.com -socket /var/run/php5-fpm_example.com.sock -pass-header Authorization
    </IfModule>

</VirtualHost>

Puis on redémarre Apache :

sudo service apache2 restart
  • Dernière modification: 13/03/2021 07:56