• Файлы протоколов. Если сервер создает во время работы файлы протоколов, вам необходимо подготовить каталоги для их размещения. Некоторые серверы используют при создании файлов протоколов демон syslogd
, в этом случае вам надо скопировать данную программу в поддерево chroot
. Многие серверы можно сконфигурировать так, чтобы протоколирование выполнялось без использования syslogd
.
Для серверов, самостоятельно вызывающих функцию chroot()
, обычно приходится копировать в каталоги поддерева гораздо меньше файлов, чем для серверов, запускаемых с помощью программы chroot
. Если сервер вызывает chroot()
, то перед вызовом данной функции он обычно загружает библиотеки, системные файлы и остальные необходимы ему данные.
На заметку
Чтобы не создавать угрозу безопасности системы, помещайте в каталоги поддерева chroot
лишь минимальный набор файлов. Копировать файл следует только в том случае, если вы твердо знаете, что этот файл используется в работе сервера. Что же касается остальных файлов, выяснить, необходимы ли они, можно, запустив сервер на выполнение (если в сервере предусмотрен режим отладки, желательно включить его). Если серверу недостает какого-либо файла, он сообщит об этом.
Настройка сервера для работы в рамках поддерева chroot
Создав поддерево chroot
, можно приступать к его использованию. Для этого надо сконфигурировать сервер для работы в рамках поддерева, организовать запуск сервера и обеспечить контроль доступа к поддереву chroot
извне. Решение этих задач рассматривается в данном разделе. Здесь же будет приведен пример запуска сервера имен в пределах поддерева chroot
.
Запуск сервера в рамках поддерева chroot
Если сервер осуществляет вызов функции chroot()
, вероятнее всего, что в его конфигурационном файле содержится одна или несколько опций, предназначенных для управления выполнением в рамках поддерева chroot
. Например, для ProFTPd предусмотрена директива , которая задает имя каталога, используемого в качестве корневого каталога поддерева chroot
. Чтобы обеспечить выполнение сервера с использованием поддерева chroot
, необходимо выяснить, какие опции управляют данным режимом работы, и правильно установить их значения.
Если сервер не вызывает chroot()
, необходимо в первую очередь убедиться, что он способен работать в обычном окружении Linux, для чего следует запустить сервер за пределами поддерева chroot
. Затем надо скопировать исполняемые файлы сервера и конфигурационные файлы в каталоги поддерева и удостовериться, что это не повлияло на работу сервера. После настройки среды поддерева вы можете запускать сервер с помощью утилиты chroot
. Соответствующая команда имеет следующий вид:
chroot новый_корневой_каталог имя_сервера [ опции_сервера ]
Здесь под новым корневым каталогом подразумевается каталог, который выполняет роль корня поддерева chroot
. Кроме того, при вызове команды задаются имя сервера, предназначенного для запуска, и его опции; путь к серверу определяется относительно корневого каталога поддерева. Например, если исполняемый файл сервера имеет имя /opt/chroot/bin/server
, где /opt/chroot
— корневой каталог поддерева, то вызов chroot
будет выглядеть следующим образом:
# chroot /opt/chroot /bin/server
Если в обычных условиях сервер запускается с помощью сценария SysV или локального сценария запуска, вы должны модифицировать сценарий, включив в него команду chroot
. Вы также можете запретить выполнение сценария и организовать запуск сервера другим способом. Если в системе предусмотрен запуск сервера посредством суперсервера, необходимо разместить в поддереве chroot
не только сервер, предназначенный для запуска, но и суперсервер. Кроме того, надо изменить команду запуска суперсервера, реализовав его запуск посредством chroot
. Если такое решение вас не устраивает, измените способ запуска сервера, например, запустите его с помощью сценария SysV или локального сценария.
Управление доступом к каталогам поддерева chroot
Поддерево chroot
реализует одностороннюю защиту — программы, выполняющиеся в рамках поддерева, не имеют доступа к ресурсам за его пределами. Поэтому вы можете ограничить доступ и в другом направлении. Для этого надо указать в качестве владельца каталогов поддерева chroot
пользователя root
и установить соответствующие права доступа к этим подкаталогам, например задать значение 0640 ( rw-r-----
). Запускать сервер следует от имени пользователя, который принадлежит группе, специально созданной для этой цели. В результате сервер будет иметь право читать файлы, находящиеся в каталогах поддерева chroot
, а из-за пределов поддерева к данным сможет обращаться только пользователь root. Если же при работе сервера возникает необходимость в записи файлов, следует предусмотреть это при установке прав доступа.
Читать дальше