среда, 13 июня 2012 г.

Создание и настройка jail окружения в FeeBSD

1. Создание jail.

Дабы виртуальная система была чистой и никак не зависела от основной, то создавать её мы будем из исходных текстов, что может занять довольно продолжительное время:

setenv D /usr/jails/base
mkdir -p $D
cd /usr/src
make buildworld
make installworld DESTDIR=$D
make distribution DESTDIR=$D
mount -t devfs devfs $D/dev

То есть переходим в каталог с исходниками, в качестве значения переменной JAIL указываем путь к директории, где будет располагаться jail. Далее создаем эту директорию, создаем "мир", устанавливаем его куда нужно, затем монтируем туда же файловую систему dev. Этот вариант хорош тем, что собрав "мир" один раз, мы можем достаточно быстро установить его в несколько директорий, если будет нужно создать несколько jail.

2. Настройка сети в корневой системе

Необходимо создать алиас сетевого интерфейса корневой системы, на котором будет работать jail. Каждой jail необходим свой алиас.


Если у вас есть несколько внешних IP-адресов, то можно сделать алиасы для интерфейса, смотрящего наружу. Тогда можно будет подключаться к jail напрямую.

Если у вас только один внешний IP, то придется делать проброс портов.

К примеру, возьмем второй вариант. Создаем алиас:

ifconfig em0 inet alias 192.168.0.101 netmask 255.255.255.0

Добавляем в ipfw правило:

ipfw add fwd 192.168.0.101,22 tcp from any to 10.78.43.93 1022

3. Настройка jail.

Так как jail - это почти отдельная ОС, то внутри неё необходимо сделать ряд настроек. Входим в jail:

jail /usr/jail/base base.jail 192.168.0.101 /bin/sh

  • Создаем пустой fstab (touch /etc/fstab)
  • Устанавливаем пароль пользователю root (passwd root) и создаем дополнительного пользователя (adduser), которого включаем в группу wheel.
  • Если собираемся использовать sendmail, то перестраиваем базу псевдонимов для почты (newaliases).
  • Создаем файл /etc/resolv.conf, чтобы сервисы внутри jail могли выполнять резолвинг имен DNS.

В /etc/rc.conf добавляем следующее:

hostname="base.jail"
// Отключаем конфигурирование сетевых интерфейсов (они виртуальные)
network_interfaces=""
// Включаем/отключаем необходимые сервисы
sendmail_enable="NO"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"
sshd_enable="YES"

Выйти из jail окружения можно командой exit или сочетанием клавиш Ctrl+D.

Eсли в jail не установлен какой-то софт, то его можно установить из базовой системы командами вида:

make PREFIX=/usr/jail/base make install clean
pkg_add -P /usr/jail/base packet-1.0.0.tbz
PREFIX=/usr/jail/base portinstall -P packet

Для того, чтобы дать пользователем jail самостоятельно устанавливать необходимые программы, проще всего примонтировать дерево портов:

mount_unionfs /usr/ports /usr/jail/base/usr/ports

либо

mount_nullfs /usr/ports /usr/jail/base/usr/ports

4. Запуск jail-окружения

После того, как вся подготовительная работа выполнена, можно запускать jail-сервер. Для этого добавляем в /etc/rc.conf необходимые строки:

jail_enable="YES"
jail_list="base" // Здесь перечисляем имена всех jail через пробел.
// Далее описываем минимально необходимые строки для запуска jail. Для каждой jail.
jail_base_rootdir="/usr/jail/base"
jail_base_hostname="base.jail"
jail_base_ip="192.168.0.1"
jail_base_interface="de0"
// Прописываем команды запуска и остановки
jail_base_exec_start="/bin/sh /etc/rc"
jail_base_exec_stop="/bin/sh /etc/rc.shutdown"
// Указываем какие ФС монтировать.
jail_base_devfs_enable="YES"
jail_base_fdescfs_enable="NO"
jail_base_procfs_enable="NO"

и запускаем jail:

/etc/rc.d/jail start

либо если хотим запустить только конкретную jail, то указываем её имя:

/etc/rc.d/jail start base

Список уже запущенных jail-окружений можно узнать с помощью команды jls. Войти в jail из коневой системы можно командой:

jexec 1 tcsh

Полезные ссылки:

http://www.xakep.ru/post/48311/

http://wiki.lissyara.su/wiki/FreeBSD_%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%9F%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F:_%D0%93%D0%BB%D0%B0%D0%B2%D0%B0_15_Jails_%28%D0%9A%D0%BB%D0%B5%D1%82%D0%BA%D0%B8%29

http://house.hcn-strela.ru/BSDCert/BSDA-course/ch02s11.html

Смотрите также остальные статьи про jail:

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

Ограничение ресурсов jail в FreeBSD (память, процессор, жесткий диск)

Ezjail - легкое управление клетками в FreeBSD

0 коммент.:

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