Changeroot Umgebungen an den Beispielen Apache und BIND
Norbert Tretkowski
Debian Entwickler
tretkowski@bzimage.de
(page 1)

Was ist chroot?

- Ein Betriebssystemaufruf

- Ein Programm

(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

- Benötigte Software: BIND

- 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

- Möglichkeit /chroot/bind

- 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)

- /chroot/bind/etc

- named.conf
- localtime
- group (nur ein Eintrag für GID named)
- passwd (ein Eintrag für UID named)

- /chroot/bind/etc/bind

- Zonenfiles für BIND

(page 8)

Beispiel BIND: Füllen der Verzeichnisse (2)

- /chroot/bind/dev

- 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

- BIND:

/chroot/named/usr/local/sbin/named \
-u named -g named -t /chroot/named

- syslogd:

syslogd -m 0 -a /chroot/named/dev/log
(page 11)

Beispiel Apache: Erstellen der Verzeichnisse

- Moeglichkeit /chroot/apache

- Verzeichnisse darunter:

- /chroot/apache/dev
- /chroot/apache/lib
- /chroot/apache/etc
- /chroot/apache/bin
- /chroot/apache/usr/local

(page 12)

Beispiel Apache: Verzeichnisse fuellen (1)

- /chroot/apache/dev

- mknod -m 666 /chroot/apache/dev/null c 1 3

(page 13)

Beispiel Apache: Verzeichnisse fuellen (2)

- /chroot/apache/etc

- 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)

- /usr/local

- 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)