apache2 + php5 + fcgid + suexec

Ceci est la configuration rapide de apache2, php5, fcgid et suexec sur une debian, ça peut marcher aussi pour ubuntu. J’ai utilisé ces logiciels pour mutualiser un serveur web qui utilise php5.

J’ai utilisé fcgid au lieu de fastcgi car c’est plus libre et il marche très bien avec suexec en plus son popcon ici est supérieur à fastcgi ici mais c’est juste un détail . Suexec sert à exécuter les scripts php par un utilisateur/groupe spécifique et limité donc ça augmente la sécurité du serveur, si vous voulez en savoir plus veuillez consulter la doc complète ici.

Installer les packages utilisés :

aptitude install apache2-mpm-worker libapache2-mod-fcgid apache2-suexec php5-cgi

Activer/Désactiver les modules et les virtualhosts :

a2dismod fastcgi

a2enmod suexec

a2enmod actions

a2enmod headers

a2enmod include

a2enmod deflate

a2enmod mem_cache

a2dissite default

J’ai désactivé le virtualhost default car il a accès directe sur /var/www alors qu’on l’utilisera comme racine de nos scripts, si vous voulez encore l’utiliser, il va falloir modifier la configuration dans /etc/apache2/sites-available/default. Par exemple créer un répertoire /var/www/default/ puis modifier la ligne en DocumentRoot /var/www/default .

Editer le fichier de configuration de fcgid /etc/apache2/mods-available/fcgid.conf :

<IfModule mod_fcgid.c>
  AddHandler fcgid-script .fcgi
  FcgidConnectTimeout 20
  PHP_Fix_Pathinfo_Enable 1
</IfModule>

Redémarrer apache pour prendre en compte les modifs : /etc/init.d/apache2 restart

Créer un site avec l’utilisateur correspondant :

groupadd site1

useradd -s /bin/false -d /var/www/site1 -m -g site1 site1

mkdir -p /var/www/site1/{web,ini}

cp /etc/php5/cgi/php.ini /var/www/site1/ini/

chown site1:site1 /var/www/site1/{web,ini}

mkdir -p /var/www/php-fcgi/site1

Modifier le fichier /var/www/site1/ini/php.ini , il faut décommenter la ligne cgi.fix_pathinfo = 1

Créer le script cgi /var/www/php-fcgi/site1/fcgi :


#!/bin/sh

PHPRC="/var/www/site1/ini/"
export PHPRC
export PHP_FCGI_MAX_REQUESTS=10000
export PHP_FCGI_CHILDREN=8
exec /usr/lib/cgi-bin/php

Changer les droits :

chmod 755 /var/www/php-fcgi/site1/fcgi

chown -R site1:site1 /var/www/php-fcgi/site1

Créer le fichier de configuration de notre site dans /etc/apache2/sites-available/site1 qui contient :

<VirtualHost *:80>
    ServerName site1.com
    DocumentRoot /var/www/site1/web
    ServerAdmin sysadmin@site1.com
    ErrorLog /var/log/apache2/site1.com_error.log
    CustomLog /var/log/apache2/site1.com_access.log combined
    <IfModule mod_fcgid.c>
     SuexecUserGroup site1 site1
       <Directory /var/www/site1/web/ >
        Options +ExecCGI
        AllowOverride All
        AddHandler fcgid-script .php
        FcgidWrapper /var/www/php-fcgi/site1/fcgi .php
        Order allow,deny
        Allow from all
	</Directory>
    </IfModule>
</VirtualHost>

Activer le site :

a2ensite site1

Redémarrer Apache :

/etc/init.d/apache2 restart

Il vous reste qu’à tester en mettant vos scripts dans le répertoire /var/www/site1/web …

7 réflexions sur “apache2 + php5 + fcgid + suexec

  1. Bonjour, j’ai suivis ce tutoriel qui m’a bien aidé pour comprendre cette configurations. Cependant j’ai une erreur 403 sur les différents vhost. Auriez vous une idée de la raison ? J’ai appliqué à la lettre la procédure.
    Merci encore

  2. Bonjour,

    Vous avez quoi dans les fichiers journaux lors de l’erreur en faisant :

    tail -f /var/log/apache2/site1.com_error.log

    et

    tail -f /var/log/apache2/site1.com_access.log

    à qui appartient le fichier qui est exécuté ? vous pouvez l’avoir avec :

    ls -al /var/www/site1/web/index.php

  3. Bonjour,

    A la place de :
    chmod 755 /var/www/php-fcgi/site1/fcgi
    chown -R site1:site1 /var/www/php-fcgi/site1

    Mettre
    chmod 550 /var/www/php-fcgi/site1
    chmod 500 /var/www/php-fcgi/site1/fcgi
    chattr +i /var/www/php-fcgi/site1/fcgi

    permettrait d’empêcher que le compte applicatif modifie son propre fcgi
    Idem pour /var/www/site1/ini/php.ini si on ne souhaite pas le rendre modifiable.

  4. Bonjour, désolé pour les retours tardifs, les vacances et la reprise…. Thierry, voici les réponses aux différentes commande:

    # ls -al /var/www/site1/web/info.php
    -rwxr-xr-x 1 site1 site1 17 30 oct. 2009 /var/www/site1/web/info.php

    ———————

    ~# tail -f /var/log/apache2/site1.com_access.log
    192.168.1.10 – – [22/Sep/2011:17:40:00 +0200] « GET /icons/blank.gif HTTP/1.1 » 304 186 « http://192.168.1.13/ » « Mozilla/5.0 (Windows NT 6.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2 »
    192.168.1.10 – – [22/Sep/2011:17:40:39 +0200] « GET /info.php HTTP/1.1 » 403 502 « http://192.168.1.13/ » « Mozilla/5.0 (Windows NT 6.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2 »
    192.168.1.10 – – [22/Sep/2011:17:40:46 +0200] « GET /site1/ HTTP/1.1 » 200 698 « – » « Mozilla/5.0 (Windows NT 6.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2 »
    192.168.1.10 – – [22/Sep/2011:17:40:49 +0200] « GET /site1/info.php HTTP/1.1 » 403 506 « http://192.168.1.13/site1/ » « Mozilla/5.0 (Windows NT 6.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2 »

    ———————
    et rien pour tail -f /var/log/apache2/site1.com_error.log

    Je reprend une réinstallation complète histoire de voir si j’ai pu faire un bêtise quelque part.

  5. Re bonjour,

    J’ai pu corriger sans trop comprendre mon erreur mes essais d’avant en réinstallant complétement la solution. J’ai désactiver default, activer site1.

    Site1 est bien fonctionnel et donc par défaut en suivant ce tutoriel, les scripts sont bien exécutes par l’utilisateur site1. Maintenant comment faire pour activer un site2 (Sachant que c’est une machine en réseau local ne comportant qu’un ip et sans serveur dns).

    J’ai essayer de jouer avec les alias mais cela ne semble pas bon. Avez vous une idée ?

  6. Salut,

    Tu peux changer ton fichier hosts pour faciliter la chose. Sur debian c’est dans /etc/hosts par exemple sur mon laptop de dev :

    127.0.0.1 localhost site1.local site2.local

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s