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.
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.
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
Die Manualpage jail(8) beschreibt die Erstellung einer Jail wie folgt:
#
setenv D
/hier/ist/die/jail
#
mkdir -p $D
![]()
#
cd /usr/src
#
make buildworld
![]()
#
make installworld DESTDIR=$D
![]()
#
make distribution DESTDIR=$D
![]()
#
mount -t devfs devfs $D/dev
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 | |
Wenn Sie bereits ihre Systemanwendungen mittels
| |
Dieser Befehl wird den Verzeichnisbaum mit allen notwendigen Binärdateien, Bibliotheken, Manualpages usw. erstellen. | |
Der | |
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 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
hängt vom Typ der Jail ab; für ein
virtuelles System ist
command
/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.
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>.