Создание клетки Jail FreeBSD

| 14.10.2013

Для начала сделаем следующее:

1.  # setenv D /usr/home/jails/test.local

2.  # mkdir -p $D

3.  # cd /usr/src

4.  # make buildworld

5.  # make installworld DESTDIR=$D

6.  # make distribution DESTDIR=$D

7.  # mount -t devfs devfs $D/dev

1. Укажем переменную имени к окружению.
2. Создадим домашнюю директорию по переменной.
5. Заполним каталог поддерева необходимыми двоичными файлами, библиотеками, справочниками и так далее.
6. Установим все необходимые файлы из /usr/src/etc/ и /etc в каталог клетки $D/etc/.

Добавляем в rc.conf

Значения для клеток

jail_enable="YES"             # Включаем jail

jail_interface="re0"          # Сетевой интерфейс

jail_devfs_enable="YES"       # Монтируем devfs в клетках

jail_procfs_enable="YES"      # Монтируем procfs в клетках

jail_set_hostname_allow="YES"

Список клеток

jail_list="test"  Имя клеток через пробел

Значения для клетки "test"

jail_test_rootdir="/usr/home/jails/test.local"  Рутовая директория jail

jail_test_hostname="test.local"  Имя хоста клетки

jail_test_ip="192.168.64.78"     IP адрес хоста клетки

#jail_test_interface="re0"       Сетевой интерфейс клетки

#jail_test_devfs_enable="YES"    Монтируем devfs в клетке

#jail_test_procfs_enable="YES"   Монтируем procfs в клетке

jail_test_exec_start="/bin/sh /etc/rc"

jail_test_exec_stop="/bin/sh /etc/rc.shutdown"

jail_test_flags="-l -U root"     Необходимые флаги для клетки

Конфигурация сети

Необходимо создать сетевые алиасы для ваших клеток. Они нужны, чтобы клетки могли корректно работать в сети. Алиасы создаются на материнской системе:

# cat /etc/rc.conf |grep if

ifconfig_re0="inet 192.168.64.77  netmask 255.255.255.0"

Добавляем Алиас для первой клетки в rc.conf

ifconfig_re0_alias0="inet 192.168.64.78 netmask 255.255.255.255"

Для запуска всех клеток используйте:

# /etc/rc.d/jail start

# /etc/rc.d/jail stop

Для запуска необходимой клетки используйте ее имя:

# /etc/rc.d/jail start test

# /etc/rc.d/jail stop test

Выведем список работающих клеток:

# jls

   JID  IP Address      Hostname                      Path

   1  192.168.64.78     test.local               /usr/home/jails/test.local

Зайдем в первую клетку:

# jexec 1 tcsh

test#

Все готово, Вы можете настроить клетку как вам угодно и приступить к установке нужных пакетов.

Дополнительные настройки

Окружение FSTAB

Создадим в клетке пустой файл /etc/fstab, чтобы при ее запуске не появлялось сообщение об отсутствующем файле fstab.

# touch /home/jails/test.local/etc/fstab

PORT MAPPER

Выключите в клетке port mapper.

# ee /home/jails/test.local/etc/rc.conf

rpcbind_enable="NO"

RESOLV

Настроим resolv.conf так, чтобы разрешение имен в клетке работало правильно. Создадим в клетке файл с нужным DNS сервером или скопируем с основной машины в клетку.

# ee /home/jails/test.local/etc/resolv.conf

nameserver 192.168.64.83

SENDMAIL

Запустим в клетке newaliases, чтобы при запуске не появлялось сообщение от sendmail.

test# /etc/mail/ && newaliases

IFCONFIG

Отключим сетевой конфигурационный интерфейс, чтобы при запуске не появлялось сообщение от ifconfig.

# ee /home/jails/test.local/etc/rc.conf

network_interfaces = ""

Пароли

Обязательно измените пароль root в клетке (сделайте отличным от основной машины).

Создадим нового пользователя. Для этого есть штатная утилита jexec с помощью нее мы добавим

# jexec 1 adduser

Username: Kolyan

Full name: Kolyan

Uid (Leave empty for default):

Login group [Kolyan]:

Login group is Kolyan. Invite Kolyan into other groups? []: wheel

Login class [default]:

Shell (sh csh tcsh nologin) [sh]: csh

Home directory [/home/Kolyan]:

Home directory permissions (Leave empty for default):

Use password-based authentication? [yes]:

Use an empty password? (yes/no) [no]:

Use a random password? (yes/no) [no]:

Enter password:

Enter password again:

Lock out the account after creation? [no]:

Username   : Kolyan

Password   : *****

Full Name  : Kolyan

Uid        : 1003

Class      :

Groups     : Kolyan wheel

Home       : /home/Kolyan

Home Mode  :

Shell      : /bin/csh

Locked     : no

OK? (yes/no): yes

adduser: INFO: Successfully added (Kolyan) to the user database.

Add another user? (yes/no): no

Goodbye!

SSH

Для работы с клеткой посредством ssh необходимо настроить демон sshd.
Для этого на основной машине в /etc/ssh/sshd_config укажем нужный для прослушивания IP.

# ee /etc/ssh/sshd_config

#ListenAddress 0.0.0.0

ListenAddress 192.168.64.78

#ListenAddress ::
Перезапустим демон и проверим его работу.

# /etc/rc.d/sshd restart

# sockstat -l |grep sshd

root     sshd       1216  3  tcp4   192.168.64.78:22        *:*

root     sshd       978   3  tcp4   *:22                  *:*

Добавим в конфигурационный файл rc.conf клетки.

# ee /home/jails/test.local/etc/rc.conf

sshd_enable="YES"

Экспорт портов или создание симлинк. Вы можете также скопировать их в нужную директорию или создать симлинк.

# mkdir /home/jails/test.local/usr/ports

# mount_nullfs /usr/ports /home/jails/test.local/usr/ports

# cat /etc/fstab |grep jail

Ограничения:

Вы можете настроить некоторые переменные sysctl в основной системе для настройки работы клеток.

security.jail.set_hostname_allowed: 1 Возможность менять hostname внутри клетки.
security.jail.socket_unixiproute_only: 1 Создавать сокет в клетке можно только для PF_LOCAL, PF_INET или PF_ROUT иначе, возвращается ошибка
security.jail.sysvipc_allowed: 0 Возможность использовать System V IPC
security.jail.enforce_statfs: 2 Возможность видеть клетке все смонтированные устройства
security.jail.allow_raw_sockets: 0 Возможность использования низкоуровневых сокетов (ping и тп)
security.jail.chflags_allowed: 0 Возможность менять системные флаги файлов
security.jail.jailed: 0 # Видеть список запущенных клеток
security.jail.getfsstatroot_only: 1 клетка получает только информацию о ФС, например, возвращается df, для корневой файловой системы.

Для некоторого ограничения ресурсов клетки используйте совместно с ограничениями в /etc/login.conf 🙂

 

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

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

5 × один =

Подтвердите, что Вы не бот — выберите человечка с поднятой рукой: