среда, 2 марта 2011 г.

Работа с FreeBSD Jail

Установка jail окружения.

# mkdir -p /jails/jail_dir
# cd /usr/src
# make world DESTDIR=/jails/jail_dir
# make distribution DESTDIR=/jails/jail_dir
# mkdir -p /jails/jail_dir/dev
# mount -t devfs devfs /jails/jail_dir/dev/ (или mount_devfs devfs /jails/jail_dir/dev/)
# mount -t procfs proc /jails/jail_dir/proc
Подключаемся к jail, задаем пароль для суперпользователя, создаем пользователя.

# jail /jails/jail_dir [jail_hostname] [jail_ip] /bin/sh
# passwd root
# adduser
# touch /etc/fstab
# mkdir /usr/ports
# echo "sshd_enable=YES" >> /etc/rc.conf
Создаем псевдонимы для сетевого интерфейса.

# ifconfig xl0 inet alias 192.168.0.1/32
# ifconfig xl0 inet alias 192.168.0.2/32
Редактируем /etc/rc.conf.

ifconfig_xl0="inet 192.168.0.254  netmask 255.255.255.0"
#
ifconfig_xl0_alias0="inet 192.168.0.1  netmask 255.255.255.0"
ifconfig_xl0_alias1="inet 192.168.0.2  netmask 255.255.255.0"
#
# ### jails ###
jail_enable="YES"
jail_list="jail1 jail2"
#
jail_jail1_rootdir="jail1_dir"
jail_jail1_hostname="jail1.domain"
jail_jail1_ip="192.168.0.1"
jail_jail1_interface="sk0"
jail_jail1_devfs_enable="YES"
jail_jail1_mount_enable="YES"
jail_sysvipc_allow="YES"
#
jail_jail2_rootdir="jail2_dir"
jail_jail2_hostname="jail2.domain"
jail_jail2_ip="192.168.0.2"
jail_jail2_interface="sk0"
jail_jail2_devfs_enable="YES"
jail_jail2_mount_enable="YES"
jail_sysvipc_allow="YES"
# ### jails ###


Основные команды для управления jail.
Посмотреть список запущенных jail:
jls
Подключиться к одному из них:
jexec [JID] sh
Для перезагрузки/выключения выполняем:
# /etc/rc.d/jail [jailname] restart
# /etc/rc.d/jail [jailname] stop
Usage: /etc/rc.d/jail [fast|force|one](start|stop|restart|rcvar)

Обновление jail.
После обновления основной системы проделываем следующее:

# cd /usr/src
# make installworld DESTDIR=/jails/jail_dir
# mergemaster -D /jails/jail_dir

Удаление каталога jail.
Нужно изменить флаги для каталога:
# chflags -R noschg /jails/jail_dir
После этого можно удалить:
# rm -rf /jails/jail_dir