FreeBSD jail по-быстрому
Итак, как следует из названия, сейчас мы будем в ускоренном темпе поднимать jail на FreeBSD 7.2. Почему в ускоренном? В сети есть масса статей на эту тему, там все разжевывается достаточно подробно и, как правило, с кучей лишних действий, которые в современной системе уже не обязательны. Потому мы обойдемся без лишних движений и сделаем так, чтоб все работало. Итак, начнем с обновления системных исходников:
# pkg_add -r cvsup-without-gui # ee /usr/share/examples/cvsup/stable-supfile
Правим *default host=CHANGE_THIS.FreeBSD.org на хост, который нам подходит, в моем случае это ftp6.ua.freebsd.org. Потом подготовим структуру каталогов для джейла (мой джейл будет носить гордое имя mon) и запускаем сам процесс обновления:
# mkdir -p /usr/local/jails/mon # cvsup -g -L 2 /usr/share/examples/cvsup/stable-supfile
Пока он идет, добавим несколько строк в файл /etc/rc.conf :
# Говорим syslogd не логгировать ничего из сети, чтоб не мешать логи в кучу syslogd_flags="-ss" # Общие настройки для всех джейлов jail_enable="YES" jail_devfs_enable="YES" jail_procfs_enable="YES" # Тут список джейлов, которые надо запускать при старте системы, указываются через пробел jail_list="mon" # Интерфейс, на который система повесит алиасы для джейлов, на самих интерфейсах прописывать ничего не надо jail_interface="lo0" jail_exec_start="/bin/sh /etc/rc" jail_exec_stop="/bin/sh /etc/rc.shutdown" # Настройки для джейла mon jail_mon_rootdir="/usr/local/jails/mon" jail_mon_hostname="mon.jared.kiev.ua" jail_mon_ip="192.168.10.1"
Заодно поправим /etc/ssh/sshd_config, чтоб при попытке попасть по SSH в джейл мы не попадали на хост-машину:
ListenAddress 192.168.23.1
Теперь, когда исходники обновили, можем собирать всю конструкцию воедино:
# cd /usr/src # make buildworld # make installworld DESTDIR=/usr/local/jails/mon # cd /usr/src/etc # make distribution DESTDIR=/usr/local/jails/mon
Все, взлетаем и проверяем наличие нашего джейла:
# /etc/rc.d/jail start Configuring jails:. Starting jails: mon.jared.kiev.ua. # jls JID IP Address Hostname Path 1 192.168.10.1 mon.jared.kiev.ua /usr/local/jails/mon
Теперь, набрав на хост-машине jexec 1 tcsh, мы запустим в джейле с JID 1 оболочку tcsh и окажемся внутри нашей виртуальной машины.
Полезные sysctl-переменные для джейлов:
security.jail.set_hostname_allowed — если 1, то внутри jail можно поменять имя хоста;
security.jail.socket_unixiproute_only — если 1 , то сокет в jail можно создать только для доменов PF_LOCAL, PF_INET или PF_ROUTE, иначе, возвращается ошибка;
security.jail.sysvipc_allowed — если 1, то то в jail можно получить доступ к глобальному System V IPC;
security.jail.getfsstatroot_only — если 1, то в jail можно получить информацию (df)только о той файловой системе на которой создан jail;
security.jail.allow_raw_sockets — если 1, то в jail можно создавать raw sockets;
security.jail.chflags_allow — если 1, то процессы в jail могут модифицировать флаги ФС.
Там правим *default host=CHANGE_THIS.FreeBSD.org на хост, который нам подходит, в моем случае это был ftp2.ua.freebsd.org. # cvsup -g -L 2 /usr/share/examples/cvsup/stable-supfile