4 242
modifications
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 |