[ zurück ] [ Inhalt ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ A ] [ B ] [ C ] [ D ] [ E ] [ F ] [ G ] [ H ] [ weiter ]
Chroot
-Umgebung für Apache
Das Programm chroot
wird häufig dazu benutzt, einen Daemon in
einen beschränkten Verzeichnisbaum einzusperren. Sie können es dazu verwenden,
um Dienste von anderen abzuschirmen, so dass Sicherheitsprobleme mit einem
Softwarepaket den ganzen Server gefährden können. Durch die Verwendung des
Skripts makejail
wird es viel leichter, einen Verzeichnisbaum in
einer chroot
-Umgebung einzurichten und zu aktualisieren.
FIXME: Apache can also be chrooted using http://www.modsecurity.org
which
is available in libapache-mod-security
(for Apache 1.x) and
libapache2-mod-security
(for Apache 2.x).
Dieses Dokument ist urheberrechtlich von Alexandre Ratti (2002) geschützt. Es
steht unter einer doppelten Lizenz, nämlich der GPL Version 2 (GNU General
Public License) und der GNU-FDL 1.2 (GNU Free Documentation Licence). Es wurde
in dieses Handbuch mit seiner ausdrücklichen Genehmigung aufgenommen. (Siehe
auch das Originaldokument
)
Diese Vorgehensweise wurde auf Debian GNU/Linux 3.0 (Woody) mit
makejail
0.0.4-1 (in Debian/Testing) getestet.
Melden Sie sich als Root
an und erstellen Sie ein neues
Verzeichnis für das Gefängnis:
$ mkdir -p /var/chroot/apache
Erstellen Sie einen neuen Nutzer und eine neue Gruppe. Der Apache in der
chroot
-Umgebung wird als dieser Nutzer und Gruppe laufen, die für
nichts anderes auf dem System verwendet wird. In dem Beispiel heißen sowohl
Nutzer als auch Gruppe chrapach
.
$ adduser --home /var/chroot/apache --shell /bin/false \ --no-create-home --system --group chrapach
FIXME: is a new user needed? (Apache already runs as the apache user)
Installieren Sie ganz normal Apache auf Debian: apt-get install apache
Richten Sie Apache ein (z.B. definieren Sie Ihrer Subdomains usw.). Weisen
Sie in der Konfigurationsdatei /etc/apache/httpd.conf
den Optionen
Group und User chrapach zu. Starten Sie Apache
neu und stellen Sie sicher, dass der Server korrekt funktioniert. Danach
halten Sie den Server wieder an.
Installieren Sie makejail
(ist fürs Erste in Debian/Testing
vorhanden). Sie sollten auch wget
und lynx
installieren, da sie von makejail
benutzt werden, um den Server in
der chroot
-Umgebung zu testen: apt-get install makejail wget
lynx.
Kopieren Sie die Beispielkonfigurationsdatei für Apache ins Verzeichnis
/etc/makejail
:
# cp /usr/share/doc/makejail/examples/apache.py /etc/makejail/
Bearbeiten Sie /etc/makejail/apache.py
. Sie müssen die Optionen
chroot, users und groups verändern. Um diese
Version von makejail
laufen zu lassen, können Sie auch die Option
packages
hinzufügen. Vergleichen Sie die Makejail-DoKumentation
.
Die Konfigurationsdatei könnte beispielsweise so aussehen:
chroot="/var/chroot/apache" testCommandsInsideJail=["/usr/sbin/apachectl start"] processNames=["apache"] testCommandsOutsideJail=["wget -r --spider http://localhost/", "lynx --source https://localhost/"] preserve=["/var/www", "/var/log/apache", "/dev/log"] users=["chrapach"] groups=["chrapach"] packages=["apache", "apache-common"] userFiles=["/etc/password", "/etc/shadow"] groupFiles=["/etc/group", "/etc/gshadow"] forceCopy=["/etc/hosts", "/etc/mime.types"]
FIXME: some options do not seem to work properly. For instance,
/etc/shadow
and /etc/gshadow
are not copied, whereas
/etc/password
and /etc/group
are fully copied instead
of being filtered.
Erstellen Sie den Verzeichnisbaum für chroot: makejail /etc/makejail/apache.py.
Falls /etc/password
und /etc/group
vollständig
kopiert wurden, geben Sie Folgendes ein, um sie mit gefilterten Fassungen zu
ersetzen:
$ grep chrapach /etc/passwd > /var/chroot/apache/etc/passwd $ grep chrapach /etc/group > /var/chroot/apache/etc/group
Kopieren Sie die Webseiten und die Logs ins Gefängnis. Diese Dateien werden
nicht automatisch mitkopiert (sehen Sie sich dazu die Option preserve
in der Konfigurationsdatei von makejail
an).
# cp -Rp /var/www /var/chroot/apache/var # cp -Rp /var/log/apache/*.log /var/chroot/apache/var/log/apache
Editieren Sie das Startskript für den Logging-Daemon des Systems so, dass er
auch den Socket /var/chroot/apache/dev/log
beobachtet. Ersetzen
Sie in /etc/init.d/sysklogd
SYSLOGD="" mit
SYSLOGD=" -a /var/chroot/apache/dev/log" und starten Sie
den Daemon neu (/etc/init.d/sysklogd restart).
Editieren Sie das Startskript von Apache (/etc/init.d/apache
).
Sie müssen vielleicht ein paar Änderung am Standardstartskript vornehmen, damit
des richtig in einem Verzeichnisbaum in einer chroot
-Umgebung
läuft. Da wäre:
Legen Sie die Variable CHRDIR am Anfang der Datei neu fest.
Bearbeiten Sie die Abschnitte start, stop, reload etc.
Fügen Sie eine Zeile hinzu, um das /proc
-Dateisystem innerhalb des
Gefängnisses zu mounten und abzumounten.
#! /bin/bash # # apache Start the apache HTTP server. # CHRDIR=/var/chroot/apache NAME=apache PATH=/bin:/usr/bin:/sbin:/usr/sbin DAEMON=/usr/sbin/apache SUEXEC=/usr/lib/apache/suexec PIDFILE=/var/run/$NAME.pid CONF=/etc/apache/httpd.conf APACHECTL=/usr/sbin/apachectl trap "" 1 export LANG=C export PATH test -f $DAEMON || exit 0 test -f $APACHECTL || exit 0 # ensure we don't leak environment vars into apachectl APACHECTL="env -i LANG=${LANG} PATH=${PATH} chroot $CHRDIR $APACHECTL" if egrep -q -i "^[[:space:]]*ServerType[[:space:]]+inet" $CONF then exit 0 fi case "$1" in start) echo -n "Starting web server: $NAME" mount -t proc proc /var/chroot/apache/proc start-stop-daemon --start --pidfile $PIDFILE --exec $DAEMON \ --chroot $CHRDIR ;; stop) echo -n "Stopping web server: $NAME" start-stop-daemon --stop --pidfile "$CHRDIR/$PIDFILE" --oknodo umount /var/chroot/apache/proc ;; reload) echo -n "Reloading $NAME configuration" start-stop-daemon --stop --pidfile "$CHRDIR/$PIDFILE" \ --signal USR1 --startas $DAEMON --chroot $CHRDIR ;; reload-modules) echo -n "Reloading $NAME modules" start-stop-daemon --stop --pidfile "$CHRDIR/$PIDFILE" --oknodo \ --retry 30 start-stop-daemon --start --pidfile $PIDFILE \ --exec $DAEMON --chroot $CHRDIR ;; restart) $0 reload-modules exit $? ;; force-reload) $0 reload-modules exit $? ;; *) echo "Usage: /etc/init.d/$NAME {start|stop|reload|reload-modules|force-reload|restart}" exit 1 ;; esac if [ $? == 0 ]; then echo . exit 0 else echo failed exit 1 fi
FIXME: should the first Apache process be run as another user than root (i.e. add --chuid chrapach:chrapach)? Cons: chrapach will need write access to the logs, which is awkward.
Ersetzen Sie in /etc/logrotate.d/apache
/var/log/apache/*.log durch
/var/chroot/apache/var/log/apache/*.log.
Starten Sie Apache (/etc/init.d/apache start
) und überprüfen Sie,
was im Protokoll des Gefängnisses gemeldet wird
(/var/chroot/apache/var/log/apache/error.log
). Wenn Ihre
Einstellung komplexer sein sollte (z.B. wenn Sie auch PHP und MySQL
einsetzen), werden wahrscheinlich Dateien fehlen. Wenn einige Dateien nicht
automatisch von makejail
kopiert werden, können Sie diese in den
Optionen forceCopy (um Dateien direkt zu kopieren) oder
packages (um ganze Pakete mit ihren Abhängigkeiten zu kopieren) in der
Konfigurationsdatei /etc/makejail/apache.py
aufführen.
Geben Sie ps aux | grep apache ein, um sicherzustellen, dass Apache läuft. Sie sollten etwas in dieser Art sehen:
root 180 0.0 1.1 2936 1436 ? S 04:03 0:00 /usr/sbin/apache chrapach 189 0.0 1.1 2960 1456 ? S 04:03 0:00 /usr/sbin/apache chrapach 190 0.0 1.1 2960 1456 ? S 04:03 0:00 /usr/sbin/apache chrapach 191 0.0 1.1 2960 1456 ? S 04:03 0:00 /usr/sbin/apache chrapach 192 0.0 1.1 2960 1456 ? S 04:03 0:00 /usr/sbin/apache chrapach 193 0.0 1.1 2960 1456 ? S 04:03 0:00 /usr/sbin/apache
Stellen Sie sicher, dass die Apache-Prozesse in einer
chroot
-Umgebung laufen. Betrachten Sie dazu das
/proc
-Dateisystem: ls -la
/proc/process_number/root/., wobei process_number
einer der PID-Nummern ist, die oben aufgeführt wurden (z.B. 189 in der zweiten
Reihe). Die Einträge des eingeschränkten Verzeichnisbaums sollten Sie sich
auflisten lassen:
drwxr-sr-x 10 root staff 240 Dec 2 16:06 . drwxrwsr-x 4 root staff 72 Dec 2 08:07 .. drwxr-xr-x 2 root root 144 Dec 2 16:05 bin drwxr-xr-x 2 root root 120 Dec 3 04:03 dev drwxr-xr-x 5 root root 408 Dec 3 04:03 etc drwxr-xr-x 2 root root 800 Dec 2 16:06 lib dr-xr-xr-x 43 root root 0 Dec 3 05:03 proc drwxr-xr-x 2 root root 48 Dec 2 16:06 sbin drwxr-xr-x 6 root root 144 Dec 2 16:04 usr drwxr-xr-x 7 root root 168 Dec 2 16:06 var
Um diesen Test zu automatisieren, geben Sie ls -la /proc/`cat /var/chroot/apache/var/run/apache.pid`/root/. ein.
FIXME: Add other tests that can be run to make sure the jail is closed?
Ich mag das, da es so nicht sehr schwierig ist, das Gefängnis einzurichten, und der Server mit nur zwei Zeilen aktualisiert werden kann:
apt-get update && apt-get install apache makejail /etc/makejail/apache.py
Wenn Sie nach weiteren Informationen suchen, sehen Sie sich die Quellen an, auf denen diese Anleitung beruht:
Die Makejail-Homepage
.
Diese Programm wurde von Alain Tesio geschrieben.
Das Chrooting daemons
and system processes HOWTO
von Jonathan A. Zdziarski, 12/03/2003
[ zurück ] [ Inhalt ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ A ] [ B ] [ C ] [ D ] [ E ] [ F ] [ G ] [ H ] [ weiter ]
Anleitung zum Absichern von Debian
Version: 3.11, Mon, 30 Aug 2010 12:26:09 +0200jfs@debian.org