16.4. Einrichtung und Verwaltung von Jails

Einige Administratoren unterscheiden zwei verschiedene Jail-Arten: “Komplette” Jails, die ein echtes FreeBSD darstellen und Jails für einen bestimmten “Dienst”, die nur einer bestimmten Anwendung oder einem Dienst (der möglicherweise mit besonderen Privilegien laufen soll) gewidmet sind. Dies ist aber nur eine konzeptuelle Unterscheidung, die Einrichtung einer Jail bleibt davon gänzlich unberührt.

# setenv D /hier/ist/die/jail
# mkdir -p $D (1)
# cd /usr/src
# make buildworld (2)
# make installworld DESTDIR=$D (3)
# make distribution DESTDIR=$D (4)
# mount -t devfs devfs $D/dev (5)
(1)
Das Festlegen des Installationsorts für das Jail eignet sich am besten als Startpunkt. Hier wird sich die Jail innerhalb des Host-Dateisystems befinden. Eine gute Möglichkeit wäre etwa /usr/jail/name_der_jail, wobei name_der_jail den Hostname darstellt, über den die Jail identifiziert werden soll. Das Dateisystem unterhalb von /usr/ stellt normalerweise aussreichend Platz für eine Jail zur Verfügung (bedenken Sie, dass eine “komplette” Jail ein Replikat einer jeden Datei der Standardinstallation des FreeBSD-Basissystems enthält.
(2)
Wenn Sie bereits ihre Systemanwendungen mittels make world oder make buildworld neu erstellt haben, können Sie diesen Schritt überspringen und die Systemanwendungen in die neue Jail installieren.
(3)
Dieser Befehl wird den Verzeichnisbaum mit allen notwendigen Binärdateien, Bibliotheken, Manualpages usw. erstellen.
(4)
Der distribution-Befehl lässt make alle benötigten Konfigurationsdateien installieren, es werden also alle installierbaren Dateien aus /usr/src/etc/ in das Verzeichnis /etc der Jail installiert (also nach $D/etc/).
(5)
Das Einhängen des devfs(8)-Dateisystems innerhalb der Jail ist nicht unbedingt notwendig. Allerdings benötigt fast jede Anwendung Zugriff auf wenigstens ein Gerät. Es ist daher sehr wichtig, den Zugriff auf Devices aus der Jail heraus zu kontrollieren, da unsaubere Einstellungen es einem Angreifer erlauben könnten, in das System einzudringen. Die Kontrolle über devfs(8) erfolgt durch die in den Manualpages devfs(8) und devfs.conf(5) beschriebenen Regeln.

Ist eine Jail einmal erst erstellt, kann sie durch jail(8) gestartet werden. jail(8) benötigt zwingend mindestens vier Argumente, die im Abschnitt Abschnitt 16.3.1 des Handbuchs beschrieben sind. Weitere Argumente sind möglich, um beispielsweise die Jail mit den Berechtigungen eines bestimmten Benutzers laufen zu lassen. Das Argument command hängt vom Typ der Jail ab; für ein virtuelles System ist /etc/rc eine gute Wahl, da dies dem Startvorgang eines echten FreeBSD-Systems entspricht. Bei einer Service-Jail hängt dieses von der Art des Dienstes ab, der in der Jail laufen soll.

Jails werden häufig mit dem Betriebssystem gestartet, da der rc-Mechanismus von FreeBSD dafür eine einfach zu realisierende Möglichkeit bietet.

  1. Eine Liste der Jails, die mit dem Betriebssystem gestartet werden sollen, wird in die Datei rc.conf(5) geschrieben:

    jail_enable="YES"   # Set to NO to disable starting of any jails
    jail_list="www"     # Space separated list of names of jails
    

    Anmerkung: Die Namen der Jails in der jail_list sollten nur alphanumerische Zeichen enthalten.

  2. Für jede Jail in der jail_list sollten in rc.conf(5) einige Einstellungen vorgenommen werden:

    jail_www_rootdir="/usr/jail/www"     # jail's root directory
    jail_www_hostname="www.example.org"  # jail's hostname
    jail_www_ip="192.168.0.10"           # jail's IP address
    jail_www_devfs_enable="YES"          # mount devfs in the jail
    jail_www_devfs_ruleset="www_ruleset" # devfs ruleset to apply to jail
    

    Beim Start einer in rc.conf(5) konfigurierten Jail wird das /etc/rc-Skript der Jail (das "annimmt", dass es sich in einem kompletten System befindet) aufgerufen. Für Service-Jails sollten die Startskripte der Jail durch das Setzen der Option jail_jailname_exec_start entsprechend angepasst werden.

    Anmerkung: Eine vollständige Liste der Optionen findet sich in der Manualpage zu rc.conf(5).

Das /etc/rc.d/jail-Skript kann zum manuellen Starten und Stoppen der Jail genutzt werden, wenn ein Eintrag in rc.conf angelegt wurde:

# /etc/rc.d/jail start www
# /etc/rc.d/jail stop www

Es gibt momentan keinen sauberen Weg, eine jail(8) zu stoppen. Dies liegt daran, dass die Kommandos zum sauberen Herunterfahren eines Systems innerhalb einer Jail nicht ausgeführt werden können. Der beste Weg eine Jail zu beenden ist es daher, innerhalb der Jail den folgenden Befehl auszuführen (alternativ können Sie auch jexec(8) von außerhalb der Jail aufrufen):

# sh /etc/rc.shutdown

Weitere Informationen zu diesem Thema finden Sie in der Manualpage jail(8).

Wenn Sie Fragen zu FreeBSD haben, schicken Sie eine E-Mail an <[email protected]>.
Wenn Sie Fragen zu dieser Dokumentation haben, schicken Sie eine E-Mail an <[email protected]>.