Дмитрий DarkByte Москин

Мой блог, да.
logo

FreeBSD - настройка клеток

Опубликовано 19.10.2011 автором Дмитрий Москин
Появилась задача, требующая дать стороннему пользователю полный доступ к системе, при этом не позволить пользователю нарушить целостность системы. По виндовой привычке обратил внимание на эмуляторы, но, не подобрав ничего подходящего, решил найти другой способ и неожиданно вспомнил о клетках.

Клетки (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 на основной системе.

Наверное на этом можно закончить инструкцию, остальные настройки выполняются по вкусу :)