Установка и настройка клеток (jail) на FreeBSD6.1
И снова по просьбам трудящихся
:))) На самом деле, статья эта не столько по просьбам народа, а больше
по собственной необходимости - мне понадобилось поднять три самбы на
одном хосте, в качестве контроллеров домена для трёх разных доменов.
Подумавши, рассудил, что колупаться с тремя стартовыми конфигами, тремя
конфигами, и т.д. не хочу. К тому же, не было уверенности, что всё
удастся сделать через конфиги и параметры запуска, может придётся
ковырять исходники, или Makefile, накрайняк. Кроче - ломало. Поэтому и
затеял это - поднять их в отдельных клетках, и пусть себе пашут.
Итак - теория :). Клетки (jail) появились с FreeBSD4.0 - причём в
плане кодинга обошлись они поразительно дёшево - всего чё-то около 400
строк в коде ядра, для добавления туда поддержки клеток. Ну и всё. В
клетке всё как вреальной машине, за тем исключением, что не работают
сетевые приложения которым нужен прямой доступ к сетевым сокетам
(например ping). Ну а в остальном - полноценная машина, кроме мелочей - shutdown не работает и т.п.
Исходные данные: двухголовая машина 2xPIII 450MHz, чё-то около 512RAM, пара SCSI-дисков - под сиcтему и под раздел /usr, FreeBSD6.1. После вдумчивого прочтения "man jail", где кстати, всё расписано, для своего удобства, стругаем такой скриптик:
/usr/home/lissyara/jail/>cat jail_create.sh #!/bin/sh
# скрипт создания клеток
case "$2" in create) # стругаем клетку jail_dir="$1" mkdir -p ${jail_dir} cd /usr/src mkdir -p ${jail_dir} make world DESTDIR=${jail_dir} cd /usr/src/etc make distribution DESTDIR=${jail_dir} mount_devfs devfs ${jail_dir}/dev
;; *) echo "" echo "Usage: `basename $0` { /path/to/jail/directory create }" echo "" exit 64 ;; esac
| Ну и запускаем его:
/usr/home/lissyara/jail/> /usr/home/lissyara/jail/>./jail_create.sh /usr/local/jails/jail_test create
/usr/home/lissyara/jail/>./jail_create.sh /usr/local/jails/jail_test create -------------------------------------------------------------- >>> make world started on Wed Aug 9 12:58:26 MSD 2006 --------------------------------------------------------------
-------------------------------------------------------------- >>> Rebuilding the temporary build tree --------------------------------------------------------------
| Понеслась.
Пока он собирает мир, готовимся - надо на родительской машине
(реальной) завести альясы для клеток - у каждой клетки должен быть свой
IP адрес. Добавляем в /etc/rc.conf такие строки:
# IP реальной машины ifconfig_ed0="inet 192.168.0.200 netmask 255.255.255.0" # альяс для первого jail`a ifconfig_ed0_alias0="inet 192.168.0.201 netmask 255.255.255.0" # альяс для второго jail`a ifconfig_ed0_alias1="inet 192.168.0.202 netmask 255.255.255.0"
| Заставляем работать sshd на одном адресе:
/usr/home/lissyara/>cat /etc/ssh/sshd_config | grep ListenAddress ListenAddress 192.168.0.200 #ListenAddress :: /usr/home/lissyara/>
| Вешаем syslogd на тот же адрес:
/usr/home/lissyara/>cat /etc/rc.conf | grep syslo syslogd_flags="-b 192.168.0.200" /usr/home/lissyara/>
| После
чего, если мир дособирался и проинсталлился (у меня ушло часа
три-четыре), перезагружаем машину - можно и без перезагрузки, но с ней
надёжней - вылезут все возможные ошибки. До перезагрузки у меня было
так:
/usr/home/lissyara/>sockstat | grep "*." root inetd 494 5 tcp4 *:21 *:* root sendmail 451 3 tcp4 127.0.0.1:25 *:* root sshd 445 3 tcp4 *:22 *:* root syslogd 325 6 udp4 *:514 *:* /usr/home/lissyara/>
| Ну а после стало так:
/usr/home/lissyara/>sockstat | grep "*." root inetd 462 5 tcp4 192.168.0.200:21 *:* root sendmail 417 3 tcp4 127.0.0.1:25 *:* root sshd 411 3 tcp4 192.168.0.200:22 *:* root syslogd 291 6 udp4 192.168.0.200:514 *:* /usr/home/lissyara/>
| Проверяем, все ли альясы подцепились:
/usr/home/lissyara/>ifconfig plip0: flags=108810<POINTOPOINT,SIMPLEX,MULTICAST,NEEDSGIANT> mtu 1500 ed0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 inet 192.168.0.200 netmask 0xffffff00 broadcast 192.168.0.255 inet 192.168.0.201 netmask 0xffffff00 broadcast 192.168.0.255 inet 192.168.0.202 netmask 0xffffff00 broadcast 192.168.0.255 ether 00:80:c8:24:a5:d2 lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384 inet 127.0.0.1 netmask 0xff000000
| Создаём в клетке пусой файл /etc/fstab
/usr/home/lissyara/>touch /usr/local/jails/jail_test/etc/fstab
| Создаём в ней файл /usr/local/jails/jail_test/etc/resolv.conf такого содержания:
Добавляем в файл /usr/local/jails/jail_test/etc/rc.conf такие строки (если там нужны эти демоны)
sshd_enable="YES" inetd_enable="YES"
| Затем на родительской машине добавляем такие строки в /etc/rc.conf
# запускать ли клетки jail_enable="YES" # список имён jail`ов разделённый пробелами, типа # jail_list="test tets1 test2 test3" jail_list="test" # Разрешить руту в клетке изменять её имя хоста jail_set_hostname_allow="YES" # дальше настроки специфичные для кажой клетки # корневая директория клетки `test` jail_test_rootdir="/usr/local/jails/jail_test" # имя хоста для клетки `test` jail_test_hostname="test-jail.local" # IP-адрес клетки `test` jail_test_ip="192.168.0.201" # Монтировать devfs в клетке `test` jail_test_devfs_enable="YES" # монтировать procfs в клетке `test` jail_test_procfs_enable="YES" # Флаги для клетки `test` jail_test_flags="-l -U root"
| Затем заводим пользователя и даём руту в клетке пароль, для этого входим в клетку:
/usr/home/lissyara/>jail /usr/local/jails/jail_test/ test 192.168.0.201 /bin/csh
| И заводим пользователя командой useradd. Не забываем задать пароль для рута. Выходим из клетки командой exit, и можно запускать:
/usr/home/lissyara/>/etc/rc.d/jail start Configuring jails:. Starting jails: test-jail.local. /usr/home/lissyara/>
| Запуск
может занять много времени (минут 5), т.к. sshd генерит ключи.
Последующие запуски будут гораздо быстрей. Для ускорения, можно положить
свои ключи, с реального хоста.
C клеткой можно работать точно также как и с реальной машиной -
ставить приложения, запускать. Едиственое что - на -реальной машине, при
установке любых приложений нужно не забывать вешать их на тот IP адрес
который ей принадлеит - большинство приложений по дефолту слушают все
адреса. Работает всё точно также шустро как и на реальной машине.
Ссылка на обсуждение: http://forum.lissyara.su/viewtopic.php?t=7122.
размещено: 2006-08-10,
последнее обновление: 2007-01-17,
автор: lissyara
|