Кол-во просмотров: 33
Для начала полезно знать какие параметры за что отвечают
ci_gw4 — адрес шлюза. Указать вручную, в случаях когда и IP адрес клетки вручную пишешь!
Каждая клетка cbsd имеет свой набор настроек, который используется при старте, останове и работе клеток. Часть из них указывается на этапе создания клетки, остальные вы сможете поменять через команду
% cbsd jconfig jname=jname
|
1
|
jname="jail1"; |
Непосредственно, уникальное имя клетки. Это то имя, которое видно по команде cbsd jls или в списке инвентаризации нод. Данное поле нельзя менять вручную. Если вы хотите поменять имя клетки, воспользуйтесь командой cbsd jrename, поскольку имя клетки используется во многих настройках и путях на файловой системе.
|
1
|
path="/usr/jails/jails/jail1"; |
Указывает на путь, который будет использован в качестве корня при старте клетки. Вышеописанная конфигурация характерна для клеток, которые имеют настройку baserw равную 0, тоесть, база которых смонтирована в только-чтение. В этом случае, алгоритм работы jstart будет следующим:
- 1) смонтировать через nullfs базу определенной версии (см. ниже) в каталог /usr/jails/jails/$jname
- 2) на уже смонтированную базу $workdir/jails/jails/$jname подмонтировать каталоги, относящиеся непосредственно к клетке (из каталога $workdir/jails-data/$jname), обычно уже в режиме записи.
- 3) стартовать клетку с корнем $workdir/jails/jails/$jname
Если же baserw=1, то nullfs не исползуется, и клетка сразу стартует с каталогом $workdir/jails-data/$jname в качестве корня. В этих случаях, параметр path обычно выглядит как
|
1
|
path=/usr/jails/jails-data/jail1-data |
|
1
|
host_hostname="jail1.my.domain"; |
FQDN, полное имя клетки. Данное поле нельзя менять вручную. Если вы хотите поменять имя клетки, воспользуйтесь командой cbsd jrename
|
1
|
ip4_addr="10.0.0.5/24"; |
IP адрес клетки. Если планируется использовать несколько IP адресов, они записываются через запятую:
ip4_addr=»10.0.0.5/24,192.168.0.2/30,54:04:a6:b2:11:c4/64″;
|
1
|
mount_devfs="1"; |
Смонтировать ли в клетку файловую систему devfs (каталог /dev). Как правило, большинство сервисов без этого просто не смогут работать.
|
1
|
allow_mount="1"; |
Можно ли пользователям или сервисам, находящимся внутри клетки монтировать другие файловые системы.
|
1
|
allow_devfs="0"; |
Можно ли пользователям или сервисам, находящимся внутри клетки монтировать devfs
|
1
|
allow_nullfs="0"; |
Можно ли пользователям или сервисам, находящимся внутри клетки монтировать nullfs
|
1
|
mount_fstab="/usr/jails/jails-fstab/fstab.jail1"; |
Путь к файлу, содержащему список каталогов или файловых систем, которые будут примонтированы в клетку при ее запуске
|
1
|
arch="amd64"; |
Архитектура клетки (и соответственно, базы из $workdir/basejail)
|
1
|
mkhostsfile="1"; |
Поправить ли в /etc/hosts клетки запись вида
$ip4_add $jname $jname.my.domain
в соответствии с IP адресом и именем (FQDN) клетки
|
1
|
devfs_ruleset="4"; |
набор правил devfs, которые будут применены на файловую систему devfs в каталоге /dev клетки (список правил в файле /etc/devfs.rules мастер-ноды)
|
1
|
interface="auto"; |
Запись управляет поведением по автоматическому созданию и удалению IP адресов на интерфейсе либо использованию ранее установленных.
Значение auto означает, что cbsd сама выберет интерфейс, на котором создать IP адрес клетки.
Например: имеется нода с двумя интерфейсами. На интерфейсе igb0 установлен IP и подсеть 10.0.0.2/24 и при этом шлюз по-умолчанию для сервера является 10.0.0.1, в следствии чего igb0 является сетевой картой, через который идет трафик по-умолчанию. На интерфейсе igb1 прописан IP/подсеть 192.168.0.1/24. В случае, если в rc.conf клетки ip4_addr принимает значение 192.168.0.{1-255}, то cbsd автоматически выберет интерфейс igb1 для прописывания IP клетки.
Если ни на одном из интерфейсов нет подсети, в которую входит IP клетки, будет выбран интерфейс по-умолчанию.
Также, значение может быть выставлено в имя интерфейса, если вы не хотите использовать поиск наиболее подходящего интерфейса. Например запись
|
1
|
interface="igb0"; |
пропишет IP адрес клетки на интерфейсе igb0.
Также как и при запуске, когда cbsd пропишет на интерфейсе нужные клетке IP, при остановке их снимет с интерфейса. Поэтому, будьте предельно аккуратны — если вы пропишите по ошибке в качестве IP клетки адрес непосредственно ноды, то при остановке клетки cbsd выполнит
|
1
|
ifconfig <iface> <ip> -alias |
и нода будет потеряна по сети.
Для того, чтобы пресечь управление IP адресами, параметр interface можно закомментировать или удалить, либо значение оставить пустым:
|
1
|
interface=""; |
В этом случае, cbsd сразу будет запускать jail с соответствующим IP, подразумевая, что он уже инициализирован. Такая ситуация может быть необходима, когда сервер имеет лишь 1 IP адрес, а вы планируете запустить jail (или несколько клеток) на одном имеющимся IP, но с сервисами внутри, которые не конфликтуют по портам. Например, имея 1 IP адрес, вы можете запустить одну клетку с WEB сервером на 80 порту, другую клетку с почтовым сервером на 25 порту и тд.
|
1
|
ver="10.0"; |
Версия базы для клетки. Имеет прямое отношение к версии FreeBSD. Так, если в rc.conf клетки установлены параметры
|
1
2
3
|
arch="amd64"ver="10.0"baserw=0 |
то при старте клетки в качестве базы будет выбрана ${workdir}/basejail/base_amd64_10.0.
Если стоит
|
1
2
3
|
arch="i386"ver="9.1"baserw=0 |
то, соответственно, будет использован ${workdir}/basejail/base_i386_9.1.
Таким образом вы можете переключать версию базы с одной версии на другую
случае, когда baserw=1, подразумевается что вся база уже была проинициализирована и наполнила собой ${workdir}/jails-data/$jname-data, поэтому эти параметры роли не играют
|
1
|
basename=""; |
Имя базы. Вы можете собирать кастомизированные base, например собрать минимальное окружение и разместить его в $workdir/base_lite_amd64_9.2. Для того, чтобы указать cbsd что нужно смонтировать данный каталог, basename должен содержать префикс lite:
|
1
|
basename="lite" |
|
1
|
baserw="0"; |
Если 1, подразумевается что клетка имеет свою собственную базовую файловую систему и имеет в нее запись. Как правило, этот параметр задается на этапе создания клетки. Если же вы создали изначально клетку baserw=0 (readonly), но хотите перевести ее в режим baserw=1, вам предварительно необходимо скопировать все базовые файлы в каталог $workdir/jails-data/$jname-data. Например:
|
1
2
|
cd /usr/jails/basejail/base_amd64_10/pax -p eme -X -rw . /usr/jails/jails-data/jail1-data |
либо, если вы собрали в мастер-ноде объектные файлы:
|
1
|
make -C /usr/src installworld DESTDIR="/usr/jails/jails-data/jail1-data" |
Таким же образом на данном этапе, предполагается обновлять клетки, работающие в режиме baserw=1, тк каждая клетка имеет персональную копию базы. Напротив, при использовании baserw=0, вы можете использовать лишь одну копию базы, которая монтируется через nullfs в read-only всем клеткам. Вы можете иметь одну базу (например минимального объема с именем lite) на несколько десятков клеток, размещенную на md-ramfs для ускорения работы базовых утилит в клетках. Помимо этого, с baserw=0 вы имеете возможность обновлять версию баз меньшими затратами. Кроме этого, смонтированная база в режиме read-only дает вам дополнительную безопасность, если вашу клетку взломали и попробуют модифицировать файлы системы — это у взломщиков просто не получится.
|
1
|
mount_src="0"; |
Смонтировать ли в /usr/src каталог клетки исходные коды FreeBSD в read-only, если они есть
|
1
|
mount_obj=""; |
Смонтировать ли в /usr/obj каталог клетки объектные файлы FreeBSD в read-only, если они есть
|
1
|
mount_kernel="0"; |
Смонтировать ли в /boot/kernel ядро FreeBSD. Это может быть полезно, к примеру, для работы CTF-информации, необходимую для работы DTRACE.
|
1
|
mount_ports="1"; |
Смонтировать ли в /usr/ports порты из мастер-ноды в readonly. Вы можете иметь одно дерево портов на всю ноду, которое развернуть в /usr/ports каталоге мастер-ноды и которое подмонтировано во все клетки. Для того, чтобы одновременная копмиляция одного и того же порта не конфликтовала в двух и более клетках, в /etc/make.conf параметр WRKDIRPREFIX ставится в альтернативное место, например /tmp (если клетка имеет applytpl=1, это происходит автоматически)
|
1
|
astart="1"; |
Следует ли запускать клетку автоматически при старте ноды. Если astart=0, клетка не запустится сама с перезагрузки мастер-хоста.
|
1
|
vnet="0"; |
|
1
|
applytpl="1"; |
Применить ли некоторые модификации в конфигурации клетки: выставить pkg.conf, внести записи в /etc/hosts и тд.
|
1
|
mdsize="0"; |
|
1
|
floatresolv="1"; |
Автоматически поправить /etc/resolv.conf , назначив автоматически в качестве первичного nameserver кеширующий named в мастер-ноде, остальные nameserver — из инвентаризации ноды.
|
1
|
exec_start="/bin/sh /etc/rc"; |
|
1
|
exec_stop="/bin/sh /etc/rc.shutdown"; |
Системные команды для запуска и останова клетки. Если вы хотите писать дополнительные скрипты, отрабатывающих при запуске и останове клеток, прочитайте: Конфигурации клетки
|
1
|
cpuset="0"; |
Привязать jail и его процессы к конкретным ядрам CPU. Значение 0 (по-умолчанию) означает, что привязок к ядрам нет и процессы будут занимать все доступные ядра. Значение отличное от нуля идентифицирует ядро или список ядер, на которых дозволено работать клетке. Запись должна соответствовать форме записи параметра -l cpu-list у команды cpuset(1), например:
|
1
|
cpuset="1"; |
означает, что процессы будут работать только на ядре 1.
|
1
|
cpuset="0-3" |
означает, что процессы будут работать на ядрах 0,1,2,3
|
1
|
cpuset="0,3" |
означает, что процессы будут работать на ядрах 0 и 3
Данный функционал полезен, например, для профилирования ПО, или если вы хотите ограничить клетку определенными ядрами (или давать каждой клетке по своему ядру).
|
1
|
setfib="0"; |
Привязать jail и его процессы к отдельной таблице маршрутизации. Значение 0 (по-умолчанию) означает, что привязок нет и будет использоваться стандартная таблица маршрутизации. Для того, чтобы использовать setfib, в файле /boot/loader.conf вам необходимо установить лимиты таблиц через параметр net.fibs. Например, если вы хотите использовать пять отдельных таблиц маршрутизации, в /boot/loader.conf вы должны иметь следующую запись:
|
1
|
net.fibs="5" |
|
1
|
exec.consolelog="0"; |
Регулирует протоколирование вывода jail(8) при старте и останове клетки. По-умолчанию, используется значение 0.Возможные значения:
- 0 — выключить exec.consolelog. В этом случае, при jstart/jstop будет показываться весь вывод процедуры запуска и останова.
- 1 — Включить протоколирование в файл ${workdir}/var/log/${jname}.log, где $jname — соответствующее имя клетки. При этом, на терминале этих сообщений не будет.
/path/to/file — Произвольное имя файла. Например при значении /dev/null, клетка не будет выводить записи и куда-либо протоколировать процесс.
Источник: https://www.bsdstore.ru/ru/cbsd_rcconf.html