Benutzer-Werkzeuge

Webseiten-Werkzeuge


freebsd:jail

Dies ist eine alte Version des Dokuments!


Jail

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

gewöhnlich geht das per SSH (Putty):

> ssh fritz@192.168.2.100

es geht aber auch grafisch mit VNC

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
/home/http/wiki/data/attic/freebsd/jail.1643394671.txt · Zuletzt geändert: von manfred