====== Настройка jail во FreeBSD ====== Клетки буду создавать в в /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 к файловой системе клеток mount += "dev /usr/jails/jail_1/dev devfs rw,ruleset=$devfs_ruleset"; 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