пятница, 15 июня 2012 г.

Настройка и управление jail в FreeBSD.

В файле /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 1
jps - выводит список процессов, запущенных в заданной 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 коммент.:

Отправить комментарий