« Installation et configuration d'un serveur http apache 2.2 » : différence entre les versions

Aller à la navigation Aller à la recherche
Ligne 426 : Ligne 426 :
</pre>
</pre>
Comme précédemment, <code>/srv/http/csnu.org/webmail.csnu.org/</code> doit exister et être accessible par apache2.
Comme précédemment, <code>/srv/http/csnu.org/webmail.csnu.org/</code> doit exister et être accessible par apache2.
=Installer le module php=
Installez juste le paquet libapache2-mod-php5 avec aptitude :
<pre>
aptitude install libapache2-mod-php5
a2enmod php5
</pre>
==Sécuriser php==
C'est probablement ce dont rêve un administrateur linux chaque nuit. Un vilain petit pirate insomniaque découvre une faille dans un script php d'un des sites hébergé sur le serveur. Grâce à cette faille, le pirate pourrait avoir accès à tous les fichiers auxquels apache a accès.
Heureusement, plusieurs méthodes permettent de parquer php dans un dossier précis et l'empêcher d'accéder aux fichiers des autres sites :
* SUPHP
* SUEXEC
* Open_basedir
===Open_basedir===
Cette méthode est la plus simple et la plus rapide à mettre en place.
La méthode Open_basedir fonctionne par rapport aux dossiers, et non pas par rapport aux utilisateurs comme le font SuPHP ou SuExec.
L'idée est très simple : si quelqu'un tente d'ouvrir un fichier, php vérifie si ce fichier se situe dans la zone autorisée. Si ce n'est pas le cas, l'ouverture est refusée.
Il suffit d'ajouter la ligne suivante dans les fichiers de configuration des vhosts (situés dans /etc/apache2/sites/ si vous avez suivis ce howto) :
<pre>php_admin_value open_basedir PATH1:PATH2</pre>
Comme vous le voyez, on peut spécifier plusieurs chemins pour les zones autorisées en les séparant par des "deux points" (:).
Il faut entrer des chemins absolus et toujours terminer les chemins par le / final, sinon apache va interpréter le chemin comme étant path*. Par exemple /srv/http/pof correspondra a /srv/http/pof, mais aussi à /srv/http/pofpof alors que /srv/http/pof/ ne correspondra que au dossier /srv/http/pof/
Généralement, entrer le <code>DocumentRoot</code> comme path est largement suffisant. Voici l'exemple pour la vhost www.csnu.org (/etc/apache2/sites/csnu.org.conf:
<pre>php_admin_value open_basedir /srv/http/csnu.org/csnu.org/</pre>
Et voila, maintenant, lorsque notre méchant pirate viendra s'attaquer à notre petit script php bugué, il ne pourra qu'accéder aux fichiers du vhost correspondant. Les autres sites hébergés sur d'autres vhosts resteront en sécurité.
Afin de prévenir un oubli d'ajout de la directive <code>php_admin_value open_basedir</code> sur une vhost il est bon de spécifier un open_basedir par défaut dans le fichier <code>/etc/apache2/apache2.conf</code> :
<pre>php_admin_value open_basedir /srv/http/default/</pre>
Toutes les vhosts ne disposant pas leur propre directive <code>php_admin_value open_basedir</code> seront donc parquées dans <code>/srv/http/default/</code>
Si vous utilisez le <code>mod-userdir</code> il peut être intéressant d'ajouter la directive <code>php_admin_value open_basedir</code> dans la configuration du module. Voici la mienne :
<pre><nowiki>
<IfModule mod_userdir.c>
        UserDir public_html
        UserDir disabled root
        <Directory /home/*/public_html>
                php_admin_value open_basedir ./
                AllowOverride FileInfo AuthConfig Limit
                Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
        </Directory>
</IfModule>
</nowiki></pre>
Pour plus d'information : http://wiki.apache.org/httpd/SecuringPHP
4 242

modifications

Menu de navigation