Apache2 mit mod_chroot auf Debian Etch chrooten

Version 1.0
Author: Falko Timme


Diese Anleitung veranschaulicht, wie man mod_chroot mit Apache2 auf einem Debian Etch System aufsetzt. Mit mod_chroot kannst Du Apache2 in einer sicheren chroot Umgebung ausführen und Deinen Server vor Einbruchsversuchen zu schützen.

Ich übernehme keine Garantie, dass dies auch bei Dir funktioniert!

1 Vorbemerkung

Ich gehe davon aus, dass Du ein funktionierendes Debian Etch System hast, auf dem Apache2 läuft, wie z.B. in dieser Anleitug gezeigt wird: The Perfect Setup - Debian Etch (Debian 4.0). Weiterhin nehme ich an, dass Du eine oder mehrere Webseiten innerhalb des /var/www Verzeichnisses (z.B. wenn Du ISPConfig verwendest) eingerichtet hast.

2 Installation von mod_chroot

Um mod_chroot zu installieren, führe Folgendes aus:

apt-get install libapache2-mod-chroot

Dann aktivieren wir mod_chroot und starten Apache neu:

a2enmod mod_chroot
/etc/init.d/apache2 force-reload

3 Konfiguration von Apache

Ich möchte das /var/www Verzeichnis als Verzeichnis, welches das chroot Gefängnis enthält, verwenden. Debians Apache verwendet die PID Datei /var/run/apache2.pid; wenn das Verzeichnis /var/www als chroot Verzeichnis des Apache gesetzt ist, wird der Pfad /var/run/apache2.pid umgesetzt zu /var/www/var/run/apache2.pid. Daher erstellen wir nun dieses Verzeichnis:

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

Nun 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 PidFile Zeile die Zeile ChrootDir hinzu:

vi /etc/apache2/apache2.conf


[...]
# # PidFile: The file in which the server should record its process # identification number when it starts. # PidFile /var/run/apache2.pid ChrootDir /var/www [...]
Als Nächstes müssen wir unseren vhosts mitteilen, dass sich der Dokumenten-Root geändert hat (zum Beispiel wird jetzt ein DocumentRoot /var/www umgesetzt zu DocumentRoot /). Entweder ändern wir dazu die DocumentRoot Direktive jedes vhosts oder, noch einfacher, wir erstellen einen Symlink im Dateisystem.


3.1 Erste Methode: Den Dokumenten-Root ändern

Lass uns davon ausgehen, dass wir einen vhost mit DocumentRoot /var/www haben. Nun müssen wir die vhost Konfiguration dieses vhosts öffnen und DocumentRoot /var/www zu DocumentRoot / ändern. DocumentRoot /var/www/web1/web würde nun zu DocumentRoot /web1/web umgesetzt werden und so weiter. Wenn Du diese Methode verwenden möchtest, musst Du den DocumentRoot für jeden einzelnen vhost ändern.

3.2 Zweite Methode: Einen Symlink im Dateisystem erstellen

Diese Methode ist einfacher, da Du dies nur einmal ausführen und keine vhost Konfiguration ändern musst. Wir erstellen einen symlink, der von /var/www/var/www nach /var/www zeigt:

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


Schließlich müssen wir Apache beenden, einen symlink von /var/run/apache2.pid nach /var/www/var/run/apache2.pid erstellen und es wieder 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. Nun kannst Du Deine Webseiten wir zuvor abrufen. Sie sollten ohne Probleme bedient werden, so lange sie statische HTML Dateien sind oder mod_php verwenden.


Falls Du CGI, z.B. Perl, suPHP, Ruby, etc., verwendest, musst Du den Interpreter (z.B. /usr/bin/perl, /usr/sbin/suphp, etc.) ins chroot Gefängnis kopieren, zusammen mit allen Libraries, die der Interpreter benötigt. Mit dem ldd Befehl findest Du die benötigten Libraries heraus, 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 Du alle benötigten Dateien kopiert hast, die Seite aber trotzdem nicht funktioniert, solltest Du Dir das Apache Error Log ansehen. Für gewöhnlich teilt es Dir mit, wo das Problem liegt. Sieh Dir ebenfalss http://core.segfault.pl/~hobbit/mod_chroot/caveats.html an, um etwas über bekannte Probleme und Lösungen in Erfahrung zu bringen.

4 Links

0 Kommentar(e)

Zum Posten von Kommentaren bitte