В файле /etc/sysctl.conf можно задать ряд параметров связаных с jail:
- security.jail.set_hostname_allowed - разрешает менять имя хоста внутри jail, если задано реальное DNS имя, то лучше запретить,
- security.jail.socket_unixiproute_only - позволяет создвавать сокеты в jail только для доменов PF_LOCAL, PF_INET или PF_ROUTE, иначе, возвращается ошибка;
- security.jail.sysvipc_allowed - позволяет получить доступ к глобальному System V IPC;
- security.jail.getfsstatroot_only - если установлена 1, то в jail можно получить информацию (df) только о той файловой системе на которой создан jail;
- security.jail.allow_raw_sockets - разрешает создавать raw sockets, что позволяет использовать ping и некоторые другие сетевые утилиты;
- security.jail.chflags_allow - если задана 1, то в jail появляется возможность модифицировать флаги ФС, если запретить, то можно создавать неизменяемые и неудаляемые файлы.
Все эти параметры могут принимать значения 0 или 1 и записываются, к примеру, так: security.jail.chflags_allow=0.
Параметры команды jail.
Чувствую, тут требуется полный перевод man jail, но мы сделаем лишь частичный:
Start translation mode.
Утилита jail создает новую клетку или меняет существующую, дополнительно заключая в тюрьму текущий процесс внутри неё.
Доступные опции:
-d - разрешает делать изменения в разрушающейся клетке
-h - разрешает параметр host.hostname (или hostname) и добавляет все возвращенные IP-адреса в список IP-адресов для этой клетки. Это может повлиять на выбор адреса по умолчанию для исходящих соединений IPv4 данной jail. Первый возвращенный резолвером адрес будет использоваться как освновной адрес.
-i - выводить идентификатор jail вновь созданной клетки.
-n jailname - устанавливает имя jail. Этот параметр не рекомендуется к использованию и эквивалентен установке параметра name.
-J jid-file - создавать файл jid_file, содержащий идентификатор клетки, путь, хостнейм, IP и команду, использованную для старта клетки.
-l - запустить программу в чистом окружении. Окружение отбрасывается за исключением HOME, SHELL, TERM и USER. HOME и SHELL устанавливаются в значения по умолчанию для целевого логина. Значение USER устанавливается в целевой логин. TERM импортируется из текущего окружения. Переменные окружения также устанавливаются из базы данных возможностей класса login для целевого логина. (Знать бы что это всё значит.)
-s securelevel - устанавливает запись kern.securelevel MIB в заданное значение внутри вновь созданной jail. Этот параметр не рекомендуется к использованию и эквивалентен установке параметра securelevel.
-u username - имя пользователя из базового окружения, от которого должна быть выполнена команда.
-U username - имя пользователя из окружения jail, от которого должна быть выполнена команда.
-c - создать новую клетку. Параметы jid и name (если указаны), не должны совпадать с уже существующими.
-m - изменить текущую клетку. Один из параметров jid и name должны существовать и вести к существующей jail.
-cm - создать клетку если она ещё не существует или изменить уже существующую.
-r - остановить jail по параметрам jid или name. Все процессы в jail убиваются и все потомки этой клетки тоже останавливаются.
По крайней мере один из параметров -c, -m или -r должен быть указан.
Stop translation mode.
Старт клетки командой jail:
jail /usr/jail/base base.jail 192.168.0.101 /bin/sh
то есть для старта клетки с минимальными параметрами требуется указать путь к директории, где располагаются файлы клетки, хостнейм, IP-адрес и команду для старта оболочки.
Утилиты для упрвления клетками.
Можно установить из /usr/ports/sysutils/jailutils. После этого в системе появляется несколько утилит. Опишем их.
injail - позволяет определить, запущена в jail или нет. Полезна только для скриптов. Возвращает следующие значения:
0 - процесс запущен в jail,
1 - процесс запущен вне jail,
2 - ошибка определения.
jails - выводит список запущенных клеток. Фактически аналогично системной утилите jls. Дополнительных параметров не предусмотрено.
jid - переводит идентификаторы jail в имена хостов и наоборот. Может пригодиться в скриптах. Стоит отметить что jls выводит как идентификатор, так и имя хоста для каждой jail.
jkill - останавливает одну или несколько клеток, выполняя скрипты останова в клетках и затем убивая оставшиеся процессы. Имеет некоторое количество параметров:
-f - заставляет процессы закрыться. Если процесс остается после отправки ему сигнала SIGTERM, он закрывается силой, для чего подается сигнал SIGKILL.
-k - не вызывать завершающие скрипты, просто убить процессы.
-q - подавляет вывод предупреждений.
-r - после выключения, перезапустить jail с помощью стартовых скриптов из /etc/rc
-t timeout - указать максимальное время ожидания после запуска завершающих скриптов и между отправками различных убивающих сигналов. По умолчанию, 3 секунды.
-v - включает подробный вывод сообщений о всех событиях.
jail - может быть как идентификатором, так и именем хоста клетки.
К примеру:
jkill -r 1jps - выводит список процессов, запущенных в заданной jail. Вывод сделан в стиле утилиты ps, даже поддерживаются её параметры. Единственный параметр -i позволяет отображать только идентификаторы процессов.
jstart - более безопасная замена для команды jail. Используются следующие параметры:
-i - отобращает идентификатор вновь созданной jail.
path - путь к директории, где создана клетка.
hostname - имя хоста jail.
ip-number - IP-адрес jail.
command - опциональные команды, которые должны быть выполнены внутри клетки. По умолчанию используется /bin/sh /etc/rc.
Другие порты для работы с jail.
- ports-mgmt/jailaudit. Позволяет мониторить установлены ли в клетках порты имеющие уязвимости в безопасности. Основана на утилите portaudit.
- sysutils/ezjail. Отличная штука для создания большого количества клеток на основе монтирования директорий из базовой системы.
- sysutils/jailadmin. Облегчает управление несколькими jail одновременно.
- sysutils/jailctl. Создание, удаление и резервное копирование jail.
- sysutils/jailer. Устанавливается внутри клетки и управляет остановом и перезапуском.
- sysutils/jailutils. Порт с несколькими программами для манипулирования тюрьмами.
- sysutils/jailme - позволяет обычным пользователям получать доступ к jail.
- sysutils/jailrc - продвинутый вариант стартового скрипта /etc/rc.d/jail
Как назначить несколько IP-адресов клетке?
Для этого нужно создать несколько алиасов для реального интерфейса, затем перечислить несколько IP-адресов в параметре jail_example_ip в rc.conf через запятую, где example - имя клетки. Пример:
jail_example_ip="192.0.2.10,2001:db8::17"
Смотрите также остальные статьи про jail:
Создание и настройка jail окружения в FeeBSD
Ограничение ресурсов jail в FreeBSD (память, процессор, жесткий диск)
Ezjail - легкое управление клетками в FreeBSD
0 коммент.:
Отправить комментарий