Jails unter FreeBSD 13

rear view of a silhouette man in window

In diesem Artikel möchte ich erklären, was genau Jails sind, welche Vorteile sie bringen und natürlich wie man eine konfiguriert.

Der Einsatz von Jails liegt schon eine Weile zurück und wurde erstmals unter FreeBSD 4.0 implementiert. Eine Jail (= Gefängnis) ist eine in sich geschlossene Umgebung mit eigener IP-Adresse, Hostname, etc und lässt sich eigentlich mit einem Docker-Container gut vergleichen. Die Prozesse innerhalb der Jail können nicht auf das System außerhalb der Jail zugreifen oder verändern. So bietet sich eine Jail wunderbar als Testumgebung, um schon einmal einen Vorteil zu nennen. Jails sind quasi losgelöst vom eigentlichen Betriebssystem. Außerdem ist es möglich verschiedene Server-Dienste wie DHCP, DNS oder auch ein LDAP in jeweils einer eigenen Jail laufen zu lassen, um somit Struktur und Unabhängigkeit zu schaffen.

Grundlegende Konfiguration von Jails

Um hier erstmal einen Grundstein in Sachen Jails zu setzen, zeige ich jetzt ohne groß auszuschweifen, wie eine Jail aufzusetzen ist.

Als ersten Schritt muss die Nutzung von Jails aktiviert werden:

service jail enable

Danach bestimmen wir einen Speicherort, unter dem die Jail liegen soll. Ich lege mir dazu, aus alter Gewohnheit unter /usr/jails/ einen neuen Ordner an und benenne diesen nach meiner Jail:

mkdir /usr/jails/test

Ist das geschehen, kann mittels des Tools bsdinstall die Jail entsprechend installiert werden.

bsdinstall jail /usr/jails/test

Hier öffnet sich dann der Installer, der einen durch den verkürzten Installationsprozess führt. Ich empfehle hier für die langfristige Planung das src-Paket mitzuinstallieren, um später die Jail auch updaten zu können!

Ist die Jail abschließend installiert, können wir die Parameter der Jail vergeben.

Dazu habe ich unter /etc/jail.conf angelegt, falls noch nicht vorhanden, und folgende Einträge gesetzt:

test { 
    host.hostname = test;                       
    ip4.addr = 192.168.178.85; 
    interface = em0;                    
    path = "/usr/jails/test";                    
    mount.devfs="true";                                   
    exec.start = "/bin/sh /etc/rc";                
    exec.stop = "/bin/sh /etc/rc.shutdown";        
} 

Hierbei sind Hostname, IP, die Pfadangabe (path) und das Ausführungskommando beim Starten (exec.start) unter dem sich die Jail befindet, verpflichtend (oben fett markiert). Ich möchte angeschlossene Geräte eventuell mounten können, daher nehme ich mir noch den mount-Parameter mit rein. Mit dem Eintrag interface = em0 weise ich die IP-Adresse der Schnittstelle zu.

Damit wäre die Jail nun einsatzbereit. Zum Starten nimmt man folgendes Kommando:

service jail start <Jail-Name>
service jail start test              

Um den Status zu überprüfen gebe ich folgenden Befehl ein

service jail status test              

und erhalte dabei folgenden Output, wenn alles richtig funktioniert:

root@byte-sized:/usr/jails # service jail status test
 JID             IP Address      Hostname                      Path
 test            192.168.178.85  test.byte-sized               /usr/jails/test

Hervorragend! Die Jail ist korrekt installiert und konfiguriert!

Um in die Jail hineinzugelangen ist folgender Befehle nötig:

root@byte-sized:/usr/jails # jexec test
root@test: #

Wir sehen hier also, dass wir jetzt als root in unserer jail namens test angemeldet sind. Jetzt sind wir in der Lage Dienste in der Jail, wie gewohnt zu installieren, bloß diesmal innerhalb einer Jail statt auf dem Host-System direkt. Aber vor dem „rumspielen“ möchte ich noch erst ein paar weitere wichtige Kommandos zum Arbeiten mit Jails zeigen.

Um die Jail wieder zu verlassen ist lediglich ein exit einzutippen (man beachte den Wechsel des Hostnames):

root@test:/ # exit
root@byte-sized:

Ich beende hier für das Tutorial allerdings nicht meine Jail. Mir ist an der Stelle noch wichtig zu zeigen, wie Jails im Allgemeinen zu updaten sind. Eine Jail sollte grundsätzlich immer von außerhalb, also vom Host-System, nicht innerhalb der Jail selbst geupdated werden.

freebsd-update -b /usr/jails/test fetch
freebsd-update -b /usr/jails/test install

Für das Upgraden von Releases ist erst – ganz wichtig – das Host-System entsprechend zu upgraden (Link). Danach kann die Jail auf folgendem Wege ebenfalls dem Upgrade unterzogen werden:

freebsd-update -b /usr/jails/test --currently-running 13.0-RELEASE -r 13.1-RELEASE upgrade

freebsd-update -b /usr/jails/test install
service jail restart test
freebsd-update -b /usr/jails/test install

Infolgedessen sollten auch die Pakete danach geupgraded werden:

pkg -j test upgrade -f
service jail restart test

Möchtest du eine Jail löschen, stoppe erst den Service und fahre dann mit rm -rf und dem ensprechenden Pfad fort:

service jail stop test
rm -rf /usr/jails/test

Abschluss

Das Thema Jails ist natürlich noch viel umfangreicher, aber ich denke für einen Start im Umgang mit Jails ist das absolut ausreichend. Ich hoffe, es hat Spaß gemacht und jeder konnte etwas für sich mitnehmen.

Show comments

Join the discussion

0 replies to “Jails unter FreeBSD 13”

  1. […] Kompatibilitätsmodus als Jail – darüber lässt sich streiten. Ein kurzen Einstieg zum Thema Jails habe ich vor nicht all zu langer Zeit auf diesem Blog veröffentlicht. Doch heute soll es um etwas […]

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert