Serveur Web · 3 min read · Nov 25, 2025

Chrooting Apache2 Avec mod_chroot Sur OpenSUSE 11.2

Chrooting Apache2 Avec mod_chroot Sur OpenSUSE 11.2

Version 1.0
Auteur : Falko Timme
Suivez-moi sur Twitter

Ce guide explique comment configurer mod_chroot avec Apache2 sur un système OpenSUSE 11.2. 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 tentent 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 OpenSUSE 11.2 fonctionnel avec un Apache2 opérationnel, par exemple comme montré dans ce tutoriel : Le Serveur Parfait - OpenSUSE 11.2 x86_64 [ISPConfig 2]. De plus, je suppose que vous avez un ou plusieurs sites web configurés dans le répertoire /srv/www (par exemple, si vous utilisez ISPConfig).

2 Installation de mod_chroot

Il n’y a pas de paquet mod_chroot pour OpenSUSE 11.2, nous devons donc le construire nous-mêmes. Tout d’abord, nous installons les prérequis :

yast2 -i libgcc glibc-devel gcc flex lynx compat-readline4 db-devel wget gcc-c++ make vim
yast2 -i apache2-devel

Maintenant, nous construisons mod_chroot comme suit :

cd /tmp  
wget http://core.segfault.pl/~hobbit/mod_chroot/dist/mod_chroot-0.5.tar.gz  
tar xvfz mod_chroot-0.5.tar.gz  
cd mod_chroot-0.5  
apxs2 -cia mod_chroot.c

Ensuite, nous redémarrons Apache :

/etc/init.d/apache2 restart

3 Configuration d’Apache

Je veux utiliser le répertoire /srv/www comme le répertoire contenant la prison chroot. L’Apache d’OpenSUSE utilise le fichier PID /var/run/httpd2.pid ; lorsque Apache est chrooté à /srv/www, /var/run/httpd2.pid se traduit par /srv/www/var/run/httpd2.pid. Par conséquent, nous créons ce répertoire maintenant :

mkdir -p /srv/www/var/run  
chown -R root:www /srv/www/var/run

Maintenant, nous devons dire à Apache que nous voulons utiliser /srv/www comme notre répertoire chroot. Nous ouvrons /etc/apache2/httpd.conf, et juste en dessous de la ligne Include /etc/apache2/sysconfig.d/loadmodule.conf, nous ajoutons la ligne ChrootDir /srv/www ; dans la section , nous commentons la ligne Options None et ajoutons la ligne Options +FollowSymLinks :

vi /etc/apache2/httpd.conf

| [...] # généré à partir de APACHE_MODULES dans /etc/sysconfig/apache2 Include /etc/apache2/sysconfig.d/loadmodule.conf ChrootDir /srv/www [...] # interdire l'accès à l'ensemble du système de fichiers par défaut #Options None Options +FollowSymLinks AllowOverride None Order deny,allow Deny from all [...] |

Ensuite, nous devons dire à nos vhosts que le document root a changé (par exemple, un DocumentRoot /srv/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 avons un vhost avec DocumentRoot /srv/www. Nous devons maintenant ouvrir la configuration du vhost de ce vhost et changer DocumentRoot /srv/www en DocumentRoot /. En conséquence, DocumentRoot /srv/www/web1/web se traduira 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 chaque vhost. Nous créons un lien symbolique pointant de /srv/www/srv/www à /srv/www :

mkdir -p /srv/www/srv  
cd /srv/www/srv  
ln -s ../ www

Enfin, nous devons arrêter Apache, créer un lien symbolique de /var/run/httpd2.pid à /srv/www/var/run/httpd2.pid, et le redémarrer :

/etc/init.d/apache2 stop
ln -sf /srv/www/var/run/httpd2.pid /var/run/httpd2.pid  
/etc/init.d/apache2 start

C’est tout. Vous pouvez maintenant appeler vos pages web comme avant, 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., vous devez alors copier l’interpréteur (par exemple, /usr/bin/perl, /usr/sbin/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/sbin/suphp
server2:/var/www/web1/log# ldd /usr/sbin/suphp  
        linux-gate.so.1 =>  (0xffffe000)  
        libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb7e34000)  
        libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0xb7e0f000)  
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb7e03000)  
        libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7cd2000)  
        /lib/ld-linux.so.2 (0xb7f23000)  
server2:/var/www/web1/log#

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 les problèmes connus et les solutions.

4 Liens

Share: X/Twitter LinkedIn

Recevez de nouveaux articles dans votre boîte de réception.

Aucun spam. Désabonnez-vous à tout moment.