14.3. 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. Bei der Erstellung einer kompletten Jail gibt es zwei Optionen für die Quelle des Userlands: vorkompilierte Binärpakete (im Lieferumfang der Installationsmedien enthalten) oder die Kompilierung aus dem Quelltext.

14.3.1. Eine Jail installieren

14.3.1.1. Eine Jail aus dem Internet installieren

Der Werkzeug bsdinstall(8) kann verwendet werden, um die für eine Jail benötigten Binärdateien zu holen und zu installieren. Dies geht durch die Auswahl eines Spiegelservers, welche Distributionen in das Zielverzeichnis installiert werden sollen, sowie die grundlegende Konfiguration einer Jail:

# bsdinstall jail /pfad/zur/jail

Nachdem der Befehl ausgeführt wurde, wird der Host für den Betrieb der Jail konfiguriert.

14.3.1.2. Eine Jail aus einer ISO-Datei installieren

Um das Basissystem von Installationsmedien zu installieren, erstellen Sie zunächst das Rootverzeichnis für die Jail. Dazu setzen Sie DESTDIR auf das entsprechende Verzeichnis.

Starten Sie eine Shell und legen Sie DESTDIR fest:

# sh
# export DESTDIR=/hier/ist/die/jail

Hängen Sie das Installationsmedium wie in mdconfig(8) beschrieben ein, wenn Sie von einem ISO-Abbild installieren:

# mount -t cd9660 /dev/`mdconfig -f cdimage.iso` /mnt
# cd /mnt/usr/freebsd-dist/

Extrahieren Sie die Binärdateien aus den Archiven des Installationsmediums in das entsprechende Verzeichnis. Es wird mindestens das base-Set benötigt, aber Sie können auch eine komplette Installation durchführen, wenn Sie dies bevorzugen.

Um lediglich das Basissystem zu installieren, führen Sie dieses Kommando aus:

# tar -xf base.txz -C $DESTDIR

Führen Sie folgendes Kommando aus, um alles außer den Kernel zu installieren:

# for set in base ports; do tar -xf $set.txz -C $DESTDIR ; done

14.3.1.3. Eine Jail aus den Quellen bauen und installieren

Die Manualpage jail(8) beschreibt die Erstellung einer Jail wie folgt:

# 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. /usr/ stellt normalerweise ausreichend 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.

14.3.2. Den Host konfigurieren

Ist die Jail erst einmal erstellt, kann sie durch jail(8) gestartet werden. jail(8) benötigt zwingend mindestens vier Argumente, die in Abschnitt 14.1, „Übersicht“ 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.

  • Konfigurieren Sie die Jail in /etc/jail.conf:

    www {
        host.hostname = www.example.org;           # Hostname
        ip4.addr = 192.168.0.10;                   # IP address of the jail
        path = "/usr/jail/www";                    # Path to the jail
        devfs_ruleset = "www_ruleset";             # devfs ruleset
        mount.devfs;                               # Mount devfs inside the jail
        exec.start = "/bin/sh /etc/rc";            # Start command
        exec.stop = "/bin/sh /etc/rc.shutdown";    # Stop command
    }

    Um die Jails mit dem Betriebssystem zu starten, fügen Sie folgende Zeile in /etc/rc.conf ein:

    jail_enable="YES"   # Set to NO to disable starting of any jails

    Beim Start einer in jail.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 exec.start entsprechend angepasst werden.

    Anmerkung:

    Eine vollständige Liste der Optionen findet sich in der Manualpage jail.conf(5).

service(8) kann zum manuellen Starten und Stoppen der Jail genutzt werden, wenn ein Eintrag in jail.conf angelegt wurde:

# service jail start www
# service jail stop www

Jails können mit jexec(8) heruntergefahren werden. Führen Sie zunächst jls(8) aus, um die JID der Jail ausfindig zu machen. Anschließend können Sie jexec(8) benutzen, um das Shutdown-Skript in der Jail auszuführen.

# jls
   JID  IP Address      Hostname                      Path
     3  192.168.0.10    www                           /usr/jail/www
# jexec 3 /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 <de-bsd-questions@de.FreeBSD.org>.

Wenn Sie Fragen zu dieser Dokumentation haben, schicken Sie eine E-Mail an <de-bsd-translators@de.FreeBSD.org>.