Клетки буду создавать в в /usr/jails/
mkdir -p /usr/jails/jail_1 mkdir -p /usr/jails/jail_2 mkdir -p /usr/jails/jail_3
Проверяю, что исходный код актуальный
svnlite info /usr/src Path: /usr/src Working Copy Root Path: /usr/src URL: https://svn.freebsd.org/base/releng/12.0 Relative URL: ^/releng/12.0 Repository Root: https://svn.freebsd.org/base Repository UUID: ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f Revision: 354569 Node Kind: directory Schedule: normal Last Changed Author: gordon Last Changed Rev: 353915 Last Changed Date: 2019-10-23 06:25:32 +0300 (ср, 23 окт. 2019)
Если всё в порядке, обновляю исходники и перехожу в каталог с исходниками
svnlite update /usr/src cd /usr/src
если исходников системы нет ( каталог /usr/src пустой) или при проверке получаю ошибку
svnlite info /usr/src svn: E155007: '/usr/src' is not a working copy
устанавливаю исходники. Для этого определяю какая версия FreeBSD используется
uname -r 12.0-RELEASE-p10
Удаляю из каталога /usr/src/ старые файлы
rm -rf /usr/src/*
Получаю источники
svnlite checkout https://svn.freebsd.org/base/releng/12.0 /usr/src
Создаю клетку
cd /usr/src make world DESTDIR=/usr/jails/jail_1 ??? проверить эту командуcd /usr/src/etc make distribution DESTDIR=/usr/jails/jail_1 mount -t devfs devfs /usr/jails/jail_1/dev
Настройка /etc/rc.conf корневого сервера.
syslogd_flags="-ss" # отключение прослушивания демоном syslogd сетевого интерфейса inetd_flags="-wW -a 10.215.130.183" ifconfig_alc0_alias0="10.215.130.20/24" # алиас на устройство lo0 для jail_1 ifconfig_alc0_alias1="10.215.130.21/24" # алиас на устройство lo0 для jail_2 jail_enable="YES" # запуск клеток разрешен jail_list="jail_1 jail_2" # список клеток запускаемых автоматически
Настройка клеток. Создаю файл конфигурации клеток:
ee /etc/jail.conf
cat /etc/jail.conf exec.start = "/bin/sh /etc/rc"; # Команда запуска exec.stop = "/bin/sh /etc/rc.shutdown"; # Команда остановки exec.clean; allow.raw_sockets = 1; allow.set_hostname = 0; allow.sysvipc = 1; # allow.mount = TRUE; # allow.mount.nullfs = TRUE; # allow.mount.tmpfs = TRUE; mount.devfs; #разрешить монтировать devfs к файловой системе клеток <del> mount += "dev /usr/jails/jail_1/dev devfs rw,ruleset=$devfs_ruleset";</del> mount.procfs; jail_1 { host.hostname = "jail_1"; #имя клетки path = "/usr/jails/jail_1"; #путь до клетки interface = "alc0"; #интерфейс клетки ip4.addr = 10.215.130.25/32; #IP адрес клеки devfs_ruleset = 6; #какое правило нужно применить при монтирование devfs } jail_2 { host.hostname = "jail_2"; path = "/usr/jails/jail_2"; interface = "alc0"; ip4.addr = 10.215.130.21/32; }
Добавляю алиас
ifconfig bge0 alias 10.215.130.25 netmask 255.255.255.255
Для запуска всех jail'ов вручную:
service jail start
или
/etc/rc.d/jail start
Для запуска конкретного jail'а (например jail_1):
service jail start jail_1
Посмотреть список запущеных jail'ов:
jls JID IP Address Hostname Path 1 10.215.130.21 jail_2 /usr/jails/jail_2
Остановить jail:
service jail stop jail_1
Перезагрузить выбранный jail:
service jail restart jail_1
В вновь созданный Jail по ssh подключиться пока нету возможности, так-как ssh отключен. Для подключения к jail выполняю:
jexec jail_1
Подключиться к консоли jail'а (нужно указать номер выбранного jail'а из списка jls):
jexec 1
или, подключиться под конкретным пользователем jail'а:
jexec 1 -u jailuser
1. Добавляю DNS сервера:
ee /etc/resolv.conf nameserver 10.215.130.1 cat /etc/resolv.conf nameserver 10.215.130.1
2. Добавляю пользователя и включаю в группу wheel
adduser
3. Запускаю sshd
sysrc sshd_enable="YES" service sshd start
4. Устанавливаю пароль руту
passwd root
5. Отключаю настройку сетевых интерфейсов (они виртуальные)
sysrc network_interfaces=""
6. Настраиваю временную зону
tzsetup
7. Создаю пустой файл fstab, чтобы скрипты инициализации не сообщали о его отсутствии
touch /etc/fstab
8. В rc.conf добавляю строки
sysrc sendmail_enable="NO" sysrc syslogd_flags="-ss"
Для удобства установки пакетов также можно примонтировать папку ports корневой системы во внутрь jail. Для этого на корневом сервере нужно выполнить следующую команду:
mkdir /usr/jails/jail_1/usr/ports mount_nullfs /usr/ports /usr/jails/jail_1/usr/ports
и добавляю в /etc/fstab корневой машины
/usr/ports /usr/jails/jail_1/usr/ports nullfs rw 0 0
Для создания нескольких клеток делаю:
cd /usr/jails/jail_1 tar -zcvpf jail.tar * cp jail.tar /usr/jails/jail_2 cp jail.tar /usr/jails/jail_3 cd /usr/jails/jail_2 tar -zxvpf jail.tar cd /usr/jails/jail_3 tar -zxvpf jail.tar
Для удаления клетки, убираю со всех файлов «флаг» «неизменяемости»:
chflags -R noschg /jails rm -rf /jails/
Для того что бы правила монтирования devfs применялись к клеткам в rc.conf должна быть строка
devfs_load_rulesets="YES"
Основные настройки devfs находятся в /etc/defaults/devfs.rules/, но все изменения нужно вносить в /etc/devfs.rules.
После внесения изменений в файл /etc/devfs.rules необходимо выполнить команду
service devfs restart
Пример записи
[devfsrules_jail_3=6] add include 1 add include 2 add path 'cuau*' unhide
Данное правило даёт доступ с com портам из клетки.
Проверка какие правила devfs применяются для jail
sysctl security.jail.devfs_ruleset
sysctl security.jail.sysvipc_allowed
devfs -m /path/to/jail/dev rule showsets
devfs rule -s 4 show
Ссылки:
https://alexei.bakush.ru/nastroika-jail-vo-freebsd
http://linux-bsd-adm.blogspot.com/2014/10/jail-freebsd-10.html
http://linux-bsd-adm.blogspot.com/2014/10/freebsd.html
https://translate.google.ru/translate?hl=ru&sl=en&u=https://www.freebsd.org/doc/handbook/jails-build.html&prev=search
https://wiki.lissyara.su/wiki/FreeBSD_%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%9F%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F:_%D0%93%D0%BB%D0%B0%D0%B2%D0%B0_15_Jails_(%D0%9A%D0%BB%D0%B5%D1%82%D0%BA%D0%B8)
http://www.ignix.ru/book/freebsd/setup/jail
http://www.linuxshop.ru/articles/a241-installing_and_configuring_virtual_servers_jail
https://ru.bmstu.wiki/FreeBSD_Jail
https://xakep.ru/2009/05/22/48311
https://www.lissyara.su/articles/freebsd/tuning/jail
https://habr.com/post/342312
https://www.opennet.ru/tips/1546_freebsd_chroot_jail.shtml
http://devpit.org/wiki/FreeBSD/Jails
http://qaru.site/questions/3213328/freebsd-jail-and-ssh-devtty-no-such-file-or-directory
https://www.freebsd.org/cgi/man.cgi?query=jail&sektion=8&manpath=freebsd-release-ports
https://www.freebsd.org/doc/handbook/makeworld.html#updating-src-obtaining-src
https://www.freebsd.org/doc/handbook/makeworld.html
https://www.cyberciti.biz/faq/how-to-configure-a-freebsd-jail-with-vnet-and-zfs
https://www.cyberciti.biz/faq/update-source-tree-at-usr-src-using-svn-on-freebsd
http://freebsdlog.blogspot.com/2012/06/jail.html
https://www.opennet.ru/openforum/vsluhforumID1/85891.html
https://books.google.ru/books?id=6LQYEAAAQBAJ&pg=PA83&lpg=PA83&dq=devfs+rule+-s+4+show&source=bl&ots=bgGIi0NU4I&sig=ACfU3U0PsJGzfERND0WhoqiUAPT9r002fw&hl=ru&sa=X&ved=2ahUKEwijnM_17ZD0AhWHAxAIHRDTAKQQ6AF6BAgVEAM#v=onepage&q=devfs%20rule%20-s%204%20show&f=false