Server-Konfiguration · 3 min read · Dec 26, 2025
Chrooting Apache2 Mit mod_chroot Auf Debian Squeeze
Chrooting Apache2 Mit mod_chroot Auf Debian Squeeze
Version 1.0
Autor: Falko Timme
Folge mir auf Twitter
Dieser Leitfaden erklärt, wie man mod_chroot mit Apache2 auf einem Debian Squeeze-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 Debian Squeeze-System mit einem funktionierenden Apache2 haben, z.B. wie in diesem Tutorial gezeigt: Apache2 Mit PHP5 Und MySQL Unterstützung Auf Debian Squeeze (LAMP) installieren. Darüber hinaus gehe ich davon aus, dass Sie eine oder mehrere Webseiten im Verzeichnis /var/www eingerichtet haben (z.B. wenn Sie ISPConfig verwenden).
2 Installation von mod_chroot
Um mod_chroot zu installieren, führen wir einfach aus:
apt-get install libapache2-mod-chroot
Dann aktivieren wir mod_chroot und starten Apache neu:
a2enmod mod_chroot /etc/init.d/apache2 restart
3 Konfiguration von Apache
Ich möchte das Verzeichnis /var/www als das Verzeichnis verwenden, das das Chroot-Gefängnis enthält. Der Apache von Debian verwendet die PID-Datei /var/run/apache2.pid; wenn Apache in /var/www chrooted ist, übersetzt sich /var/run/apache2.pid zu /var/www/var/run/apache2.pid. Daher erstellen wir jetzt dieses Verzeichnis:
mkdir -p /var/www/var/run chown -R root:root /var/www/var/run
Jetzt müssen wir Apache mitteilen, dass wir /var/www als unser Chroot-Verzeichnis verwenden möchten. Wir öffnen /etc/apache2/apache2.conf und fügen direkt unter der Zeile PidFile eine Zeile ChrootDir hinzu:
vi /etc/apache2/apache2.conf
| [...] # # PidFile: Die Datei, in der der Server seine Prozess- # identifikationsnummer aufzeichnen sollte, wenn er startet. # Dies muss in /etc/apache2/envvars gesetzt werden # PidFile ${APACHE_PID_FILE} ChrootDir /var/www [...] |
Als nächstes müssen wir unseren vhosts mitteilen, dass sich das Dokumentenstammverzeichnis geändert hat (zum Beispiel übersetzt sich ein DocumentRoot /var/www jetzt zu 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 /var/www. Wir müssen jetzt die vhost-Konfiguration dieses vhosts öffnen und DocumentRoot /var/www in DocumentRoot / ändern. Dementsprechend würde sich DocumentRoot /var/www/web1/web jetzt zu 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, der von /var/www/var/www auf /var/www zeigt:
mkdir -p /var/www/var cd /var/www/var ln -s ../../ www
Schließlich müssen wir Apache stoppen, einen Symlink von /var/run/apache2.pid nach /var/www/var/run/apache2.pid erstellen und ihn erneut starten:
/etc/init.d/apache2 stop
ln -s /var/www/var/run/apache2.pid /var/run/apache2.pid /etc/init.d/apache2 start
Das war’s. Sie können jetzt Ihre Webseiten wie zuvor 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/lib/suphp/suphp usw.) zusammen mit allen Bibliotheken, die der Interpreter benötigt, in das Chroot-Gefängnis kopieren. Sie können die benötigten Bibliotheken mit dem Befehl ldd herausfinden, z.B.
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:~#
Wenn Sie alle erforderlichen Dateien kopiert haben, die Seite jedoch immer noch nicht funktioniert, sollten Sie sich das Apache-Fehlerprotokoll ansehen. 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
- mod_chroot: http://core.segfault.pl/~hobbit/mod_chroot/
- Apache: http://httpd.apache.org/
- Debian: http://www.debian.org/
Erhalte neue Beiträge in deinem Posteingang.
Kein Spam. Jederzeit abmelden.