FreeBSD Руководство Пользователя: Глава 15 Jails (Клетки)

Материал из wiki.lissyara.su
Перейти к: навигация, поиск


www: freebsd.org
Английская верси руководства: Matteo Riondato и Daniel Gerzo

15.1 Краткий обзор

Эта глава представляет объяснение того, что такое jails (дальше по тексту - клетки) во FreeBSD и как их использовать. Клетки иногда называют расширением chroot среды, являются очень мощным инструментом для системных администраторов, но ими могут пользоваться так же продвинутые пользователи.

Прочитав эту главу, вы узнаете:

  • Что такое клетки, и какие задачи они могут выполнять во FreeBSD.
  • Как собрать, запустить и остановить клетку.
  • Основы администрирования клеток, как изнутри, так и за пределами клеток.

Другими источниками полезной информации о клетках являются:

  • Страница руководства man jail(8). Это руководство описывает программу jail - административный инструмент, который может быть использован во FreeBSD для запуска, остановки и контроля клеток.
  • Списки рассылки и их архивы. Архивы FreeBSD, общие вопросы и другие списки рассылки, которые обслуживает почтовый сервер FreeBSD, уже содержат богатый материал описывающий работу с клетками. Приоритет всегда должен быть в поиске по архиву или в случае если вопрос новый отправки его в список рассылки freebsd-questions.

15.2 Определения связанные с клетками

В целях содействия лучшему пониманию частей системы FreeBSD связанные с клетками, их внутренней структурой и как они взаимодействуют с остальной частью FreeBSD, используются следующие термины:

chroot(8) (команда)
Утилита, которая использует системный вызов FreeBSD chroot(2), позволяющая изменить корневой каталог процесса и всех его потомков.
chroot(2) (среда)
Окружение в котором запущено <chroot> приложение. Включает в себя такие ресурсы, как часть файловой системы, которая видна приложению ограниченному <chroot> средой, ID пользователей и групп которые доступны в <chroot> окружении, сетевые интерфейсы и другие межпроцессорные механихмы и т.д.
jail(8) (команда)
Утилита системного администратора которая позволяет запускать процессы в окружении клетки.
хост, хост-система (host - система, процессы, пользователи и т.д.)
ОС на которой запускается и управляется клетка. Хост-система имеет доступ ко всем аппаратным ресурсам и может контролировать процессы как снаружи, так и внутри клеток. Одним из важных отличий хост-системе от клетки является то, что ограничения, которые применяются для процессов суперпользователя внутри клетки, не применяются для процессов хост-системы.
хост-клиент (hosted - система, процессы, пользователи и т.д.)
Процесс, пользователь или другие лица чей доступ к ресурсам ОС FreeBSD ограничен клеткой.

15.3 Введение

Поскольку управление системой является трудной и запутанной задачей, чтобы облегчить жизнь администратору были разработаны много мощных инструментов. Эти инструменты позволяют вам в основном улучшеные и упрощенные способы установки, конфигурации и управления системой. Часть задач, которые выполняет администратор должны работать так чтобы выполнять свою основную задачу и при этом не нарушать безопасность системы.

Одним из инструментов который может быть использован для повышения безопасности системы FreeBSD являются клетки. Клетки были введены в FreeBSD 4.X программистом Poul-Henning Kamp <phk@FreeBSD.org>, но были значительно улучшены во FreeBSD 5.X. Разработка над ними все еще продолжается, повышая их полезность, производительность, надежность и безопасность.

15.3.1 Что такое клетка

BSD-подобные операционные системы имеют chroot(2) с момента выхода версии 4.2BSD. Утилита chroot(8) может быть использована для изменения корневого каталога для набора процессов и создания безопасных условий, таких как отделённую файловую систему от остальной части системы. Процессы, созданные в изолированной среде, не могут получить доступ к файлам и ресурсам за ее пределами. По этой причине уязвимые службы, работающие в изолированной среде не должны позволить злоумышленнику поставить под угрозу всю систему. Chroot(8) является хорошей утилитой для простых задач, которые не требуют большой гибкости или сложных и специфичных функций ОС. С момента создания концепции сhroot было найдено много способов избежать ее ограничений и хотя они и были исправлены в современных версиях ядра FreeBSD, было ясно что сhroot(2) не является идеальным решением.

Это одна из основных причин почему были разработаны клетки.

Клетки были основаны на концепции традиционной среды окружения chroot(2). В традиционной chroot(2) среде процессы ограничены лишь в той части файловой системы к которой они могли получить доступ. Фактически единственным ресурсом который ограничивался средой chroot(2) была файловая система. Остальная часть системных ресурсов (например множество пользователей системы, запущенные процессы или сетевая подсистема) являются общими для изолированного процесса и процессов хост-системы. Клетки расширяют эту модель виртуализации, не только ограничивая доступ к файловой системе, а также ограничивая и разделяя множество пользователей, сетевую подсистему ядра FreeBSD и некоторые другие выжные ресурсы хост-системы.

Клетка характеризуется четырьмя свойствами:

  • Поддерево каталогов - отправная точка от которой работает ограничение клетки. Попав в клетку процесс не допускается к остальной файловой системе хоста. Традиционные проблемы, которые снижали уровень безопасности в первоначальном дизайне chroot(2) не актуальны в клетках FreeBSD.
  • Имя хоста - которое будет использоваться внутри клетки. Клетки в основном используются для размещения сетевых сервисов, поэтому назначение имен для ресурсов/сервисов хоста-клиента для каждой клетки может оказать реальную помощь системному администратору.
  • IP адрес - будет назначен клетке и не может быть изменена когда либо в течение жизни клетки (подразумевается время когда клетка запущена и работает). IP адрес клетки, это как правило псевдонимы адресов для существующего сетевого интерфейса.
  • Команда - путь к исполняемому файлу для запуска внутри клетки приложения или процесса. Путь должен быть относительно корневого каталога клетки и может существенно различаться в зависимости от типа конкретной среды клетки.

Наряду с этим, клетки могут иметь свой собственный набор пользователей и их собственного суперпользователя root. Естественно полномочия суперпользователя ограничены в среде окружения клетки и с точки зрения хост-системы пользователь клетки root не всемогущий пользователь. Кроме того пользователю root клетки не разрешается выполнять какие-либо операции в хост-системе за пределами окружающей среды ограниченной клеткой. Более подробную информацию о возможностях и ограничениях суперпользователя будет обсуждаться далее в этом руководстве.

15.4 Создание и управление клетками

Некоторые администраторы делят клетки на следующие два типа: "полные" клетки, задача которых сымитировать реальную ОС FreeBSD и клетки "приложений", предназначенные для обслуживания одного приложения или службы, возможно запущенной с привелегиями суперпользователя. Это только концептуальное разделение и на процесс создания и сборки клетки не влияет. В man руководстве jail(8) совершенно понятно описано как собрать клетку:

# setenv D /here/is/the/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) Выбор места для клетки является лучшей отправной точкой. Это место где будет физически находиться файловая система клетки. Хорошим выбором может быть раздел /usr/jail/jailname, где jailname имя идентфицирующее клетку. Файловая система /usr/... обычно имеет достаточно места для хранения файлов клетки, объем которых для "полной" клетки, может достигать размера оригенальной ОС FreeBSD без прикладного программного обеспечения.
(2) Если вы уже имеете готовый собранный мир ОС FreeBSD, то можно пропустить этот шаг и сразу приступить к установки мира в будующий корневой каталог клетки.
(3) Эта команда будет заполнять подкаталог выбранный в качестве корневого для клетки необходимыми исполняемыми файлами, библиотеками, справочными страницами и т.д.
(4) Команда make distribution необходима для установки всех необходимых конфигурационных файлов. Простыми словами, она устанавливает каждый конфигурационный файл из /usr/src/etc/... в каталог /etc/... клетки, тоесть фактически в каталог $D/etc/... .
(5) Монтирование файловой системы devfs(8) внутри клетки. Этот шаг не обязательный для выполнения т.к. могут быть случаи когда приложению в клетке не нужа будет файловая система devfs(8). С другой стороны, любое или почти любое приложение требует доступ, по меньшей мере к одному устройствоу в зависимости от цели данного приложения. Контроль доступа к устройствам из клетки очень важен, поскольку ненадлежащие настройки могут позволить злоумышленнику делать неприятные вещи как внутри клетки так и с самим устройством. Управлять и контролировать устройства devfs(8) можно с помощью набора правил, которые описаны в man руководствах devfs(8) и devfs.conf(5).

После создания каталогов и копирования необходимых файлов/приложений в клетку она может быть запущена с помощью команды jail(8). Утилита jail(8) имеет четыре обязательных аргументов, которые были описаны в разделе 15.3.1 (каталог клетки, имя клетки, IP адрес клетки, приложение запускаемое в клеткке). Кроме этого могут быть определены другие не обязательные аргументы. Например, для запуска процесса в клетке с полномочиями конкретного пользователя. Аргумент команды зависит от типа клетки; для ОС "полной" клетки /etc/rc это хороший выбор, так как он будет эмулировать последовательность запуска реальной ОС FreeBSD. Для клетки "приложений" это зависит от приложения или сервиса которое будет запускаться в окружении клетки.

Клетки часто должны запускаться вместе с запуском хост-системы и механизм rc сценариев FreeBSD позволяет это легко реализовать:

1. Список клеток, которые должны запускаться при старте хост-системы должен быть перечислен в файл rc.conf(5):

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

2. Для каждой клетки, перечисленной в jail_list, должны быть установлены четыре обязательных параметра запуска, а так же дополнительные опции старта:

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

Запуск процессов и сервисов в "полных" клетках по умолчанию будет управляться скриптоами из rc.conf(5), также как в оригенальной ОС. Для клеток обслуживающих одно приложение или сервис команда на запуск должна быть изменена путем установки опции jail_jailname_exec_start.

Примечание: Для получения полного списка доступных опций обратитесь к man страницам руководства rc.conf(5) или ознакомьтесь с файлом/etc/defaults/rc.conf.

Сценарий /etc/rc.d/jail может быть использован для запуска или остановки клеток, если соответствующая запись существует в файле rc.conf:

# /etc/rc.d/jail start www
# /etc/rc.d/jail stop www

Лучший способ остановить клетку состоит в том чтобы запустить сценарий rc.shutdown непосредственно изнутри клетки, например подключившись к ней через ssh сервис или используя утилиту jexec(8) остановить приложение клетки из хост-ситемы:

# sh /etc/rc.shutdown

Более подробную информацию об этом можно найти в man руководстве jail(8).

15.5 Тонкая настройка и администрирование

Есть несколько опций которые могут быть установлены для любой клетки и несколько вариантов различных путей настройки хост-системы с клеткой для работы высокопроизводительного приложения или сервиса. Данный раздел описывает:

  • несколько опций предназначенные для тонкой настройки и наложения ограничений безопасности применяемые при сборке клетки;
  • несколько высокопроизводительных приложений для управления клетками, которые доступны через коллекцию портов FreeBSD и могут быть использоваться для управления любыми решениями основанными на клетках.

15.5.1 Системные утилиты для тонкой настройки клеток во FreeBSD

Тонкая настройка конфигурации клетки главным образом производится через установку переменных sysctl(8). Существует специальное поддерево sysctl (security.jail.*) которое может быть использовано для соответствующих настроек клеток. Ниже приведены переменные поддерева security.jail.* и их значения установленные по умолчанию. Из названий переменных можно предположить их значение, для более полной информации переменных обратитесь к страницам man руководства jail(8) и sysctl(8):

  • security.jail.set_hostname_allowed: 1
  • security.jail.socket_unixiproute_only: 1
  • security.jail.sysvipc_allowed: 0
  • security.jail.enforce_statfs: 2
  • security.jail.allow_raw_sockets: 0
  • security.jail.chflags_allowed: 0
  • security.jail.jailed: 0

Эти переменные могут использоваться администратором хост-системы для того чтобы добавить или удалить некоторые из ограничений, наложенных по умолчанию root пользователем хост-системы. Заметьте, что есть некоторые ограничения которые не могут быть изменены. Суперпользователю root изнутри клетки нельзя загружать или выгружать правила devfs(8), устанавливать правила фаервола и многие другие административные задачи которые требуют модификаций данных в ядре, таких как установка securelevel ядра.

Система FreeBSD содержит набор инструментов для просмотра информации об активных клетках и подключения к ним для выполнения задач администрирования.

Команды jls(8) и jexec(8) входят в основной состав приложений FreeBSD и могут использоваться чтобы выполнить простые задачи, такие как:

  • вывести список всех активных клеток и их соответствующих идентификаторов (JID), IP адресов, имема хостов клеток и корневых каталогов клеток;
  • подключиться к запущенной клетке и выполнять административные задачи или управлять приложениями внутри нее. Например это необходимо в случаях если администратор хост-системы хочет коректно выключить клетку. Программа jexec(8) может использоваться при запуска shell-а в клетке для управления клеткой изнутри, например так:
# jexec 1 tcsh

15.5.2 Высокоуровневые утилиты администрирования клеток из коллеции портов FreeBSD

Среди многочисленных сторонних утилит для администрирования клеток - порт sysutils/jailutils одн из самых полных и полезных. Порт содержит набор небольших утилит для управления клетками. Для более подробной информации об инструментах необходимо обратиться на сайт разработчиков пакета утилит.

15.6 Использование клеток

В этом разделе показано, как создавать дополнительный уровень безопасности для системы FreeBSD используя клетки.

15.6.1 Одна из моделей создания клеток

Одна из основных проблем эксплуатации клеток это процесс их обновления. Связано это с тем, что процесс обновления практически повторяет процесс сборки клетки с нуля. Это не проблема если обновление происходит одной клетки, но если их много, то процесс может быть весьма трудоемким и утомительным.

Предупреждение: Нижеописанный метод требует расширенных знаний ОС FreeBSD. Если представленные ниже действия выглядят слишком сложным, то можно воспользоваться утилитой sysutils/ezjail, которая обеспечит простой способ управляющие клетками FreeBSD и не очень сложна в эксплуатации.

Описываемоя модель предназначена для случаев, когда необходимо создавать и управлять несколькими клетками, с условием безопасного разделения клеток между собой настолько, насколько это возможно. Модель предусматривает такие меры безопасности как монтирование разделов nullfs (смотрите подробнее nullfs(5) и mount_nullfs(8)) только для чтения и разделения служб и сервисов по разным клеткам, кроме этого обеспечивается простой способ добавления или удаления новой клетки или ее обновление.

Примечание: В качестве служб и сервисов могут выступать такие приложения как: HTTP сервера, DNS сервера, SMTP сервер и так далее.

Требования которые будут реализованы в ниже описанным методом создания клеток:

  • Создание простой и понятной структуры клетки, подразумевается отказ от процесса использования полной сборки и установки мира для каждой клетки.
  • Сделать процесс удаление существующей или создание новой клетки простым и легким.
  • Сделать процесс обновления и модернизации клеток простым и легким.
  • Сделать возможность запуска в клетке иной версии ОС FreeBSD.
  • Обеспечить высокий уровень безопасности настолько насколько это возможно, ограничивая как можно больше возможностей клеток.
  • Насколько это возможно минимизировать пространство и индексные дескрипторы на хост-системе.

Ниже приведенный метод полагается в большой степени на наличие единственного основного раздела-шаблона, который монтируется в каждую клетку только для чтения (раздел nullfs) и один раздел с правами чтения и записи в качестве которого могут выступать физические диски, отдельные разделы или разделы созданные в виртуальной памяти (устройства md(4)).

Описание файловой системы клеток:

  • Каждая клетка создается и запускается из каталога /home/j.
  • Раздел /home/j/mroot является основным разделом для каждой клетки и монтируется с правами только для чтения (содержит исполняемые системные программы и команды).
  • Для каждой клетки будет создан пустой раздел в каталоге /home/j (корень клетки).
  • Каждая клетка будет иметь каталог /s, который будет содержать ссылки на разделы с правами чтения и записи.
  • Каждая клетка будет иметь один раздел с правами чтения и записи базирующийся на каталоге /home/j/skel.
  • Окружении каждой клетки будет создано в каталоге /home/js с правами чтения и записи.
Примечание: Можно поменять раздел /home на любой другой, но в таком случае необходимо учитывать эти изменения и в приведенном ниже командах.

15.6.2 Создание шаблона

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

Рекомендуется для максимального обеспечения безопасности использовать последнюю стабильную версию ОС FreeBSD. Более подробно о том ка обновить ОС можно почитать в соответствующем разделе руководства ОС FreeBSD. В случае если провести обновление невозможно надо быть готовым к тому, что придется воспользоваться утилитой buildworld. Кроме этого понадобится утилита sysutils/cpdup и для обновления/копирования коллекции портов из интернета утилита portsnap(8).

1. Во-первых создадим каталог который будет являться корневым для клеток и будет содержать только исполняемые файлы. Если обновления ОС FreeBSD небыло то необходимо предварительно собрать мир:

# cd /usr/src
# make buildworld

После чего можно выполнять команды для утсановки мира:

# mkdir /home/j /home/j/mroot
# cd /usr/src
# make installworld DESTDIR=/home/j/mroot

2. Далее подготовим каталог с коллекцией портов ОС FreeBSD и каталог с исходными кодами программного обеспечения ОС для использования в дальнейшем утилитой mergemaster:

# cd /home/j/mroot
# mkdir usr/ports
# portsnap -p /home/j/mroot/usr/ports fetch extract
# cpdup /usr/src /home/j/mroot/usr/src

3. Создадим каркас(скелет) раздела с правами чтения и записи:

# mkdir /home/j/skel /home/j/skel/home /home/j/skel/usr-X11R6 /home/j/skel/distfiles
# mv etc /home/j/skel
# mv usr/local /home/j/skel/usr-local
# mv tmp /home/j/skel
# mv var /home/j/skel
# mv root /home/j/skel

4. Используя утилиту mergemaster установим отсутствующие файлы конфигурации, после чего удалим все временные файлы созданные утилитой mergemaster:

# mergemaster -t /home/j/skel/var/tmp/temproot -D /home/j/skel -i
# cd /home/j/skel
# rm -R bin boot lib libexec mnt proc rescue sbin sys usr dev

5. Теперь создадим каталог с правами только для чтения и символическими ссылками на защищенные разделы. Убедитесь, что символические ссылки создаются в нужном каталоге.

# cd /home/j/mroot
# mkdir s
# ln -s s/etc etc
# ln -s s/home home
# ln -s s/root root
# ln -s ../s/usr-local usr/local
# ln -s ../s/usr-X11R6 usr/X11R6
# ln -s ../../s/distfiles usr/ports/distfiles
# ln -s s/tmp tmp
# ln -s s/var var

6. В качестве последнего шага создадим файл /home/j/skel/etc/make.conf и установим значение переменной WRKDIRPREFIX. Это позволит централизовано обновлять порты в раздел только для чтения для всех клеток, а собирать их в разделе с правами чтения и записи доступной только одной клетки:

WRKDIRPREFIX = /s/portbuild

15.6.3 Создание Клетки

Теперь, когда у нас создан шаблон клетки с FreeBSD мы можем настроить их запуск. Ниже описано создание трех клеток: "NS", "MAIL" и "WWW".

1. В /etc/fstab файле прописываем строки для монтирования файловых систем клеток с соответствующими правами (для отмены проверки fsck(8) разделов и создания в них дампа разделы помечены нулевым флагом):

/home/j/mroot   /home/j/ns     nullfs  ro  0   0
/home/j/mroot   /home/j/mail   nullfs  ro  0   0
/home/j/mroot   /home/j/www    nullfs  ro  0   0
/home/js/ns     /home/j/ns/s   nullfs  rw  0   0
/home/js/mail   /home/j/mail/s nullfs  rw  0   0
/home/js/www    /home/j/www/s  nullfs  rw  0   0

2. Прописываем запуск и настройки клеток в /etc/rc.conf:

jail_enable="YES"
jail_set_hostname_allow="NO"
jail_list="ns mail www"
jail_ns_hostname="ns.example.org"
jail_ns_ip="192.168.3.17"
jail_ns_rootdir="/usr/home/j/ns"
jail_ns_devfs_enable="YES"
jail_mail_hostname="mail.example.org"
jail_mail_ip="192.168.3.18"
jail_mail_rootdir="/usr/home/j/mail"
jail_mail_devfs_enable="YES"
jail_www_hostname="www.example.org"
jail_www_ip="62.123.43.14"
jail_www_rootdir="/usr/home/j/www"
jail_www_devfs_enable="YES"
Предупреждение: Причина того что параметр jail_mail_rootdir указывает на разделы в каталоге /usr/home в том, что значение этой переменной не должны содержать символических ссылок, а по умолчанию в ОС FreeBSD каталог /home является символической ссылкой на каталог /usr/home. Если в значении переменной будут присутствовать символическая ссылка, то клетка просто не запустится. Используйте утилиту realpath(1) для определения полного пути к нужному каталогу. Обратитесь к рекомендации по безопасности FreeBSD-SA-07:01.jail за дополнительной информацией.

3. Создадим каталоги которые будут использоваться в качестве корневых каталогов для соответствующих клеток:

# mkdir /home/j/ns /home/j/mail /home/j/www

4. Добавляем в клетки каталоги которые будут доступные для чтения и записи в каждой клетке. Обратите внимание на использование sysutils/cpdup, которая позволяет создавать точную копию (с теми же правами доступа?) нужных каталогов:

# mkdir /home/js
# cpdup /home/j/skel /home/js/ns
# cpdup /home/j/skel /home/js/mail
# cpdup /home/j/skel /home/js/www

5. К этому моменту все клетки созданы и все настроено для того чтобы их запустить. Для этого необходимо смонтировать все прописанные в /etc/fstab разделы клеток и запустить их:

# mount -a
# /etc/rc.d/jail start

Чтобы убедиться что клетки работают можно воспользоваться утилитой jls(8). Результат ее работы показан ниже:

# jls
  JID  IP Address      Hostname                      Path
    3  192.168.3.17    ns.example.org                /home/j/ns
    2  192.168.3.18    mail.example.org              /home/j/mail
    1  62.123.43.14    www.example.org               /home/j/www

Теперь можно подключиться к клетке и создать нового пользователя или запустить и настроить необходимый сервис. В столбце JID отображается идентификационный номер каждой клетки. Его можно использовать для выполнения административных задач в нужной клетке. Например строка ниже запускает интерпретатор команд в клетке "NS":

# jexec 3 tcsh

15.6.4 Обновление Клеток

Временами необходимо обновлять ОС FreeBSD по причине исправления ошибок связанных с безопасностью системы или потому что необходимо использовать новые возможности ОС. Преимущество выше описанного метода установки клеток в том, что он позволяет легко обновлять существующие клетки, а также сводит к минимуму время простоя, так как клетки будут остановлены только в самый последний момент обновления. Кроме этого в случае возникновения каких либо проблем возможно отказаться от использования новой сборки клетки.

1. Первым делом необходимо обновить саму хост-систему в обычном порядке. Затем создадим каталог для нового корневого раздела клеток /home/j/mroot2:

# mkdir /home/j/mroot2
# cd /usr/src
# make installworld DESTDIR=/home/j/mroot2
# cd /home/j/mroot2
# cpdup /usr/src usr/src
# mkdir s

Утилита installworld создает несколько ненужных каталогов которые могут быть удалены:

# chflags -R 0 var
# rm -R etc var root usr/local tmp

2. Пересоздадим символьные ссылки на основные системные разделы клеток:

# ln -s s/etc etc
# ln -s s/root root
# ln -s s/home home
# ln -s ../s/usr-local usr/local
# ln -s ../s/usr-X11R6 usr/X11R6
# ln -s s/tmp tmp
# ln -s s/var var

3. Теперь нужно остановить клетки:

# /etc/rc.d/jail stop

4. Отключаем оригинальные разделы файловых систем клеток:

# umount /home/j/ns/s
# umount /home/j/ns
# umount /home/j/mail/s
# umount /home/j/mail
# umount /home/j/www/s
# umount /home/j/www
Примечание: Разделы доступные для чтения и записи монтируются в каталог /s корневой файловой системы клеток поэтому он должен быть размонтирован первым.

5. Перемещаем старую корневую файловую систему и заменяем ее новой. Копия будет служить в качестве резервной на случай если что-то пойдет не так. Новое имя копии позволит определить когда эта копия была сделана. Перемещение коллекции портов из резервной копии в новый корневой раздел позволит сэкономить пространство и индексные дескрипторы на хост-системе:

# cd /home/j
# mv mroot mroot.20060601
# mv mroot2 mroot
# mv mroot.20060601/usr/ports mroot/usr

6. На данный момент все необходимые процедуры по обновлению проведены и осталось только запустить клетки заново:

# mount -a
# /etc/rc.d/jail start

Для проверки работоспособности клеток можно воспользоваться утилитой jls(8).

7. Также как на хост-системе в клетках необходимо после обновления запустить утилиту mergemaster для проверки и создания конфигурационных файлов и скриптов запуска rc.d.