Создание jail из командной строки
Синтаксис
cbsd jcreate key=value [key=value ...]
Минимальный вызов:
cbsd jcreate jname=myjail
Создаст jail myjail с автоматическими параметрами: IP через DHCP, hostname myjail.my.domain, версия FreeBSD наследуется от хоста. Jail будет создан и сконфигурирован, но не запущен.
Для запуска сразу после создания добавляют runasap=1:
cbsd jcreate jname=myjail runasap=1
Обязательные параметры
Единственный строго обязательный параметр:
| Параметр | Описание |
|---|---|
jname |
Уникальное имя jail. Не может содержать пробелы, спецсимволы. Должно быть уникально среди всех существующих jail на хосте. |
Все остальные параметры имеют значения по умолчанию.
Приоритет настройки
Параметр получает значение в порядке убывания приоритета:
- Явный аргумент командной строки:
cbsd jcreate ip4_addr="10.0.0.5" - Пользовательский оверлей:
~cbsd/etc/jail-freebsd-default.conf(если существует) - Профиль
jprofile=N, если задан (файл~cbsd/etc/defaults/jail-freebsd-N.conf) - Системный дефолт:
~cbsd/etc/defaults/jail-freebsd-default.conf
Формат всех .conf файлов: key="value" (одна пара на строку).
Группы параметров
Полный список параметров доступен через cbsd jcreate --args. Параметры сгруппированы по назначению.
Базовые параметры
| Параметр | Дефолт | Описание |
|---|---|---|
jname |
(обязателен) | Имя jail |
host_hostname |
${jname}.${default_domain} |
FQDN jail. По умолчанию my.domain |
ver |
native |
Версияrelease: native (наследовать хост), или конкретная, например 14.2 |
arch |
native |
Архитектура: native (наследовать хост), x86_64, aarch64, riscv64 |
path |
${jaildir}/${jname} |
Корневой каталог jail |
astart |
1 |
Автостарт jail при загрузке хоста (0 — отключить) |
runasap |
0 |
Запустить jail сразу после создания (1 — запустить) |
baserw |
0 |
writable базовая система внутри jail (1 — разрешает писать в /usr/bin и т.д.) |
basename |
`` | Имя существующего базового release для клонов |
tags |
`` | Пользовательские метки, строка |
quiet |
0 |
Тихий режим, подавление вывода |
Сетевые параметры
| Параметр | Дефолт | Описание |
|---|---|---|
ip4_addr |
DHCP |
IPv4 адрес: конкретный (10.0.0.5), DHCP, или empty |
interface |
auto |
Сетевой интерфейс хоста: auto (автоопределение), vnet0, em0 и т.д. |
vnet |
0 |
Изолированное сетевое пространство (1 — включить VNET) |
interface2 |
`` | Второй сетевой интерфейс |
ip4_addr2 |
`` | Второй IPv4 адрес |
При vnet=1 используются расширенные параметры VNET (ci_*):
| Параметр | Дефолт | Описание |
|---|---|---|
ci_ip4_addr |
DHCP |
IP адрес внутри VNET |
ci_gw4 |
0 |
Шлюз внутри VNET |
ci_interface_mtu |
1500 |
MTU виртуального интерфейса |
ci_user_pubkey |
`` | SSH публичный ключ для cloud-init |
Разрешения (allow_*)
Параметры соответствуют свойствам jail(8). По умолчанию большинство разрешений отключены (0`), кроме базового набора:
| Параметр | Дефолт | Описание |
|---|---|---|
allow_mount |
1 |
Mount файловых систем внутри jail |
allow_nullfs |
1 |
NULLFS mount |
allow_fdescfs |
1 |
Mount fdescfs |
allow_devfs |
1 |
Mount devfs |
allow_dying |
1 |
Jail может быть остановлен |
allow_procfs |
1 |
Доступ к procfs |
allow_tmpfs |
1 |
Mount tmpfs |
allow_reserved_ports |
1 |
Бинд на порты < 1024 |
allow_unprivileged_proc_debug |
1 |
Debug для непривилегированных процессов |
allow_suser |
1 |
suser права для root в jail |
allow_extattr |
1 |
Extended attributes |
allow_raw_sockets |
0 |
Raw socket |
allow_fusefs |
0 |
FUSE файловая система |
allow_linprocfs |
0 |
Mount linux procfs |
allow_linsysfs |
0 |
Mount linux sysfs |
allow_vmm |
0 |
Доступ к vmm(4) для вложенных VM |
allow_nfsd |
0 |
NFS daemon |
allow_zfs |
0 |
ZFS внутри jail |
allow_mlock |
0 |
mlock/munlock |
allow_read_msgbuf |
0 |
Чтение kernel message buffer |
allow_adjtime |
0 |
Медленная корректировка времени (ntpd) |
allow_settime |
0 |
Установка даты/времени |
allow_chflags |
0 |
Manipulate file flags (chflags) |
allow_sysvipc |
0 |
System V IPC |
allow_kmem |
0 |
Доступ к /dev/kmem |
allow_read_msgbuf |
0 |
Чтение sysctl hw.machine_memsize |
Mount параметры
| Параметр | Дефолт | Описание |
|---|---|---|
mount_devfs |
1 |
Mount devfs в jail |
mount_fdescfs |
1 |
Mount fdescfs |
mount_procfs |
0 |
Mount procfs |
mount_linprocfs |
0 |
Mount linux procfs |
mount_linsysfs |
0 |
Mount linux sysfs |
mount_fstab |
0 |
Mount из fstab |
mount_ports |
1 |
Mount ports tree |
mount_src |
0 |
Mount source tree |
mount_obj |
0 |
Mount obj tree |
mount_kernel |
0 |
Mount kernel |
Lifecycle скрипты (exec_*)
| Параметр | Дефолт | Описание |
|---|---|---|
exec_start |
/bin/sh /etc/rc |
Команда запуска внутри jail |
exec_stop |
/bin/sh /etc/rc.shutdown |
Команда остановки |
exec_timeout |
180 |
Таймаут start/stop в секундах |
exec_poststart |
0 |
Скрипт после старта jail |
exec_prestart |
0 |
Скрипт перед стартом |
exec_poststop |
0 |
Скрипт после остановки |
exec_prestop |
0 |
Скрипт перед остановкой |
exec_master_poststart |
0 |
Скрипт на хосте после старта |
exec_master_poststop |
0 |
Скрипт на хосте после остановки |
exec_master_prestart |
0 |
Скрипт на хосте перед стартом |
exec_master_prestop |
0 |
Скрипт на хосте перед остановкой |
exec_consolelog |
`` | Путь к лог-файлу консоли |
Параметры с префиксом exec_master_* выполняются на хост-системе. Без префикса — внутри jail.
SysV IPC
| Параметр | Дефолт | Описание |
|---|---|---|
sysvsem |
new |
Semaphore: new, host, 0 |
sysvshm |
new |
Shared memory: new, host, 0 |
sysvmsg |
new |
Message queues: new, host, 0 |
Пакеты и cloud-init
| Параметр | Дефолт | Описание |
|---|---|---|
pkglist |
`` | Список пакетов для установки (пути к файлам, через запятую) |
delpkglist |
1 |
Удалить pkglist файл после установки |
pkg_bootstrap |
1 |
Инициализировать pkg в jail |
ci_user_pubkey |
`` | SSH ключ для cloud-init |
ci_ip4_addr |
DHCP |
IP для cloud-init |
ci_gw4 |
0 |
Gateway для cloud-init |
Системные параметры jail
| Параметр | Дефолт | Описание |
|---|---|---|
devfs_ruleset |
4 |
Правила devfs ruleset для jail |
enforce_statfs |
1 |
Ограничение stat(2): 0=нет, 1=строгое, 2=relaxed |
persist |
1 |
Перезапуск jail при аварийном выходе |
protected |
0 |
Protected mode |
childrenmax |
0 |
Максимум вложенных jail (0 = неограничен) |
stop_timeout |
900 |
Таймаут принудительной остановки |
mdsize |
0 |
Размер memory disk в MB |
floatresolv |
1 |
Автоматическое обновление resolv.conf |
jnameserver |
0 |
DNS сервер (0 = наследовать глобальный) |
jdomain |
`` | Domain для jail |
autorestart |
0 |
Автоматический рестарт при падении |
hidden |
0 |
Скрыть jail из cbsd jls |
rcconf |
${jailrcconfdir}/rc.conf_${jname} |
Путь к rc.conf jail |
fstablocal |
`` | Дополнительный fstab |
zfs_snapsrc |
`` | Источники ZFS для снапшотов |
zfs_encryption |
`` | ZFS encryption key |
environment |
`` | Переменные окружения для exec_* |
environment_global |
`` | Глобальные переменные окружения |
mount_fstab |
0 |
Enable fstab mounts |
mnt_start |
0 |
Скрипт mount data dir при старте |
mnt_stop |
0 |
Скрипт unmount data dir при остановке |
sysdir_volume |
0 |
Копировать jails-system в VOLUMES |
etcupdate_init |
1 |
Инициализировать etcupdate bootstrap |
mkhostsfile |
1 |
Создать /etc/hosts |
applytpl |
1 |
Применить шаблоны skel |
Профили (jprofile)
| Параметр | Дефолт | Описание |
|---|---|---|
jprofile |
default |
Профиль конфигурации (см. список профилей ниже) |
jconf |
`` | Путь к jail.conf для записи |
removejconf |
1 |
Удалить jconf после создания |
Встроенные профили
Системные профили в ~cbsd/etc/defaults/:
| Профиль | Файл | Назначение |
|---|---|---|
default |
jail-freebsd-default.conf |
Базовый, стандартный jail |
vnet |
jail-freebsd-vnet.conf |
Jail с VNET изоляцией |
trusted |
jail-freebsd-trusted.conf |
Повышенные привилегии |
puppet |
jail-freebsd-puppet.conf |
С puppet агентом |
cbsdpuppet |
jail-freebsd-cbsdpuppet.conf |
CBSD + puppet |
rocky_9 |
jail-freebsd-rocky_9.conf |
Rocky Linux в jail |
devuan_daedalus |
jail-freebsd-devuan_daedalus.conf |
Devuan в jail |
Пользователь может создать свой профиль, добавив файл jail-freebsd-N.conf в ~cbsd/etc/defaults/ и указав jprofile=N.
Типовые примеры
Минимальный jail
cbsd jcreate jname=myjail runasap=1
Создаст jail с авто-настройками, запустит сразу.
Jail с фиксированным IP
cbsd jcreate jname=webserver ip4_addr="10.0.0.10" runasap=1
Jail с VNET
cbsd jcreate jname=firewall vnet=1 ci_ip4_addr="10.0.0.1" ci_gw4="10.0.0.254" runasap=1
Jail с другой версией FreeBSD
cbsd jcreate jname=legacy ver=13.5 runasap=1
Jail с пакетным списком
cbsd jcreate jname=app pkglist="nginx,php82,mysql80" runasap=1
Jail с профильной конфигурацией
cbsd jcreate jname=myjail jprofile=vnet runasap=1
Jail с кастомным rc.conf и переменными окружения
cbsd jcreate jname=service environment="NODE_ENV=production" runasap=1