freebsd:jail
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
| freebsd:jail [2023-12-12 16:35:58] – [Quick&Dirty] manfred | freebsd:jail [2025-08-10 01:30:45] (aktuell) – manfred | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| + | ====== Jail ====== | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | Hier wird beispielhaft eine Jail speziell für einen [[Minecraft]]-Server eingerichtet (deshalb heißt sie nicht " | ||
| + | |||
| + | hilfreiche Links: | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[http:// | ||
| + | * [[http:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[http:// | ||
| + | |||
| + | |||
| + | ===== Quick& | ||
| + | |||
| + | * [[https:// | ||
| + | * **[[https:// | ||
| + | |||
| + | so kann das Skript einfach genutzt werden: | ||
| + | > jail-classic_quick_and_dirty.sh testjail 10.10.10.10 | ||
| + | |||
| + | <file bash jail-classic_quick_and_dirty.sh> | ||
| + | #!/bin/sh | ||
| + | |||
| + | ################################################################################ | ||
| + | # https:// | ||
| + | # | ||
| + | # Die meisten Netzwerkdienste laufen problemlos in einer Jail. | ||
| + | # Ein paar wenige Netzwerkdienste, | ||
| + | # Aus Sicherheitsgründen werden Netzwerk-Sockets innerhalb der Jails | ||
| + | # deaktiviert, | ||
| + | # nicht funktionieren werden. | ||
| + | ################################################################################ | ||
| + | |||
| + | if [ x == " | ||
| + | echo "${0} [Jail-Name] [Jail-IP]" | ||
| + | echo "${0} testjail 192.168.10.10" | ||
| + | echo "${0} testjail 10.10.10.10" | ||
| + | exit 1 | ||
| + | fi | ||
| + | |||
| + | JAIL_NAME=" | ||
| + | JAIL_IP=" | ||
| + | echo " | ||
| + | JAIL_NAME: ${JAIL_NAME} | ||
| + | JAIL_IP: ${JAIL_IP} | ||
| + | " | ||
| + | |||
| + | JAIL_DIR="/ | ||
| + | |||
| + | JAIL_CMD=" | ||
| + | if [ x == " | ||
| + | echo "... ggf. muß ezjail vorher noch installiert werden:" | ||
| + | echo "> cd / | ||
| + | echo "> ezjail-admin update -b" | ||
| + | exit 1 | ||
| + | fi | ||
| + | |||
| + | JLS_NAME=" | ||
| + | if [ x != " | ||
| + | echo "Eine Jail mit diesem Namen läuft bereits." | ||
| + | echo "so kannst Du sie betreten:" | ||
| + | echo "> ezjail-admin console ${JAIL_NAME}" | ||
| + | exit 1 | ||
| + | fi | ||
| + | |||
| + | IFCONFIG_IP=" | ||
| + | if [ x != " | ||
| + | echo "Die IP existiert schon." | ||
| + | exit 1 | ||
| + | fi | ||
| + | |||
| + | HOST_BASIS_RELEASE=" | ||
| + | echo " | ||
| + | |||
| + | ### die neue Jail bauen | ||
| + | # " | ||
| + | # > echo ' | ||
| + | # > service netif cloneup | ||
| + | # Created clone interfaces: lo1. | ||
| + | # | ||
| + | # | ||
| + | # | ||
| + | NIC_ALIAS=" | ||
| + | ifconfig ${NIC_ALIAS} alias ${JAIL_IP}/ | ||
| + | ezjail-admin create ${JAIL_NAME} ${JAIL_IP} | ||
| + | # | ||
| + | cp / | ||
| + | ls -lha " | ||
| + | jls | ||
| + | |||
| + | ### die neue Jail starten | ||
| + | ezjail-admin start ${JAIL_NAME} | ||
| + | |||
| + | echo " | ||
| + | Um diese Jail nach dem nächsten reboot erneut | ||
| + | starten zu können, ist das folgende Kommando nötig. | ||
| + | Allerdings ist die Nummer von ' | ||
| + | entsprechend richtig zu setzen: | ||
| + | > echo ' | ||
| + | |||
| + | einloggen in die neue Jail: | ||
| + | > ezjail-admin console ${JAIL_NAME} | ||
| + | |||
| + | die neue Jail auf den neuesten Stand bringen: | ||
| + | > ezjail-admin update -b \" | ||
| + | |||
| + | die neue Jail wieder löschen: | ||
| + | > ezjail-admin stop ${JAIL_NAME} | ||
| + | ggf. von Hand eingerichtete Bind-Mounts entfernen... | ||
| + | > ezjail-admin delete -w ${JAIL_NAME} | ||
| + | > service netif restart | ||
| + | " | ||
| + | </ | ||
| + | |||
| + | Allerdings mit einer Einschränkung. | ||
| + | |||
| + | __Die Jail braucht eine IP und diese wird nicht automatisch bootfest konfiguriert!!!__ | ||
| + | Da es sich um eine " | ||
| + | |||
| + | Will man die Jail jedoch dauerhaft bzw. länger betreiben, dann kann man das mit einer Zeile in der ''/ | ||
| + | Dabei muß allerdings das Beispiel-Kommando entsprechend anpassen: | ||
| + | ifconfig_em0_alias0=" | ||
| + | |||
| + | Die Nummer von '' | ||
| + | |||
| + | |||
| + | ===== Allgemeines ===== | ||
| + | |||
| + | |||
| + | ==== Beschränkungen ==== | ||
| + | |||
| + | [[http:// | ||
| + | |||
| + | 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, | ||
| + | |||
| + | 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 | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | |||
| + | nur die Namen der laufenden Jails anzeigen | ||
| + | # jls name | ||
| + | minecraft | ||
| + | jail02 | ||
| + | jail03 | ||
| + | |||
| + | in die Jail " | ||
| + | # ezjail-admin console minecraft | ||
| + | |||
| + | die Jail " | ||
| + | # ezjail-admin stop minecraft | ||
| + | Stopping jails: minecraft. | ||
| + | |||
| + | alle laufenden Jails anhalten | ||
| + | # ezjail-admin stop | ||
| + | | ||
| + | |||
| + | liste alle existierenden Jails auf | ||
| + | # ls -lha /usr/jails/ | ||
| + | total 85 | ||
| + | drwxr-xr-x | ||
| + | drwxr-xr-x | ||
| + | drwxr-xr-x | ||
| + | drwxr-xr-x | ||
| + | drwxr-xr-x | ||
| + | drwxr-xr-x | ||
| + | |||
| + | alle Jails wieder starten | ||
| + | # ezjail-admin start | ||
| + | | ||
| + | |||
| + | |||
| + | ==== Jail-Paket installieren ==== | ||
| + | |||
| + | Paket installieren: | ||
| + | > pkg install sysutils/ | ||
| + | |||
| + | neuerdings ist jetzt auch noch das hier nötig - hiermit wird die " | ||
| + | > ezjail-admin update -b | ||
| + | ... | ||
| + | / | ||
| + | 146598 blocks | ||
| + | Note: a non-standard / | ||
| + | | ||
| + | > ls -lha /usr/jails/ | ||
| + | total 27 | ||
| + | drwxr-xr-x | ||
| + | drwxr-xr-x | ||
| + | drwxr-xr-x | ||
| + | drwxr-xr-x | ||
| + | drwxr-xr-x | ||
| + | |||
| + | > vi / | ||
| + | < | ||
| + | ... | ||
| + | ifconfig_sk0_alias0=" | ||
| + | ... | ||
| + | syslogd_flags=" | ||
| + | ezjail_enable=" | ||
| + | # | ||
| + | # | ||
| + | </ | ||
| + | |||
| + | Ports-Tree für die Jail's kopieren: | ||
| + | > mkdir / | ||
| + | > cp -a /usr/ports/ / | ||
| + | |||
| + | |||
| + | ==== Jail bauen ==== | ||
| + | |||
| + | die IP für die neue Jail hoch fahren: | ||
| + | > ifconfig sk0 alias 192.168.2.100/ | ||
| + | |||
| + | 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 | ||
| + | | ||
| + | | ||
| + | | ||
| + | > ezjail-admin list | ||
| + | STA JID IP Hostname | ||
| + | --- ---- --------------- ------------------------------ ------------------------ | ||
| + | DR 2 192.168.2.100 | ||
| + | |||
| + | sehen ob sie Netzwerk-Ports geöffnet hat: | ||
| + | > netstat -4anp tcp | fgrep 192.168.2.100 | ||
| + | |||
| + | |||
| + | ==== in Jail einloggen ==== | ||
| + | |||
| + | in die Jail " | ||
| + | > ezjail-admin console minecraft | ||
| + | |||
| + | |||
| + | ==== Jail konfigurieren ==== | ||
| + | |||
| + | in die Jail einloggen: | ||
| + | > ezjail-admin console minecraft | ||
| + | |||
| + | Zeitzone einstellen: | ||
| + | > rm -f / | ||
| + | |||
| + | 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 / | ||
| + | hostname=" | ||
| + | defaultrouter=" | ||
| + | sshd_enable=" | ||
| + | |||
| + | ohne NameServer (DNS) geht nichts: | ||
| + | > vi / | ||
| + | search lan.de | ||
| + | nameserver 192.168.2.1 | ||
| + | |||
| + | aus der Jail wieder ausloggen: | ||
| + | > exit | ||
| + | |||
| + | den Hostnamen anpassen, hier fehlt ggf. die Domain: | ||
| + | > vi / | ||
| + | ... | ||
| + | export jail_minecraft_hostname=" | ||
| + | ... | ||
| + | |||
| + | 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 ; exit | ||
| + | |||
| + | '' | ||
| + | > vi / | ||
| + | <file bash / | ||
| + | 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/ | ||
| + | |||
| + | für die, die es wohl nie lernen werden... | ||
| + | > pkg install editors/ | ||
| + | |||
| + | Web-Server installieren: | ||
| + | > pkg install www/ | ||
| + | |||
| + | PHP installieren: | ||
| + | > pkg install lang/php56 www/ | ||
| + | |||
| + | Java installieren: | ||
| + | > pkg install java/ | ||
| + | |||
| + | VNC-Server installieren: | ||
| + | > pkg install | ||
| + | |||
| + | |||
| + | == Anzahl der CPU-Kerne == | ||
| + | |||
| + | <file c / | ||
| + | ... | ||
| + | export jail_minecraft_cpuset=" | ||
| + | ... | ||
| + | </ | ||
| + | |||
| + | |||
| + | == VNC-Server == | ||
| + | |||
| + | > pkg install net/vnc x11/xorg x11-wm/ | ||
| + | | ||
| + | > vi ~/ | ||
| + | #!/bin/sh | ||
| + | xrdb $HOME/ | ||
| + | / | ||
| + | / | ||
| + | | ||
| + | > chmod 0755 ~/ | ||
| + | > 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 / | ||
| + | > cp -a /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 | ||
| + | |||
| + | die Jail-Umgebung neu kompilieren: | ||
| + | > ezjail-admin update -b | ||
| + | |||
| + | |||
| + | ==== 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 " | ||
| + | > ezjail-admin stop minecraft | ||
| + | |||
| + | Jail " | ||
| + | > ezjail-admin delete -f minecraft | ||
| + | > rm -R / | ||
| + | > rm / | ||
| + | |||
| + | 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 / | ||
| + | > ifconfig sk0 inet 192.168.2.100 -alias | ||
| + | |||
| + | |||
| + | ==== Beispiel: Test-Jail anlegen ==== | ||
| + | |||
| + | <code bash> | ||
| + | # Das Jail-Paket installieren: | ||
| + | # > cd / | ||
| + | # > make clean | ||
| + | # > make config-recursive | ||
| + | # > make | ||
| + | # > make deinstall | ||
| + | # > make install | ||
| + | # > pkg info -ao | grep -Fi jail | ||
| + | # > make clean | ||
| + | # | ||
| + | # Die Jail-Umgebung kompilieren: | ||
| + | # > ezjail-admin update -b | ||
| + | # | ||
| + | # Den aktuell verwendeten Ports-Tree in die Jail-Umgebung kopieren: | ||
| + | # > mkdir / | ||
| + | # > cp -a /usr/ports/ / | ||
| + | # | ||
| + | # Eine Jail einrichten: | ||
| + | # > ifconfig em0 alias 192.168.1.2/ | ||
| + | # > ezjail-admin create testjail 192.168.1.2 | ||
| + | # | ||
| + | # Ein paar Einstellungen in der Jail vornehmen: | ||
| + | # > cat / | ||
| + | # > vi / | ||
| + | # | ||
| + | # | ||
| + | # | ||
| + | # > vi / | ||
| + | # | ||
| + | # | ||
| + | # > tar cf - /home/bin /home/sbin /home/etc | tar xf - -C / | ||
| + | # > chown -R 0:0 / | ||
| + | # > ls -lha / | ||
| + | # | ||
| + | # Jail starten | ||
| + | # > service ezjail start testjail | ||
| + | # > jls | ||
| + | # > netstat -4anp tcp | fgrep 192.168.1.2 | ||
| + | # | ||
| + | # In die Jail einloggen und einige Kommandos ausführen: | ||
| + | # > ezjail-admin console testjail | ||
| + | # > rm -f / | ||
| + | # > ln -s / | ||
| + | # > exit | ||
| + | |||
| + | # > ezjail-admin console testjail | ||
| + | # > cd / | ||
| + | # > make clean | ||
| + | # > make | ||
| + | # > make install | ||
| + | # > make clean | ||
| + | # > cd / | ||
| + | # > make clean | ||
| + | # > make | ||
| + | # > make install | ||
| + | # > make clean | ||
| + | # > screen -mdS Pakete / | ||
| + | # > exit | ||
| + | # | ||
| + | # Jail wieder runter fahren: | ||
| + | # > service ezjail stop testjail | ||
| + | </ | ||
| + | |||
