Dies ist eine alte Version des Dokuments!
Inhaltsverzeichnis
Jail
https://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/jails-ezjail.html
Hier wird beispielhaft eine Jail speziell für einen Minecraft-Server eingerichtet (deshalb heißt sie nicht "jail01" sondern "minecraft").
hilfreiche Links:
Beschränkungen
http://www.admin-magazin.de/Das-Heft/2013/01/Wie-man-Jails-in-FreeBSD-konfiguriert-und-benutzt
Innerhalb einer Jail gibt es aufgrund der Implementierung wichtige Einschränkungen. Remote-Procedure-Calls (RPC) funktionieren im Jail-Betrieb aus Sicherheitsgründen nicht mehr. Daher gibt es keine Möglichkeit, NFS innerhalb einer Jail zu nutzen. Daemon-Prozesse auf dem Host müssen sehr sorgfältig konfiguriert sein, damit es nicht zu Adresskonflikten zwischen Jail und Host kommt. Das Laden oder Entladen von Kernelmodulen ist innerhalb einer Jail genauso unterbunden wie das Erstellen von Device-Nodes. Das Mounten und Unmounten von Dateisystemen ist nicht möglich. Das Modifizieren der Netzwerkkonfiguration, der Netzwerkadressen oder auch der Routing-Tabellen ist verboten. Der Zugriff auf sogenannte Raw-Sockets des Hostsystems ist nicht mehr möglich, aber innerhalb der Jail besteht die Möglichkeit, auf diesen Typ von Sockets zuzugreifen. Ebenso ist es nicht gestattet, Semaphoren des Hostsystems anzusprechen.
Aus den meisten dieser Einschränkungen resultiert bei genauer Betrachtung ein Sicherheitsgewinn im Vergleich zu einer Chroot-Umgebung.
das übliche
alle laufenden Jails anzeigen:
# jls
JID IP Address Hostname Path
1 192.168.0.13 minecraft /usr/jails/minecraft
2 192.168.0.14 jail02 /usr/jails/jail02
3 192.168.0.15 jail03 /usr/jails/jail03
nur die Namen der laufenden Jails anzeigen
# jls name minecraft jail02 jail03
in die Jail "minecraft" einloggen
# ezjail-admin console minecraft
die Jail "minecraft" anhalten
# ezjail-admin stop minecraft Stopping jails: minecraft.
alle laufenden Jails anhalten
# ezjail-admin stop ezjailStopping jails: jail03 jail02 minecraft.
liste alle existierenden Jails auf
# ls -lha /usr/jails/ total 85 drwxr-xr-x 10 root wheel 10B 22 Aug. 2016 . drwxr-xr-x 17 root wheel 17B 15 Juni 2017 .. drwxr-xr-x 9 root wheel 9B 23 Feb. 2015 basejail drwxr-xr-x 12 root wheel 24B 25 Jan. 2016 minecraft drwxr-xr-x 3 root wheel 24B 23 Feb. 2015 jail02 drwxr-xr-x 12 root wheel 24B 8 Feb. 2016 jail03
alle Jails wieder starten
# ezjail-admin start ezjailStarting jails: minecraft jail02 jail03.
Jail-Paket installieren
Paket installieren:
> pkg install sysutils/ezjail
neuerdings ist jetzt auch noch das hier nötig - hiermit wird die "Jail-Welt" kompiliert → es wird das Verzeichnis /usr/jails/ angelegt (das wurde früher bereits bei der Installation des Paketes gemacht):
> ezjail-admin update -b ... /usr/jails/basejail/usr/lib32/libprivateldns.so 146598 blocks Note: a non-standard /etc/make.conf was copied to the template jail in order to get the ports collection running inside jails. > ls -lha /usr/jails/ total 27 drwxr-xr-x 5 root wheel 5B 27 Mai 01:35 . drwxr-xr-x 19 root wheel 19B 26 Mai 19:50 .. drwxr-xr-x 9 root wheel 9B 27 Mai 01:35 basejail drwxr-xr-x 3 root wheel 3B 27 Mai 01:35 flavours drwxr-xr-x 13 root wheel 23B 27 Mai 01:35 newjail
> vi /etc/rc.conf
... ifconfig_sk0_alias0="inet alias 192.168.2.100/32" ... syslogd_flags="-ss" ezjail_enable="YES" #ifconfig_sk0_alias0="10.0.0.1/32" #pf_enable="YES"
Ports-Tree für die Jail's kopieren:
> mkdir /usr/jails/basejail/usr/ports > cp -a /usr/ports/ /usr/jails/basejail/usr/ports/
Jail bauen
die IP für die neue Jail hoch fahren:
> ifconfig sk0 alias 192.168.2.100/32
eine Jail bauen:
> ezjail-admin create minecraft 192.168.2.100
die Jail starten:
> service ezjail start minecraft
oder
> ezjail-admin console -f minecraft
jls - Jails anzeigen
jexec - Verbindung mit einer laufenden Jail / Starten eines Befehls / Programme Ausfuehren
nachsehen, ob die Jail läuft:
> jls
JID IP Address Hostname Path
2 192.168.2.100 minecraft /usr/jails/minecraft
> ezjail-admin list
STA JID IP Hostname Root Directory
--- ---- --------------- ------------------------------ ------------------------
DR 2 192.168.2.100 minecraft /usr/jails/minecraft
sehen ob sie Netzwerk-Ports geöffnet hat:
> netstat -4anp tcp | fgrep 192.168.2.100
in Jail einloggen
in die Jail "minecraft" einloggen:
> ezjail-admin console minecraft
Jail konfigurieren
in die Jail einloggen:
> ezjail-admin console minecraft
Zeitzone einstellen:
> rm -f /etc/localtime; ln -s /usr/share/zoneinfo/MET /etc/localtime
in der Jail muss als erstes das GateWay eingetragen werden, sonst kann man keine Pakete aus dem Internet installieren (es ist auch eine gute Idee SSH zu aktivieren):
> vi /etc/rc.conf hostname="minecraft.lan" # FQDN !!! defaultrouter="192.168.2.1" sshd_enable="YES"
ohne NameServer (DNS) geht nichts:
> vi /etc/resolv.conf search lan.de nameserver 192.168.2.1
aus der Jail wieder ausloggen:
> exit
den Hostnamen anpassen, hier fehlt ggf. die Domain:
> vi /usr/local/etc/ezjail/minecraft ... export jail_minecraft_hostname="minecraft" ...
die Jail neu starten:
> ezjail-admin stop minecraft > ezjail-admin start minecraft
alle Jails neu starten:
> service ezjail stop > service ezjail start
in die Jail einloggen:
> ezjail-admin console minecraft
… und die BASH installieren:
> pkg install -y shells/bash-static > bash ; exit
make-Optionen ⇒ kein X11 und optimieren für AMD K8 (siehe man make.conf und /usr/share/examples/etc/make.conf):
> vi /etc/make.conf
- /etc/make.conf
WITHOUT_X11=yes NO_X=yes OPTIONS_UNSET=X11 CPUTYPE=k8 DOC_LANG=de_DE.UTF-8
… diese Paket braucht man fast immer:
> pkg install misc/mc sysutils/screen misc/gnu-watch archivers/unzip ftp/wget converters/base64 net/bmon net-mgmt/iftop editors/vim
für die, die es wohl nie lernen werden…
> pkg install editors/nano
Web-Server installieren:
> pkg install www/apache24
PHP installieren:
> pkg install lang/php56 www/mod_php56 ftp/php56-curl textproc/php56-xml converters/php56-mbstring devel/php56-json textproc/php56-simplexml textproc/php56-dom
Java installieren:
> pkg install java/openjdk8-jre
VNC-Server installieren:
> pkg install net/tightvnc
Anzahl der CPU-Kerne
- /usr/local/etc/ezjail/minecraft
... export jail_minecraft_cpuset="1" ...
VNC-Server
> pkg install net/vnc x11/xorg x11-wm/icewm x11/xterm > vi ~/.vnc/xstartup #!/bin/sh xrdb $HOME/.Xresources & /usr/local/bin/icewm-session & /usr/local/bin/xterm > chmod 0755 ~/.vnc/xstartup > vncserver -depth 24 -geometry 640x480 -nolisten tcp :1
mehrere Jail's
eine bestimmte Jail starten:
> service ezjail start minecraft
eine bestimmte Jail stoppen:
> service ezjail stop minecraft
alle Jails aktualisieren (Update)
alle Jails auf die aktuelle Version das Host-Systems aktualisieren:
> ezjail-admin stop > rm -fr /usr/jails/basejail/usr/src/* > cp -a /usr/src/ /usr/jails/basejail/usr/src/ > ezjail-admin update -p -u
so kann man in allen Jails gleichzeitig die Ports-Trees aktualisieren ohne die Jails zu stoppen:
> ezjail-admin update -P
Fernzugriff
Jail löschen
Jail "minecraft" anhalten:
> ezjail-admin stop minecraft
Jail "minecraft" löschen
> ezjail-admin delete -f minecraft > rm -R /usr/jails/minecraft > rm /usr/local/etc/ezjail/minecraft
oder so werden die Verzeichnisse auch gelöscht:
> ezjail-admin delete -w minecraft
zum Schluß kann man dann die IP der Jail auch aus der Konfigurationsdatei und der NIC entfernen:
> vi /etc/rc.conf > ifconfig sk0 inet 192.168.2.100 -alias
