Server-Konfiguration · 3 min read · Nov 25, 2025

Chrooting Apache2 Mit mod_chroot Auf OpenSUSE 11.2

Chrooting Apache2 Mit mod_chroot Auf OpenSUSE 11.2

Version 1.0
Autor: Falko Timme
Folge mir auf Twitter

Dieser Leitfaden erklärt, wie man mod_chroot mit Apache2 auf einem OpenSUSE 11.2 System einrichtet. Mit mod_chroot können Sie Apache2 in einer sicheren Chroot-Umgebung ausführen und Ihren Server weniger anfällig für Einbruchsversuche machen, die versuchen, Schwachstellen in Apache2 oder Ihren installierten Webanwendungen auszunutzen.

Ich gebe keine Garantie, dass dies bei Ihnen funktioniert!

1 Vorbemerkung

Ich gehe davon aus, dass Sie ein laufendes OpenSUSE 11.2 System mit einem funktionierenden Apache2 haben, z. B. wie in diesem Tutorial gezeigt: Der Perfekte Server - OpenSUSE 11.2 x86_64 [ISPConfig 2]. Darüber hinaus gehe ich davon aus, dass Sie eine oder mehrere Websites im Verzeichnis /srv/www eingerichtet haben (z. B. wenn Sie ISPConfig verwenden).

2 Installation von mod_chroot

Es gibt kein mod_chroot-Paket für OpenSUSE 11.2, daher müssen wir es selbst erstellen. Zuerst installieren wir die Voraussetzungen:

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

Jetzt bauen wir mod_chroot wie folgt:

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

Dann starten wir Apache neu:

/etc/init.d/apache2 restart

3 Konfiguration von Apache

Ich möchte das Verzeichnis /srv/www als das Verzeichnis verwenden, das das Chroot-Gefängnis enthält. Der Apache von OpenSUSE verwendet die PID-Datei /var/run/httpd2.pid; wenn Apache in /srv/www chrooted ist, übersetzt sich /var/run/httpd2.pid in /srv/www/var/run/httpd2.pid. Daher erstellen wir dieses Verzeichnis jetzt:

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

Jetzt müssen wir Apache mitteilen, dass wir /srv/www als unser Chroot-Verzeichnis verwenden möchten. Wir öffnen /etc/apache2/httpd.conf und fügen direkt unter der Zeile Include /etc/apache2/sysconfig.d/loadmodule.conf die Zeile ChrootDir /srv/www; hinzu, in der -Strophe kommentieren wir die Zeile Options None aus und fügen die Zeile Options +FollowSymLinks hinzu:

vi /etc/apache2/httpd.conf

| [...] # generiert aus APACHE_MODULES in /etc/sysconfig/apache2 Include /etc/apache2/sysconfig.d/loadmodule.conf ChrootDir /srv/www [...] # verbiete standardmäßig den Zugriff auf das gesamte Dateisystem #Options None Options +FollowSymLinks AllowOverride None Order deny,allow Deny from all [...] |

Als nächstes müssen wir unseren vhosts mitteilen, dass sich das Document Root geändert hat (zum Beispiel übersetzt sich ein DocumentRoot /srv/www jetzt in DocumentRoot /). Wir können dies entweder tun, indem wir die DocumentRoot-Direktive jedes vhosts ändern, oder einfacher, indem wir einen Symlink im Dateisystem erstellen.


3.1 Erste Methode: Ändern des DocumentRoot

Angenommen, wir haben einen vhost mit DocumentRoot /srv/www. Wir müssen jetzt die vhost-Konfiguration dieses vhosts öffnen und DocumentRoot /srv/www in DocumentRoot / ändern. Dementsprechend würde sich DocumentRoot /srv/www/web1/web jetzt in DocumentRoot /web1/web übersetzen, und so weiter. Wenn Sie diese Methode verwenden möchten, müssen Sie den DocumentRoot für jeden einzelnen vhost ändern.

3.2 Zweite Methode: Erstellen eines Symlinks im Dateisystem

Diese Methode ist einfacher, da Sie es nur einmal tun müssen und keine vhost-Konfiguration ändern müssen. Wir erstellen einen Symlink von /srv/www/srv/www nach /srv/www:

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

Schließlich müssen wir Apache stoppen, einen Symlink von /var/run/httpd2.pid nach /srv/www/var/run/httpd2.pid erstellen und ihn erneut starten:

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

Das war’s. Sie können jetzt Ihre Webseiten wie gewohnt aufrufen, und sie sollten ohne Probleme bereitgestellt werden, solange es sich um statische HTML-Dateien oder um mod_php handelt.

Wenn Sie CGI verwenden, z. B. Perl, suPHP, Ruby usw., müssen Sie den Interpreter (z. B. /usr/bin/perl, /usr/sbin/suphp usw.) zusammen mit allen Bibliotheken, die der Interpreter benötigt, in das Chroot-Gefängnis kopieren. Sie können mit dem Befehl ldd herausfinden, welche Bibliotheken benötigt werden, z. B.

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#

Wenn Sie alle erforderlichen Dateien kopiert haben, die Seite jedoch immer noch nicht funktioniert, sollten Sie einen Blick in das Apache-Fehlerprotokoll werfen. In der Regel sagt es Ihnen, wo das Problem liegt. Lesen Sie auch http://core.segfault.pl/~hobbit/mod_chroot/caveats.html für bekannte Probleme und Lösungen.

4 Links

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.