Apache Konfiguration · 3 min read · Dec 30, 2025

Chrooting Apache2 Mit mod_chroot Auf OpenSUSE 12.2

Chrooting Apache2 Mit mod_chroot Auf OpenSUSE 12.2

Version 1.0
Autor: Falko Timme
Folge mir auf Twitter

Dieser Leitfaden erklärt, wie man mod_chroot mit Apache2 auf einem OpenSUSE 12.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 12.2 System mit einem funktionierenden Apache2 haben. Darüber hinaus gehe ich davon aus, dass Sie eine oder mehrere Webseiten 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 12.2, daher müssen wir es selbst erstellen. Zuerst installieren wir die Voraussetzungen:

zypper install libgcc glibc-devel gcc flex lynx compat-readline4 db-devel wget gcc-c++ make vim 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:

systemctl restart apache2.service

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 gechrootet ist, übersetzt sich /var/run/httpd2.pid zu /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 Dokumentenstammverzeichnis geändert hat (zum Beispiel übersetzt sich ein DocumentRoot /srv/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 /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 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 dies nur einmal tun müssen und keine vhost-Konfiguration ändern müssen. Wir erstellen einen Symlink, der von /srv/www/srv/www auf /srv/www zeigt:

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:

systemctl stop apache2.service
ln -sf /srv/www/var/run/httpd2.pid /var/run/httpd2.pid  
systemctl start apache2.service

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

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 vom Interpreter benötigten Bibliotheken in das Chroot-Gefängnis kopieren. Sie können die benötigten Bibliotheken mit dem Befehl ldd herausfinden, 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. Normalerweise 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.