Для начала сделаем следующее:
1. # setenv D /usr/home/jails/test.local
2. # mkdir -p $D
3. # cd /usr/src
4. # make buildworld
5. # make installworld DESTDIR=$D
6. # make distribution DESTDIR=$D
7. # mount -t devfs devfs $D/dev
1. Укажем переменную имени к окружению.
2. Создадим домашнюю директорию по переменной.
5. Заполним каталог поддерева необходимыми двоичными файлами, библиотеками, справочниками и так далее.
6. Установим все необходимые файлы из /usr/src/etc/ и /etc в каталог клетки $D/etc/.
Добавляем в rc.conf
Значения для клеток
jail_enable="YES" # Включаем jail
jail_interface="re0" # Сетевой интерфейс
jail_devfs_enable="YES" # Монтируем devfs в клетках
jail_procfs_enable="YES" # Монтируем procfs в клетках
jail_set_hostname_allow="YES"
Список клеток
jail_list="test" Имя клеток через пробел
Значения для клетки "test"
jail_test_rootdir="/usr/home/jails/test.local" Рутовая директория jail
jail_test_hostname="test.local" Имя хоста клетки
jail_test_ip="192.168.64.78" IP адрес хоста клетки
#jail_test_interface="re0" Сетевой интерфейс клетки
#jail_test_devfs_enable="YES" Монтируем devfs в клетке
#jail_test_procfs_enable="YES" Монтируем procfs в клетке
jail_test_exec_start="/bin/sh /etc/rc"
jail_test_exec_stop="/bin/sh /etc/rc.shutdown"
jail_test_flags="-l -U root" Необходимые флаги для клетки
Конфигурация сети
Необходимо создать сетевые алиасы для ваших клеток. Они нужны, чтобы клетки могли корректно работать в сети. Алиасы создаются на материнской системе:
# cat /etc/rc.conf |grep if
ifconfig_re0="inet 192.168.64.77 netmask 255.255.255.0"
Добавляем Алиас для первой клетки в rc.conf
ifconfig_re0_alias0="inet 192.168.64.78 netmask 255.255.255.255"
Для запуска всех клеток используйте:
# /etc/rc.d/jail start
# /etc/rc.d/jail stop
Для запуска необходимой клетки используйте ее имя:
# /etc/rc.d/jail start test
# /etc/rc.d/jail stop test
Выведем список работающих клеток:
# jls
JID IP Address Hostname Path
1 192.168.64.78 test.local /usr/home/jails/test.local
Зайдем в первую клетку:
# jexec 1 tcsh
test#
Все готово, Вы можете настроить клетку как вам угодно и приступить к установке нужных пакетов.
Дополнительные настройки
Окружение FSTAB
Создадим в клетке пустой файл /etc/fstab, чтобы при ее запуске не появлялось сообщение об отсутствующем файле fstab.
# touch /home/jails/test.local/etc/fstab
PORT MAPPER
Выключите в клетке port mapper.
# ee /home/jails/test.local/etc/rc.conf
rpcbind_enable="NO"
RESOLV
Настроим resolv.conf так, чтобы разрешение имен в клетке работало правильно. Создадим в клетке файл с нужным DNS сервером или скопируем с основной машины в клетку.
# ee /home/jails/test.local/etc/resolv.conf
nameserver 192.168.64.83
SENDMAIL
Запустим в клетке newaliases, чтобы при запуске не появлялось сообщение от sendmail.
test# /etc/mail/ && newaliases
IFCONFIG
Отключим сетевой конфигурационный интерфейс, чтобы при запуске не появлялось сообщение от ifconfig.
# ee /home/jails/test.local/etc/rc.conf
network_interfaces = ""
Пароли
Обязательно измените пароль root в клетке (сделайте отличным от основной машины).
Создадим нового пользователя. Для этого есть штатная утилита jexec с помощью нее мы добавим
# jexec 1 adduser
Username: Kolyan
Full name: Kolyan
Uid (Leave empty for default):
Login group [Kolyan]:
Login group is Kolyan. Invite Kolyan into other groups? []: wheel
Login class [default]:
Shell (sh csh tcsh nologin) [sh]: csh
Home directory [/home/Kolyan]:
Home directory permissions (Leave empty for default):
Use password-based authentication? [yes]:
Use an empty password? (yes/no) [no]:
Use a random password? (yes/no) [no]:
Enter password:
Enter password again:
Lock out the account after creation? [no]:
Username : Kolyan
Password : *****
Full Name : Kolyan
Uid : 1003
Class :
Groups : Kolyan wheel
Home : /home/Kolyan
Home Mode :
Shell : /bin/csh
Locked : no
OK? (yes/no): yes
adduser: INFO: Successfully added (Kolyan) to the user database.
Add another user? (yes/no): no
Goodbye!
SSH
Для работы с клеткой посредством ssh необходимо настроить демон sshd.
Для этого на основной машине в /etc/ssh/sshd_config укажем нужный для прослушивания IP.
# ee /etc/ssh/sshd_config
#ListenAddress 0.0.0.0
ListenAddress 192.168.64.78
#ListenAddress ::
Перезапустим демон и проверим его работу.
# /etc/rc.d/sshd restart
# sockstat -l |grep sshd
root sshd 1216 3 tcp4 192.168.64.78:22 *:*
root sshd 978 3 tcp4 *:22 *:*
Добавим в конфигурационный файл rc.conf клетки.
# ee /home/jails/test.local/etc/rc.conf
sshd_enable="YES"
Экспорт портов или создание симлинк. Вы можете также скопировать их в нужную директорию или создать симлинк.
# mkdir /home/jails/test.local/usr/ports
# mount_nullfs /usr/ports /home/jails/test.local/usr/ports
# cat /etc/fstab |grep jail
Ограничения:
Вы можете настроить некоторые переменные sysctl в основной системе для настройки работы клеток.
security.jail.set_hostname_allowed: 1 Возможность менять hostname внутри клетки.
security.jail.socket_unixiproute_only: 1 Создавать сокет в клетке можно только для PF_LOCAL, PF_INET или PF_ROUT иначе, возвращается ошибка
security.jail.sysvipc_allowed: 0 Возможность использовать System V IPC
security.jail.enforce_statfs: 2 Возможность видеть клетке все смонтированные устройства
security.jail.allow_raw_sockets: 0 Возможность использования низкоуровневых сокетов (ping и тп)
security.jail.chflags_allowed: 0 Возможность менять системные флаги файлов
security.jail.jailed: 0 # Видеть список запущенных клеток
security.jail.getfsstatroot_only: 1 клетка получает только информацию о ФС, например, возвращается df, для корневой файловой системы.
Для некоторого ограничения ресурсов клетки используйте совместно с ограничениями в /etc/login.conf 🙂