1.45. Ezjail
Dieser Artikel beschreibt, wie man sehr leicht und schnell Jails mit sysutils/ezjail erstellen kann.
1.45.1. Einleitung
Der Vorteil von ezjail ist die äußerst einfache Erstellung und das Updaten der Jails. Außerdem sind die frisch erstellten Jails gerade mal ~1.5 MB groß, da alle Verzeichnisse nur aus einer Basis-Jail verlinkt werden.
Nach der Installation mit portinstall
, pkg_add –r
oder einer
anderen Installationmethode der Wahl und einem rehash
, stehen
ezjail-admin
, ezjail.sh
und die manpages zur Verfügung.
1.45.2. Basisjail generieren
Mit
# ezjail-admin update -bp
wird erst einmal die Basis-Jail erstellt. (Dies kann je nach
Maschinenleistung ein wenig dauern (~1-3h), da als erstes make world
aufgerufen wird – wer sein Hostsystem schon upgedated hat, kann das mit
der Option –i statt -b übergehen und den Vorgang deutlich
beschleunigen).
1.45.3. Jails erstellen
Es gibt mehrere Möglichkeiten seine Jails zu erstellen. Die üblichere und einfachere ist es für jedes Jail eine eigene, extern zugreifbare, IP zu verwenden. Die zweite Methode vergibt den Jails „nicht route-bare Adressen“ und leitet nur bestimmte Ports an die Jails weiter.
1.45.3.1. Routebare IPs
Nachdem die Basisjail generiert wurde, lassen sich mit
# ezjail-admin create <Jailname> <JailIP>
die Jails erstellen z.B.:
# ezjail-admin create web1 192.168.2.101
# ezjail-admin create web2 192.168.2.102
Die IPs sollten schon vorher den Interface(s) zugewiesen werden. Die Netzwerkkarte fxp0 ist hier als Beispiel gewählt. Mit der Eingabe von
# ifconfig
läßt sich die benutzte Netzwerkkarte ermitteln (z.B. xl0, rl0, sk0 und Andere):
# ifconfig fxp0 alias 192.168.2.101 netmask 255.255.255.255
# ifconfig fxp0 alias 192.168.2.102 netmask 255.255.255.255
Um beim späteren Hochfahren des Systems die IPs verfügbar zu haben,
erfolgt in der /etc/rc.conf
noch der folgende Eintrag:
ifconfig_fxp0_alias0="inet 192.168.2.101 netmask 255.255.255.255"
ifconfig_fxp0_alias1="inet 192.168.2.102 netmask 255.255.255.255"
Nach dem Kopieren der Dateien (ezjail-admin create …) wird man netterweise gewarnt, wenn irgendwelche Dienste laufen, die sich an alle IPs des Systems binden, wie z.B. bind oder sendmail. Mehr dazu auch in ASGs Jail-howto unter „Problematische Dienste“.
1.45.3.2. nur interne IPs
Bei dieser Methode werden IPs aus dem lokalen 127.0.0.1/8 Netz verwendet.
Auch hier werden es die Jails mittels:
# ezjail-admin create web1 127.0.0.10
erstellt.
Statt fxp0 nimmt man hier lo0:
# ifconfig lo0 alias 127.0.0.10 netmask 255.255.255.255
und trägt auch das Alias auf dem Loopback-Interface in die /etc/rc.conf ein:
ifconfig_lo0_alias0="inet 127.0.0.10 netmask 255.255.255.255"
Anders als bei der ersten Methode müssen noch die Ports per pf an die entsprechenden Jails weiter geleitet werden. In der pf.conf sind dafür folgende Zeilen nötig:
nat on $ext_if proto {tcp udp icmp} from lo0 to any -> ($ext_if)
Hier wird dafür gesorgt, dass wir in den Jails Zugang zu externen Netzwerken haben.
rdr on $ext_if proto tcp from any to any port 80 -> 127.0.0.10
pass in on $ext_if inet proto tcp from any to 127.0.0.10 port 80
Für andere Dienste muss der Port angepasst werden.
1.45.4. Jails starten
Mit
# /usr/local/etc/rc.d/ezjail.sh start
oder
# ezjail-admin start
lassen sich die so erstellten Jails nun Starten, Stoppen und Neustarten.
Als Argument nimmt ezjail.sh
den Namen entweder einer oder mehrerer
Jails. Wenn keine Argumente angegeben werden, sind alle Jails betroffen.
Um die Jails automatisch bei Systemstart zu Starten genügt der Eintrag:
ezjail_enable="YES“
in der /etc/rc.conf
des Hostsystems.
1.45.5. Jails updaten
Mit
# ezjail-admin update -i
lassen sich dann nach dem nächsten Update des Hostsystems alle Jails bequem auf einmal aktualisieren.
1.45.6. Jails löschen
Mit
# ezjail-admin delete web2
wird die in unserem Beispiel die 2.Jail gelöscht. Die Dateien bleiben allerdings nach wie vor auf der Platte, sodaß mit ein ezjail-admin create mit der Option -x
# ezjail-admin create -x web2 192.168.2.102
die Jail wieder hergestellt.
Mit der Option -w
# ezjail-admin delete -w web2
wird die Jail web2 endgültig gelöscht.
1.45.7. Weiterführende Themen
1.45.7.1. Anwendungsbeispiel - Apache
Um nun zum Beispiel einen Webserver in einer Jail zu starten, sollten noch einige Dateien der Jail angepasst werden:
in der /usr/jails/web1/etc/resolv.conf
nameserver <IP-des-DNS-Servers>
und damit der apache automatisch startet in
/usr/jails/web1/etc/rc.conf
apache_enable=“YES“
danach sollte sich vom Hostsystem mit
# jexec JID pkg_add –r apache
der Webserver installieren lassen. Die JID lässst sich mit jls
herausfinden.
Beim nächsten Neustart läuft der apache nun in einer Jail.
1.45.7.2. Portstree des Basejails aktualisieren
# ezjail-admin update -P
1.45.7.3. Portstree in einer Jail
Bei der oben genannten Beschreibung zur Einrichtung einer oder mehrerer Jails wird kein Portstree in den Jails angelegt. Es gibt zwei Möglichkeiten die Ports auch in die Jails zu bringen:
1.45.7.3.1. 1. Eine Kopie des vorhandenen Portstrees wird in die Jails kopiert
Bei der Anlage der Jail wird die Option -P angegeben:
# ezjail-admin update -P web1 192.168.2.101
Hiermit wird eine 1:1 Kopie des Portstrees der Hostsystems in dem Jail angelegt. Diese Variante benötigt naturgemäß mehr Speicher auf der Festplatte als die 2. Lösung.
1.45.7.3.2. 2. Mittels nullfs
kann auf den original-Portstree zugegriffen werden
In der Datei /etc/fstab.<Name der Jail> des Hostsystems muß folgender Eintrag hinzugefügt werden:
/usr/ports /usr/jails/<Name der Jail>/usr/ports nullfs ro 0 0
In unserem Beispiel würde in der Datei /etc/fstab.web1 dann folgendes stehen:
/usr/jails/basejail /usr/jails/web1/basejail nullfs ro 0 0
/usr/ports /usr/jails/mail/web1/ports nullfs ro 0 0
In der web1-Jail muß nun im Pfad /usr ein leerer Ordner names
ports vorhanden sein. Ist dies nicht der Fall muß er per Hand
angelegt werden. Es kann auch sein, daß ein symbolischer Link auf
basejail/usr/ports vorhanden ist. Dieser muß mittels rm ports
gelöscht werden. Dann ist ebenfalls ein Ordner ports anzulegen.
Sollte die web1-Jail laufen, muß sie nun gestoppt und erneut gestartet werden:
# /usr/local/etc/rc.d/ezjail.sh restart
Nun sollte noch überprüft werden, ob in der web1-Jail im
/etc/make.conf die Angabe WRKDIRPREFIX gesetzt ist. Dies sollte
normalerweise automatisch durch den ezjail-admin
passiert sein. Dies
ist notwendig, weil der Ordner oben als read only
gemountet wurde
und somit kein Schreibzugriff erlaubt ist.
1.45.8. Problembeseitigung
1.45.8.1. mount_nullfs: Operation not supported by device
Problem: Das Kernelmodul nullfs fehlt bzw. wurde nicht geladen. Beim generischen Kernel sollte diese Meldung nicht auftreten, da dieses Modul im Kernel standardgemäß eingebunden ist. Dies kann passieren, wenn man einen „recht schlanken“ Custom-Kernel benutzt.
Lösung: In /etc/make.conf unter MODULES_OVERRIDE= nullfs eintragen und erneut den Kernel bauen.
1.45.9. Siehe auch
1.45.10. Quellen
Dieser Artikel basiert auf Mangas Forumseintrag in http://www.bsdforen.de.
Zuletzt geändert: 2023-07-22