freebsd ezjail

Дата | 26.07.2015

Хочу поделится информацией по простой и не сильно требовательной к ресурсам сервера виртуализации, но и в то же время мощной и гибкой.
Для виртуализации jail я использую как бы обертку ezjail, основано система команд chroot, устанавливает для процессов корневую директорию, создает безопасное окружение.
Процессы работают в ограниченном режиме и не могут получить доступ к файлам, и ресурсам находящимися за пределами своей системы, то-есть из jail перейти на основной (ведомый сервер) не возможно!

# cd /usr/ports/sysutils/ezjail/ && make install clean

Добавим авто загрузку сервису.

# nano /etc/rc.conf
ezjail_enable="YES"

Запустим сервис ezjail.

# /usr/local/etc/rc.d/ezjail start

Создадим окружение jail, с которого и будут создаваться клетки (jail).

# /usr/local/bin/ezjail-admin update -i -p
  • ключ i означает не компилировать мир специально для джайла, а взять его из основной системы.
  • ключ p означает в каждый джаил вложить дерево портов, я отказываюсь от этого, в каждой клетки свои порты и свой софт.

Если вы ни когда не запускали make world в системе, то запустите пересборку мира, либо можно скачать уже готовый образ системы для вашей клетки.

# /usr/local/bin/ezjail-admin install

перечислю ключи.

  • m Установит систему с манами.
  • M Добавит и установит Man-страницы, без (пере)установки базовой тюрьму. Может использоваться для добавления к Man-страницам
    на базы тюрьмы после первоначальной установки.
  • s Установит исходники мира и ядра.
  • S Скачает и установит источников, без (пере)установки базовой тюрьмы.
  • p Положит в систему дерево портов.
  • P Добавит свежие порты без (пере)установки базовой системы.
  • h Что-то с удаленным хостом, я ей не когда не пользовался.

Создаем впс сервер.

# /usr/local/bin/ezjail-admin create -r /usr/old_jails/имя_сервера имя_сервера_на_латинице ип_адрес_сервера

Просмотр списка впс серверов(джайлов).

# jls
   JID  IP Address      Hostname                      Path
     1  ип_адрес_сервера  имя_сервера                    /usr/jails/имя_сервера

Что бы войти в джаил есть два способа, по ип и имени:

По номеру JID 1
# jexec 1 csh
По имени.
# ezjail-admin console название_клетки(джайла)

Создания копии (бэкапа) впски.

# /usr/local/bin/ezjail-admin archive -d Где_будит_лежать_копия -f имя_сервера

Восстановить из архива.

# /usr/local/bin/ezjail-admin create -a /mnt/backup/название_копии.tar.gz -r /usr/куда_восстанавливать/название_сервера название_сервера ип_адрес_сервера

Или, если восстанавливаем на этом же сервере на котором и бэкапили, то делаем так:

# /usr/local/bin/ezjail-admin restore -d /usr/куда_восстанавливать/ название_джайла(впски)

Ип адрес добавиться сам, так-как конфигурационный файл у вас должен быть лежать тут /usr/local/etc/ezjail/
Если нам понадобиться распаковать впску не восстанавливая ее.

$ gunzip VPS-201611140130.46.tar.gz

Далее

cpio -i -F VPS-201611140130.46.tar

Удалем впску.

# /usr/local/bin/ezjail-admin delete название_впски

Если мы хотим удалить впску полностью, вместе с конфигурационным файлом то:

# /usr/local/bin/ezjail-admin delete -w название_впски

У меня как то возник косяк с удалением клетки, не корректно изначально удалил и остались остатки от впски, решил удалить, но не тут то было.
Просто так не удалиш, к файлам клетки добавлен специальный ключ.
Снимаем ключ.

# chflags -R 0 /usr/jails/jail/название_впски

И после удаляем уже по простому rm -rf
Можно выставить ограничение для джайлов.
Сперва добавим в ядро поддержку этих ограничений.

# Jail
options         RACCT
options         RCTL

После нужно будит пересобрать ядро.
Проверяем правила ограничений, по началу пусто.

# /usr/bin/rctl ; echo $?
0

Много параметров, все не буду перечислять, я обычно использую ограничение по памяти, жесткий диск и процессор не ограничиваю.
Запрещаем джайлу с JID 14 использовать больше 3Гиг памяти.

# rctl -a jail:14:memoryuse:deny=3g

Запрещаем пользователю bagas использовать больше 2гиг памяти сервера.

# rctl -a user:bagas:vmemoryuse:deny=2g

Что бы правила после перезагрузки ведомого сервера не пропали, то поместим их в файл.

# /usr/bin/rctl ; echo $? > /etc/rctl.conf

Если правила созданые не нужны или они мешают, то можно их удалить.

# rctl -r

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *