Главная > Программы > jail Jail - механизм виртуализации в системе FreeBSDМного клеток хороших и разных. Под таким слоганом я занялся обустройством клеток для новых пациентов. Но немного поясню о чем будет идти речь. Мне нужны были несколько клеток для разделения программ по серверам, для тестовых работ, а так же:
Содержание:
ВведениеИ так немного истории. Jail является потомком chroot и имеет поддержку на уровне ядра и мы можем ограничивать некоторые ресурсы потребляемые клеткой, а так же привязываем её к определенному IP адресу с определенным именем хоста и определенным местом корневого каталога. Получаем изолированные процессы - клетки, в которых вы можете делать, что хотите и это не повлияет на основную систему. Создание клеткиНеобходимо провести несколько манипуляций: # setenv D /usr/home/jails/test.local # mkdir -p $D # cd /usr/src # make buildworld # make installworld DESTDIR=$D # make distribution DESTDIR=$D # mount -t devfs devfs $D/dev 1. Укажем переменную имени к окружению. Конфигурация rc.conf# Значения для всех клеток
jail_enable="YES" # Включаем jail
jail_interface="em0" # Сетевой интерфейс
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.0.4" # IP адрес хоста клетки
#jail_test_interface="em0" # Сетевой интерфейс клетки (если нужен)
#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_em0="inet 192.168.0.2 netmask 255.255.255.0" # Алиас для первой клетки ifconfig_em0_alias0="inet 192.168.0.4 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.0.4 test.local /usr/home/jails/test.local 2 192.168.0.5 jabber.local /usr/home/jails/jabber.local Зайдем в первую клетку: # jexec 1 tcsh test# Все готово, теперь вы можете настроить клетку как вам угодно и приступить к установке нужных пакетов. Но для корректной работы вам необходимо дополнительно настроить созданную клетку. Дополнительная настройкаОкружениеFSTABСоздадим в клетке пустой файл /etc/fstab чтобы при ее запуске не появлялось сообщение об отсутствующем файле fstab. #
PORT MAPPERВыключите в клетке port mapper. # cat /home/jails/test.local/etc/rc.conf | grep rpcbind rpcbind_enable="NO" RESOLVНастроим resolv.conf так, чтобы разрешение имен в клетке работало правильно. Создадим в
клетке файл с нужным DNS сервером или скопируем с основной машины в клетку. # cat /home/jails/test.local/etc/resolv.conf nameserver 192.168.0.1 SENDMAILЗапустим в клетке newaliases чтобы при запуске не появлялось сообщение от sendmail. # /etc/mail/ && newaliases IFCONFIGОтключим сетевой конфигурационный интерфейс чтобы при запуске не появлялось сообщение от ifconfig. # cat /home/jails/test.local/etc/rc.conf | grep network network_interfaces = "" ПаролиОбязательно измените пароль root в клетке (сделайте отличным от основной машины). Создадим нового пользователя. Для этого есть штатная утилита jexec с помощью нее мы добавим
нового пользователя состоящего в группе wheel [цифра это JID клетки]: # jexec 1 adduser Username: alex Full name: Alex Ign Uid (Leave empty for default): Login group [alex]: Login group is alex. Invite alex into other groups? []: wheel Login class [default]: Shell (sh csh tcsh nologin) [sh]: csh Home directory [/home/alex]: 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 : alex Password : ***** Full Name : Alex Ign Uid : 1003 Class : Groups : alex wheel Home : /home/alex Home Mode : Shell : /bin/csh Locked : no OK? (yes/no): yes adduser: INFO: Successfully added (alex) to the user database. Add another user? (yes/no): no Goodbye! SSHДля работы с клеткой посредством SSH необходимо настроить демон sshd. # cat /etc/ssh/sshd_config | grep ListenAddress #ListenAddress 0.0.0.0 ListenAddress 192.168.0.2 #ListenAddress ::Перезапустим демон и проверим его работу. # /etc/rc.d/sshd restart # sockstat -l |grep sshd root sshd 1216 3 tcp4 192.168.0.4:22 *:* root sshd 978 3 tcp4 *:22 *:*Добавим в конфигурационный файл rc.conf клетки. # cat /home/jails/test.local/etc/rc.conf | grep sshd sshd_enable="YES" TIMEZONEУстановите нужную временую зону в клетке. Экспорт портовЭкспортируем существующие порты в клетку. Вы можете также скопировать их в нужную директорию или создать симлинк. # mkdir /home/jails/test.local/usr/ports # mount_nullfs /usr/ports /home/jails/test.local/usr/ports # cat /etc/fstab | grep jail /usr/ports /home/jails/test.local/usr/ports nullfs rw 0 0 ОграниченияВы можете настроить некоторые переменные sysctl в основной системе для настройки работы клеток.
Для некоторого ограничения ресурсов клетки используйте совместно с ограничениями в /etc/login.conf ;) Автоматизируем птицефермуНаписать о самописном скрипте или о порте который может управлять клетками? ЗаключениеТеперь вы можете создавать и работать с клетками. Есть конечно недостатки клеток такие как отсутствие ограничений на использование ресурсов процессора или памяти без серьезной распилки и применения специальных патчей и многое другое. Но зато все работает нативно и быстро в данном случае мы добились желаемого. Материал взят с сайта:Главная > Программы > jail |