Erstellen einer Jail über die Kommandozeile

Syntax

cbsd jcreate key=value [key=value ...]

Minimaler Aufruf:

cbsd jcreate jname=myjail

Erstellt die Jail myjail mit automatischen Parametern: IP via DHCP, Hostname myjail.my.domain, FreeBSD-Version wird vom Host geerbt. Die Jail wird erstellt und konfiguriert, aber nicht gestartet.

Um sie direkt nach dem Erstellen zu starten, fügt man runasap=1 hinzu:

cbsd jcreate jname=myjail runasap=1

Erforderliche Parameter

Der einzige streng erforderliche Parameter ist:

Parameter Beschreibung
jname Eindeutiger Name der Jail. Darf keine Leerzeichen oder Sonderzeichen enthalten. Muss unter allen bestehenden Jails auf dem Host eindeutig sein.

Alle anderen Parameter besitzen Standardwerte. Der Parameter erhält seinen Wert in absteigender Prioritätsreihenfolge:

  1. Expliziter Kommandozeilenargument: cbsd jcreate ip4_addr="10.0.0.5"
  2. Benutzerdefinierter Overlay: ~cbsd/etc/jail-freebsd-default.conf (falls vorhanden)
  3. Profil jprofile=N, falls angegeben (Datei ~cbsd/etc/defaults/jail-freebsd-N.conf)
  4. Systemstandard: ~cbsd/etc/defaults/jail-freebsd-default.conf

Format aller .conf-Dateien: key="value" (ein Paar pro Zeile).

Parametergruppen

Die vollständige Liste der Parameter ist über cbsd jcreate --args verfügbar. Die Parameter sind nach Zweck gruppiert.

Basisparameter

Parameter Standard Beschreibung
jname (erforderlich) Name der Jail
host_hostname ${jname}.${default_domain} FQDN der Jail. Standardmäßig my.domain
ver native Release-Version: native (vom Host erben), oder eine spezifische, z.B. 14.2
arch native Architektur: native (vom Host erben), x86_64, aarch64, riscv64
path ${jaildir}/${jname} Root-Verzeichnis der Jail
astart 1 Autostart der Jail beim Booten des Hosts (0 — deaktivieren)
runasap 0
baserw 0 Schreibbare Basis-System innerhalb der Jail (1 — erlaubt Schreiben in /usr/bin usw.)
basename `` Name einer vorhandenen Basis-Release für Klonen
tags `` Benutzerdefinierte Tags, als String
quiet 0 Stiller Modus, Unterdrückung der Ausgabe

Netzwerkparameter

Parameter Standardwert Beschreibung
ip4_addr DHCP IPv4-Adresse: spezifisch (10.0.0.5), DHCP, oder leer (empty)
interface auto Netzwerkschnittstelle des Hosts: auto (automatische Erkennung), vnet0, em0, usw.
vnet 0 Isolierte Netzwerkumgebung (1 — VNET aktivieren)
interface2 Zweite Netzwerkschnittstelle Zweite IPv4-Adresse Bei aktiviertem VNET (vnet=1) werden erweiterte VNET-Parameter verwendet (ci_*).

Berechtigungen (allow_*)

Die Parameter entsprechen den Eigenschaften von jail(8). Standardmäßig sind die meisten Berechtigungen deaktiviert (0). Ausnahmen bilden einige grundlegende Berechtigungen: |----------|--------|----------| | allow_mount | 1 | Mount von Dateisystemen innerhalb der Jail | | allow_nullfs | 1 | NULLFS-Mount | | allow_fdescfs | 1 | Mount von fdescfs | | allow_devfs | 1 | Mount von devfs | | allow_dying | 1 | Jail kann gestoppt werden | | allow_procfs | 1 | Zugriff auf procfs | | allow_tmpfs | 1 | Mount von tmpfs | | allow_reserved_ports | 1 | Bind an Ports < 1024 erlaubt (Privileged Ports) 允许绑定到特权端口(< 1024)的权限。在 FreeBSD 中,这通常意味着允许进程绑定到这些端口,即使它们不是以 root 身份运行。这对于需要监听低端口号的服务非常有用,比如 HTTP (80) 或 HTTPS (443)。

解释:

  • 特权端口: 在大多数 Unix-like 系统中,包括 FreeBSD,端口号小于 1024 的被称为“特权端口”。默认情况下,只有具有超级用户权限(root)的进程才能绑定到这些端口。这是为了防止普通用户启动服务并监听这些常用端口,从而避免潜在的安全风险或冲突。

  • Jail: FreeBSD Jails 是一种操作系统级虚拟化技术,它允许在一个主机系统上运行多个隔离的环境(称为 jails)。每个 jail 都有自己的网络栈、文件系统视图和进程空间。

  • 问题: 默认情况下,jail 中的进程没有超级用户权限。因此,如果需要在 jail | mount_linprocfs | 0 | Linux procfs mounten | | mount_linsysfs | 0 | Linux sysfs mounten | | mount_fstab | 0 | Mount aus fstab | | mount_ports | 1 | Ports-Tree mounten | | mount_src | 0 | Source-Tree mounten | | mount_obj | 0 | Obj-Tree mounten | | mount_kernel | 0 | Kernel mounten

Lifecycle-Skripte (exec_*)

Parameter Standardwert Beschreibung
exec_start /bin/sh /etc/rc Startbefehl innerhalb der Jail
exec_stop /bin/sh /etc/rc.shutdown Stoppbefehl
exec_timeout 180 Rückgabezeit für Start/Stop in Sekunden
Note: The table formatting above got slightly messed up due to the complexity of the original markdown. Let me correct it properly.

Here is the corrected version:

Lifecycle-Skripte (exec_*)

Parameter mit dem Präfix exec_master_ werden auf dem Host-System ausgeführt. Ohne Präfix – innerhalb der Jail. | sysvmsg | new | Nachrichtenwarteschlangen: new, host, 0 |

Pakete und cloud-init

Parameter Standard Beschreibung
pkglist `` Liste der zu installierenden Pakete (Dateipfade, durch Komma getrennt)
delpkglist 1 pkglist-Datei nach der Installation löschen
pkg_bootstrap 1 pkg in der Jail initialisieren
ci_user_pubkey `` SSH-Schlüssel für cloud-init
ci_ip4_addr DHCP IP-Adresse für cloud-init
ci_gw4 0 Gateway für cloud-init

Systemparameter der Jail

Parameter Standard Beschreibung
devfs_ruleset 4 devfs-Ruleset für die Jail verwenden. Die Regeln definieren, welche Geräte innerhalb der Jail verfügbar sind. Dies ist wichtig für die Sicherheit und Funktionalität. Beispiel: Ruleset 4 ermöglicht den Zugriff auf bestimmte Geräte wie /dev/null, /dev/zero, etc., während andere blockiert werden. Weitere Informationen finden Sie in der Manpage von devfs(8).
fstablocal `` Zusätzliche fstab
zfs_snapsrc `` ZFS-Quellen für Snapshots
zfs_encryption `` ZFS-Verschlüsselungsschlüssel
environment `` Umgebungsvariablen für exec_*
environment_global `` Globale Umgebungsvariablen
mount_fstab 0 fstab-Mounts aktivieren
mnt_start 0 Skript zum Mounten des data-Verzeichnisses beim Starten der Jail. Die Variable wird als Befehl ausgeführt, um das Datenverzeichnis zu mounten. Beispiel: /usr/local/bin/mount.sh. Wenn die Variable leer ist, wird kein Mount durchgeführt. Wenn die Variable auf 1 gesetzt ist, wird das Datenverzeichnis automatisch gemountet. Wenn die Variable auf 0 gesetzt ist, wird das Datenverzeichnis nicht gemountet. Wenn die Variable auf einen Pfad zu einem Skript gesetzt ist, wird dieses Skript ausgeführt, um das Datenverzeichnis zu mounten. Das Skript sollte den Exit-Code 0 zurückgeben, wenn der Mount erfolgreich war, und einen anderen Exit-Code bei einem Fehler. Das Skript kann auch verwendet werden, um andere Aktionen auszuführen, wie z.B. das Erstellen von Verzeichnissen oder das Setzen von Berechtigungen. Das Skript sollte in der Lage sein, sowohl beim Starten als auch beim Stoppen der Jail ausgeführt zu werden. Beim Stoppen der Jail sollte das Skript das Datenverzeichnis unmounten und alle anderen notwendigen Aufräumarbeiten durchführen. Das Skript sollte auch in der Lage sein, mit verschiedenen Dateisystemtypen umzugehen und verschiedene Optionen für den Mount-Befehl zu verwenden. Das Skript sollte auch in der Lage sein, Fehler zu behandeln und angemessene Fehlermeldungen auszugeben. Das Skript sollte auch in der Lage sein, mit verschiedenen Konfigurationsoptionen umzugehen und diese entsprechend zu verarbeiten. Das Skript sollte auch in der Lage sein, mit verschiedenen Umgebungsvariablen umzugehen und diese entsprechend zu verwenden. Das Skript sollte auch in der Lage sein, mit verschiedenen Systemkonfigurationen umzugehen und diese entsprechend zu berücksichtigen. Das Skript sollte auch in der Lage sein, mit verschiedenen Hardwarekonfigurationen umzugehen und diese entsprechend zu berücksichtigen. Das Skript sollte auch in der Lage sein, mit verschiedenen Softwarekonfigurationen umzugehen und diese entsprechend zu berücksichtigen. Das Skript sollte auch in der Lage sein, mit verschiedenen Netzwerk-Konfigurationen umzugehen und diese entsprechend zu berücksichtigen. Das Skript sollte auch in der Lage sein, mit verschiedenen Sicherheitskonfigurationen umzugehen und diese entsprechend zu berücksichtigen. Das Skript sollte auch in der Lage sein, mit verschiedenen Performance-Konfigurationen umzugehen und diese entsprechend zu berücksichtigen. Das Skript sollte auch in der Lage sein
rocky_9 jail-freebsd-rocky_9.conf Rocky Linux in Jail
devuan_daedalus jail-freebsd-devuan_daedalus.conf Devuan in Jail

Der Benutzer kann ein eigenes Profil erstellen, indem er die Datei jail-freebsd-N.conf im Verzeichnis ~cbsd/etc/defaults/ hinzufügt und jprofile=N angibt.

Typische Beispiele

Minimaler Jail

cbsd jcreate jname=myjail runasap=1

Erstellt einen Jail mit automatischen Einstellungen und startet ihn sofort.

Jail mit fester IP-Adresse

cbsd jcreate jname=webserver ip4_addr="10.0.0.10" runasap=1

Jail mit VNET

cbsd jcreate jname=firewall vnet=1 ci_ip4_addr="10.0.0.1" ci_gw4="10.0.0.254" runasap=1

Jail mit einer anderen FreeBSD-Version

cbsd jcreate jname=legacy ver=13.5 runasap=1

Jail mit Paketliste

cbsd jcreate jname=app pkglist="nginx,php82,mysql80" runasap=1

Jail mit profilbasierter Konfiguration

cbsd jcreate jname=myjail jprofile=vnet runasap=1

Jail mit benutzerdefiniertem rc.conf und Umgebungsvariablen

cbsd jcreate jname=service environment="NODE_ENV=production" runasap=1

Verwandte Seiten