Serveur Web · 3 min read · Dec 26, 2025
Chrooting Apache2 Avec mod_chroot Sur Debian Squeeze
Chrooting Apache2 Avec mod_chroot Sur Debian Squeeze
Version 1.0
Auteur : Falko Timme
Suivez-moi sur Twitter
Ce guide explique comment configurer mod_chroot avec Apache2 sur un système Debian Squeeze. Avec mod_chroot, vous pouvez exécuter Apache2 dans un environnement chroot sécurisé et rendre votre serveur moins vulnérable aux tentatives d’intrusion qui essaient d’exploiter des vulnérabilités dans Apache2 ou vos applications web installées.
Je ne donne aucune garantie que cela fonctionnera pour vous !
1 Remarque Préliminaire
Je suppose que vous avez un système Debian Squeeze en cours d’exécution avec un Apache2 fonctionnel, par exemple comme montré dans ce tutoriel : Installer Apache2 Avec PHP5 Et Support MySQL Sur Debian Squeeze (LAMP). De plus, je suppose que vous avez un ou plusieurs sites web configurés dans le répertoire /var/www (par exemple, si vous utilisez ISPConfig).
2 Installation de mod_chroot
Pour installer mod_chroot, nous exécutons simplement :
apt-get install libapache2-mod-chroot
Ensuite, nous activons mod_chroot et redémarrons Apache :
a2enmod mod_chroot /etc/init.d/apache2 restart
3 Configuration d’Apache
Je veux utiliser le répertoire /var/www comme le répertoire contenant la prison chroot. Apache de Debian utilise le fichier PID /var/run/apache2.pid ; lorsque Apache est chrooté à /var/www, /var/run/apache2.pid se traduit par /var/www/var/run/apache2.pid. Par conséquent, nous créons ce répertoire maintenant :
mkdir -p /var/www/var/run chown -R root:root /var/www/var/run
Maintenant, nous devons dire à Apache que nous voulons utiliser /var/www comme notre répertoire chroot. Nous ouvrons /etc/apache2/apache2.conf, et juste en dessous de la ligne PidFile, nous ajoutons une ligne ChrootDir :
vi /etc/apache2/apache2.conf
| [...] # # PidFile : Le fichier dans lequel le serveur doit enregistrer son numéro # d'identification de processus lorsqu'il démarre. # Cela doit être défini dans /etc/apache2/envvars # PidFile ${APACHE_PID_FILE} ChrootDir /var/www [...] |
Ensuite, nous devons dire à nos vhosts que la racine du document a changé (par exemple, un DocumentRoot /var/www se traduit maintenant par DocumentRoot /). Nous pouvons le faire soit en changeant la directive DocumentRoot de chaque vhost, soit plus facilement, en créant un lien symbolique dans le système de fichiers.
3.1 Première Méthode : Changer Le DocumentRoot
Supposons que nous ayons un vhost avec DocumentRoot /var/www. Nous devons maintenant ouvrir la configuration du vhost de ce vhost et changer DocumentRoot /var/www en DocumentRoot /. En conséquence, DocumentRoot /var/www/web1/web se traduirait maintenant par DocumentRoot /web1/web, et ainsi de suite. Si vous souhaitez utiliser cette méthode, vous devez changer le DocumentRoot pour chaque vhost.
3.2 Deuxième Méthode : Créer Un Lien Symbolique Dans Le Système De Fichiers
Cette méthode est plus facile, car vous devez le faire une seule fois et vous n’avez pas à modifier la configuration de vhost. Nous créons un lien symbolique pointant de /var/www/var/www à /var/www :
mkdir -p /var/www/var cd /var/www/var ln -s ../../ www
Enfin, nous devons arrêter Apache, créer un lien symbolique de /var/run/apache2.pid à /var/www/var/run/apache2.pid, et le redémarrer :
/etc/init.d/apache2 stop
ln -s /var/www/var/run/apache2.pid /var/run/apache2.pid /etc/init.d/apache2 start
C’est tout. Vous pouvez maintenant appeler vos pages web comme auparavant, et elles devraient être servies sans problèmes, tant qu’elles sont des fichiers HTML statiques ou utilisent mod_php.

Si vous utilisez CGI, par exemple Perl, suPHP, Ruby, etc., alors vous devez copier l’interpréteur (par exemple, /usr/bin/perl, /usr/lib/suphp/suphp, etc.) dans la prison chroot avec toutes les bibliothèques nécessaires à l’interpréteur. Vous pouvez découvrir les bibliothèques requises avec la commande ldd, par exemple.
ldd /usr/lib/suphp/suphp
root@server1:~# ldd /usr/lib/suphp/suphp linux-vdso.so.1 => (0x00007f3fdcc6e000) libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007f3fdc953000) libm.so.6 => /lib/libm.so.6 (0x00007f3fdc6d1000) libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00007f3fdc4ba000) libc.so.6 => /lib/libc.so.6 (0x00007f3fdc158000) /lib64/ld-linux-x86-64.so.2 (0x00007f3fdcc6f000) root@server1:~#
Si vous avez copié tous les fichiers requis, mais que la page ne fonctionne toujours pas, vous devriez jeter un œil au journal des erreurs d’Apache. En général, il vous indique où se trouve le problème. Lisez également http://core.segfault.pl/~hobbit/mod_chroot/caveats.html pour des problèmes connus et des solutions.
4 Liens
- mod_chroot : http://core.segfault.pl/~hobbit/mod_chroot/
- Apache : http://httpd.apache.org/
- Debian : http://www.debian.org/
Recevez de nouveaux articles dans votre boîte de réception.
Aucun spam. Désabonnez-vous à tout moment.