Changeroot Umgebungen an den Beispielen Apache und BIND
Norbert Tretkowski
Debian Entwickler
tretkowski@bzimage.de
(page 1)
Was ist chroot?
(page 2)
Was macht chroot? (1)
- Einschließen von Programmen in ein Verzeichnis
- Ein eingesperrter Prozess kann nur noch unterhalb dieses Verzeichnises Unheil treiben
- Dieses Verzeichnis muß aber alle vom Prozess benötigten Dateien, Pipes und Unix-Domain Sockets enthalten
(page 3)
Was macht chroot? (2)
- Der Systemcall chroot() wird von einigen Programmen (z.B. Postfix) schon von Haus aus verwendet
- Programme die diese Funktionalität von sich aus nicht haben können auch in einer abgeschlossenen Umgebung laufen
(page 4)
Beispiel BIND: Installation
- Installation der Software wie in der jeweils beiliegenden Dokumentation beschrieben
(page 5)
Beispiel BIND: Erstellen statischer Binaries
- In der Zeile 'CDEBUG= -O2 -g' in src/port/linux/Makefile.set ein '-static' hinzufügen
- Aufruf von 'make clean && make'
(page 6)
Beispiel BIND: Erstellen eines Verzeichnisses
- Die Verzeichnisstruktur darunter:
- /chroot/bind/dev
- /chroot/bind/etc/bind
- /chroot/bind/usr/sbin
- /chroot/bind/var/run
(page 7)
Beispiel BIND: Füllen der Verzeichnisse (1)
- named.conf
- localtime
- group (nur ein Eintrag für GID named)
- passwd (ein Eintrag für UID named)
(page 8)
Beispiel BIND: Füllen der Verzeichnisse (2)
- mknod -m 666 /chroot/bind/dev/null c 1 3
- /chroot/bind/usr/local/bin
- Statisch gelinkte `named` und `named-xfer` Binaries hinein kopieren
(page 9)
Beispiel BIND: User und Gruppe hinzufügen
- User 'named' in /chroot/bind/etc/passwd
- Gruppe 'named' in /chroot/bind/etc/group
- Verzeichnis /chroot/bind/var/run für User 'named' beschreibbar machen
- Besitzer der Dateien unter /chroot/bind/etc/bind: named.named
(page 10)
Beispiel BIND: Init Scripte
/chroot/named/usr/local/sbin/named \
-u named -g named -t /chroot/named
syslogd -m 0 -a /chroot/named/dev/log
(page 11)
Beispiel Apache: Erstellen der Verzeichnisse
- Moeglichkeit /chroot/apache
- /chroot/apache/dev
- /chroot/apache/lib
- /chroot/apache/etc
- /chroot/apache/bin
- /chroot/apache/usr/local
(page 12)
Beispiel Apache: Verzeichnisse fuellen (1)
- mknod -m 666 /chroot/apache/dev/null c 1 3
(page 13)
Beispiel Apache: Verzeichnisse fuellen (2)
- cp /etc/passwd /chroot/apache/etc
- cp /etc/shadow /chroot/apache/etc
- cp /etc/group /chroot/apache/etc
- cp /etc/resolv.conf /chroot/apache/etc
- cp /etc/hosts /chroot/apache/etc
- cp /etc/localtime /chroot/apache/etc
- cp /etc/ld.so.* /chroot/apache/etc
(page 14)
Beispiel Apache: Verzeichnisse fuellen (3)
- /lib
- cp /lib/libm.* /chroot/apache/lib/
- cp /lib/libgdbm.* /chroot/apache/lib
- cp /lib/libdb.* /chroot/apache/lib
- cp /lib/libdl.* /chroot/apache/lib
- cp /lib/libc.* /chroot/apache/lib
- cp /lib/libnss* /chroot/apache/lib
(page 15)
Beispiel Apache: Verzeichnisse fuellen (4)
- cp -rp /usr/local/apache/ /chroot/apache/usr/local
(page 16)
Beispiel Apache: Init Script
- chroot /chroot/apache /usr/local/apache/bin/apachectl start
(page 17)
Feinheiten
- Anpassen von passwd, group und httpd.conf
- Permission 600 fuer passwd, shadown und group
(page 18)
Fazit
- Pro Dienst ein Verzeichnis
- Pro Dienst einen User und eine Group
(page 19)