# mkdir -p /opt/chroot/sbin /opt/chroot/var/run
# cp /usr/sbin/ndc /opt/chroot/usr/sbin
# cp /sbin/start-stop-daemon /opt/chroot/sbin
При редактировании сценария запуска SysV перед каждым вхождением start-stop-daemonи ndcнадо добавить последовательность символов chroot /opt/chroot. Однако на этом работа не заканчивается, поскольку start-stop-daemonобращается к файловой системе /proc, которая не доступна из поддерева chroot. Чтобы обеспечить доступ к ней, необходимо внести изменения в файл /etc/fstab— скопировать строку, содержащую /proc, и изменить ее на /opt/chroot/proc. Затем вы должны вызвать команду mount -а, чтобы смонтировать /procв поддереве chroot.
Внимание
Поскольку файловая система /procпредоставляет контроль над компьютером, дублировать ее нежелательно. Лучше отредактировать сценарий запуска SysV так, чтобы он не использовал start-stop-daemon, либо отказаться от сценария SysV и организовать запуск сервера другим способом.
Выполнив все описанные выше действия, вы можете запустить сервер с помощью сценария SysV и проверить его работу.
# /etc/init.d/bind start
# host awl.com localhost
awl.com A 165.193.123.224
Если вы хотите удостовериться в том, что сервер выполняется в среде поддерева chroot, вам надо удалить исполняемый файл сервера из каталога /usr/sbinи конфигурационные файлы из каталога /etc/bind, а потом перезапустить сервер. Если сервер работает, то выполняться он может только в рамках поддерева chroot.
Вместо того чтобы запускать сервер BIND посредством утилиты chroot, вы можете использовать опцию -tпрограммы named, которая разрешает вызов функции chroot()сервером имен. Соответствующая команда имеет следующий вид:
# /usr/sbin/named -t /opt/chroot
Данный подход намного проще описанного выше, так как при этом вам придется копировать в каталоги поддерева chrootгораздо меньше файлов, в частности, вы можете оставить программу namedи библиотеки в тех каталогах, в которых они были записаны при инсталляции. Скопировать конфигурационные файлы необходимо, поскольку сервер имен читает их уже после вызова chroot(). При использовании опции -tупрощается подготовка сервера для запуска посредством сценария SysV, так как при нет необходимости дублировать файловую систему /proc.
Детали подготовки сервера к выполнению в рамках поддерева chrootзависят от типа сервера и версии Linux, однако общий ход процедуры остается прежним. Возможно, вам придется немного модифицировать среду поддерева chroot, например, изменить права доступа к каталогам или настроить сервер для запуска от имени пользователя, отличного от root.
Поддерево chrootпредставляет собой чрезвычайно полезный инструмент, однако требует выполнения определенных действий по поддержке. Ниже перечислены вопросы, которым администратор должен уделять внимание при поддержке поддерева chroot.
• Ротация. Во всех версиях Linux реализован механизм ротации файлов протоколов. Если сервер записывает файлы протоколов в каталог поддерева chroot, необходимо настроить средства ротации для работы с файлами, находящимися в этом каталоге. В качестве альтернативного решения при вызове mountможно указать опцию --bind, при этом файл, предназначенный для хранения файлов протоколов, станет доступным из поддерева chroot. Однако такой подход можно применять только в тех системах в которых используется версия ядра не ниже 2.4.x. Если вы не уделите внимания файлам протоколов, они будут неограниченно расти и в конце концов займут все доступное дисковое пространство.
• Обновление программ. При обновлении программного обеспечения дополнительные файлы приходится копировать в каталоги поддерева chroot. Если вы не сделаете этого, на компьютере будет выполняться старый вариант сервера, т.е. в результате установки дополнений ошибки в программе не будут устранены. Необходимо также следить за изменениями в сценариях запуска, иначе может произойти так, что сервер будет выполняться за пределами поддерева chroot.
• Обеспечение доступа к файлам. Если ваш сервер использует файлы с данными, вы должны разместить их в поддереве chroot. Обычно при копировании таких файлов не возникает проблем. Вам необходимо лишь следить за тем, чтобы права доступа к файлам были установлены в соответствии с используемой вами схемой защиты.
Читать дальше