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:
- Expliziter Kommandozeilenargument:
cbsd jcreate ip4_addr="10.0.0.5" - Benutzerdefinierter Overlay:
~cbsd/etc/jail-freebsd-default.conf(falls vorhanden) - Profil
jprofile=N, falls angegeben (Datei~cbsd/etc/defaults/jail-freebsd-N.conf) - 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