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-develJetzt 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.cDann starten wir Apache neu:
systemctl restart apache2.service3 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/runJetzt 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
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 |
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 ../ wwwSchließ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.serviceln -sf /srv/www/var/run/httpd2.pid /var/run/httpd2.pid
systemctl start apache2.serviceDas 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/suphpserver2:/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
- mod_chroot: http://core.segfault.pl/~hobbit/mod_chroot/
- Apache: http://httpd.apache.org/
- OpenSUSE: http://www.opensuse.org/
Erhalte neue Beiträge in deinem Posteingang.
Kein Spam. Jederzeit abmelden.