Jail Konzept

From: Gistolero <gistolero(at)GMX.de>
Date: Sat, 08 Feb 2003 15:34:00 +0100

Hallo!

Ich habe mir folgendes Jail-Konzept ueberlegt und wollte mal hoeren was Ihr
davon haltet. Ich hoffe ein aehnliches Konzept wurde nicht bereits
diskutiert. Im Archiv konnte ich jedenfalls nichts in der Art finden.

Bei einem Einsatz von Jail bzw. Chroot Umgebungen sehe ich zur Zeit immer
folgende Probleme:

- Die Einrichtung der Jail Umgebung ist relativ aufwendig. Man verbringt
viel Zeit damit, Lib-Abhaengigkeiten etc. zu verfolgen.
- Der Administrationsaufwand gegenueber einem System ohne Jail ist sehr
hoch. Jedesmal wenn ein System oder Package Update erscheint, muss es
sowohl im eigentlichen System, als auch in den verschiedenen Jails
aktualisiert werden.
- Es gibt Dienste, die im System und in allen Jail Umgebungen die gleiche
Arbeit verrichten. Obwohl die Konfigurationsdatei also in allen Umgebungen
gleich ist, muss sie in jeder Umgebung einzeln gepflegt werden.
- Es wird unnoetig viel Speicherplatz benoetigt. In Anbetracht der
derzeitigen Preise fuer Festplatten ein zugegebenermassen
vernachlaessigbares Argument.

Zusammengefasst kann man also sagen, dass ein Host mit Jail Umgebungen
gegenueber einem "normalen" System zwar erheblich sicherer, aber auch
wesentlich pflegeintensiver ist. Um nun das Beste aus diesen beiden Welten
zu vereinen, folgende Ueberlegungen:

Statt fuer jede Jail Umgebung ein eigenes kleines "System" in einem
Verzeichnis anzulegen, werden die Standard-Verzeichnisse einfach in die
Jail Umgebung gemountet:

1.) Auf dem Loopback Interface werden zwei zusaetzliche virtuelle Adressen
angelegt:
127.0.0.2 (NFS read-only)
127.0.0.3 (NFS read-write)

Folgende Verzeichnisse werden erstellt:

/jail/jails/test/etc
/jail/jails/test/dev
/jail/jails/test/bin
...
/jail/jails/test/var

Die Dateien in /dev, /tmp und /var werden manuell angelegt.

2.) Bis auf /etc wird der Rest mit NFS read-only gemountet:

mount -t nfs 127.0.0.2:/bin /jail/jails/test/bin
...
mount -t nfs 127.0.0.2:/usr /jail/jails/test/usr

3.) /etc kann nicht RO vom System gemountet werden, da z.B. /etc/rc.conf
angepasst werden muss. D.h. /etc kann auch manuell angelegt werden, dann
hat man aber wieder relativ viel Administrationsaufwand. Die bessere
Loesung ist wohl, /etc mit "union" zu mounten. union gilt zwar nicht als
100 Prozent stabil, ich habe im Praxisbetrieb allerdings bisher keine
schlechten Erfahrungen gemacht. Dank union ist es dann moeglich, nur die
wirklich noetigen Konfigurationsdateien in den Jails zu "ueberschreiben".

Nachdem alles gemountet wurde, hat man unter /jail/jails/test eine
vollstaendige read-only Jail-Umgebung.

4.) Da FreeBSD alle Ports in /usr/local installiert, muss nur noch dieses
Verzeichnis mittels NFS read-write "drueber" gemountet werden:

mkdir -p /jail/nfs/test/usr/local
mount -t nfs 127.0.0.1:/jail/nfs/test/usr/local /jail/jails/test/usr/local

Waehrend der Installation von Ports muss das Ports Verzeichnis natuerlich
auch RW gemountet werden. Anschliessend kann die Jail Umgebung gestartet
und die benoetigten Ports installiert werden.

5.) Die eigentlichen Daten, die z.B. vom Apache angezeigt werden sollen,
koennen ebenfalls mit NFS in die Jail Umgebung gemountet werden.

6.) Mittels Firewall Filter werden riskante Dienste wie NFS fuer die
Aussenwelt unzugaenglich gemacht.

Nachteile dieses Verfahrens:
- Ein Angreifer, dem es gelingt in ein Jail einzudringen, hat alle Binaries
des Systems zur Verfuegung. Das schoene an Jails gegenueber dem
Chroot-Konzept ist aber ja gerade, dass alle gefaehrlichen Programme auch
fuer Root nicht nutzbar sind.
- Da permanent NFS Zugriffe erfolgen, benoetigt man ein entsprechend
performantes System. Da es aber heutzutage sehr potente Rechner in jedem
Discounter zu Spottpreisen gibt, sollte das kein wirkliches Problem sein.

Vorteile des Verfahrens:
- Die Einrichtung von Jails beschraenkt sich auf das Anpassen eines Skripts
und die Installation der benoetigten Ports. Es muessen keine
Lib-Abhaengigkeiten etc. verfolgt werden.
- Updates werden wesentlich einfacher. Wenn man z.B. von einem veralteten
Release auf ein neues upgraden moechte, beendet man alle Jails und startet
anschliessend "make world". Damit hat man sowohl alle System-, als auch
alle Jail-Binaries aktualisiert. Anschliessend muss man nur noch die Ports
in den Jails updaten.
- Fast alle Dateien und Verzeichnisse werden read-only gemountet.
- Generelle Konfigurationsdateien in /etc muessen nur noch im System und
nicht mehr in allen Jails gepflegt werden.

Also, gebt mir bitte mal ein Feedback, was ihr von diesem Konzept haltet.

Tschuess,

Simon

To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Sat 08 Feb 2003 - 15:40:18 CET

search this site