FreeBSD - настройка клеток
Появилась задача, требующая дать стороннему пользователю полный доступ к системе, при этом не позволить пользователю нарушить целостность системы. По виндовой привычке обратил внимание на эмуляторы, но, не подобрав ничего подходящего, решил найти другой способ и неожиданно вспомнил о клетках.
Клетки (jails) во FreeBSD - это своего рода песочницы, работа которых базируется на системном вызове chroot, но кроме того, существенно ограничиваются права суперпользователя. Например, запрещается загружать модули ядра, ровно как и изменять ядро, монтировать и демонтировать файловые системы и другое, о чём можно прочитать в справке.
Основная система:
Выполним необходимые сетевые настройки.
Адрес сервера на интерфейсе sk0 - 192.168.1.1
Для настройки решёток будем использовать ezjail
Шаблон для решётки можно собрать из исходников, но это долго. Значительно быстрее скачать готовый
Создаём новую систему в решётке с именем jail1 и сетевым адресом 192.168.1.2
Для управления решётками используется скрипт
Запускаем все созданные решётки (первый раз придётся подождать)
Посмотреть список решёток можно командой
Для подключения к решёткам используем команду
Где jid - идентификатор решётки, который можно получить из вывода jls, csh - используемым shell
Подключаемся к запущенной решётке и устанавливаем всё необходимое
Возможно понадобится прописать DNS сервер в /etc/resolv.conf в клетке, либо в файл /usr/jails/jail1/etc/resolv.conf на основной системе.
Наверное на этом можно закончить инструкцию, остальные настройки выполняются по вкусу :)
Клетки (jails) во FreeBSD - это своего рода песочницы, работа которых базируется на системном вызове chroot, но кроме того, существенно ограничиваются права суперпользователя. Например, запрещается загружать модули ядра, ровно как и изменять ядро, монтировать и демонтировать файловые системы и другое, о чём можно прочитать в справке.
Основная система:
uname -or
FreeBSD 8.2-RELEASE
Выполним необходимые сетевые настройки.
Адрес сервера на интерфейсе sk0 - 192.168.1.1
ifconfig sk0 inet 192.168.1.2 netmask 255.255.255.0 alias
echo 'ifconfig_sk0_alias0="inet 192.168.1.2 netmask 255.255.255.0"' >> /etc/rc.conf
Для настройки решёток будем использовать ezjail
cd /usr/ports/sysutils/ezjail
make install clean
echo 'ezjail_enable="YES"' >> /etc/rc.conf
Шаблон для решётки можно собрать из исходников, но это долго. Значительно быстрее скачать готовый
ezjail-admin install
Создаём новую систему в решётке с именем jail1 и сетевым адресом 192.168.1.2
mkdir -p /usr/jails/jail1
ezjail-admin create -r /usr/jails/jail1 jail1 192.168.1.2
Для управления решётками используется скрипт
/usr/local/etc/rc.d/ezjail.sh [start/stop/restart] jail_name
Запускаем все созданные решётки (первый раз придётся подождать)
/usr/local/etc/rc.d/ezjail.sh start
Посмотреть список решёток можно командой
jls
Для подключения к решёткам используем команду
jexec jid csh
Где jid - идентификатор решётки, который можно получить из вывода jls, csh - используемым shell
Подключаемся к запущенной решётке и устанавливаем всё необходимое
jexec 1 csh
jail1# pkg_add -r bash
Возможно понадобится прописать DNS сервер в /etc/resolv.conf в клетке, либо в файл /usr/jails/jail1/etc/resolv.conf на основной системе.
Наверное на этом можно закончить инструкцию, остальные настройки выполняются по вкусу :)