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