вторник, 28 октября 2014 г.

Система в клетке: FreeBSD 9.2 & Jail

Понадобилось сделать для клиента хостинг, при чем не простоо сайт разместить, а чтобы почти отдельный сервер, не вопрос, замечательный повод разобраться с Jail.

Для начала надо пересобрать ядро со следующими опциями: 


options RACCT
options RCTL

Это требуется, чтобы иметь возможность нарезать ресурсы для клеток.
Дальше ман советует следующий порядок действий:

setenv D /path/to/jail/
mkdir -p $D (1)
cd /usr/src
make buildworld (2)
make installworld DESTDIR=$D (3)
make distribution DESTDIR=$D (4)
mount -t devfs devfs $D/dev (5)

(1) - выбор места куда будет устанавливаться клетка
(2) Если есть собранный мир можно использовать его, если нет - собираем
(3) Установка мира в директорию клетки
(4) Установка всех необходимых конфигурационных файлов в директорию клетки
(5) Монтирование файловой системы devfs(8) внутри клетки. Шаг вполне опциональный.

Для автоматизации запуска клеток вместе с хост-системой следует добавить в rc.conf следующее:

jail_enable = "YES"    # Установите в NO для отключения запуска любой  клетки
jail_list = "www"      # список разделенных пробелами имен клеток

После чего для каждой клетки надо описать следующие необходимые параметры:

jail_www_rootdir="/usr/jail/www"     # корневая директория для клетки
jail_www_hostname="www.example.org"  # имя хоста клетки
jail_www_ip="192.168.1.1"           # IP адрес клетки
jail_www_devfs_enable="YES"          # разрешить монтировать devfs к файловой системе клетки

Сетевой адрес который мы назначаем для клетки следует прописать алиасом на интерфейсе хост-машины или настроить проброс портов.

Далее следует сделать небольшую настройку самой клеточной системы, для чего подключаемся к ней:

jail /usr/jail/www www.jail 192.168.1.1 /bin/sh

И выполняем следующий пункты:
Создаем пустой fstab
touch /etc/fstab
Устанавливаем пароль рута -
passwd root
Создаем файл /etc/resolv.conf  куда вписываем наши днс-имена.

Редактируем /etc/rc.conf
hostname="www.jail"
network_interfaces=""
sshd_enable="YES"

Интерфейсы конфигурировать не надо, главное чтобы была правильно выполнена настройка на хост-машине.

Для возможности установки портов из-под клетки надо примонтировать директорию с портами:
mount_unionfs /usr/ports /usr/jail/www/usr/ports

Полезным будет установить порт jailutils
cd /usr/ports/sysutils/jailutils/
make install clean

Для работы с клетками используются следующий команды
/etc/rc.d/jail start - запуск всех клеток
/etc.rc.d/jail stop - остановка всех клеток
/etc/rc.d/jail start www - запуск клетки www
jls - список запущенных клеток
jails - менее информативный вариант запущенных клеток

Для тонкой настройки работы jail в sysctl есть целая ветка, для просмотра
sysctl -a | grep jail

К примеру:

sysctl security.jail.allow_raw_sockets=1 # чтобы для клетки стал доступен пинг

!Внимание!
Чтобы в клетке работали сетевые сервисы - такие какие ssh, apache и тд, следует на хост-машине жестко прописать интерфейсы на которых обрабатывать запросы тех или иных сетевых служб, так же сделать и в клетке. В противном случае запросы из-вне будет стараться обработать хост-машина.

Комментариев нет:

Отправить комментарий