Что такое поддерево chroot
Корнем дерева файловой системы Linux является каталог /
. Относительно этого каталога определяется путь к любому другому каталогу. При создании поддерева chroot
корневой каталог переопределяется; вместо него назначается один из каталогов файловой системы. Принцип создания поддерева chroot
показан на рис. 23.1. Если в качестве нового корневого каталога задать, например, каталог /opt/chroot
, то путь к любому файлу или каталогу будет определяться не относительно каталога /
, а относительно /opt/chroot
. В результате, если сервер попадет под контроль взломщика и тот модифицирует файл /etc/passwd
, файл /opt/chroot/etc/passwd
будет изменен, а системный файл паролей останется в прежнем виде.
Рис. 23.1. Поддерево chroot
представляет собой специальное окружение, содержащее лишь те файлы, которые необходимы для работы сервера
Для создания поддерева chroot
используется системный вызов chroot()
. Функцию chroot()
может вызывать либо сам сервер, либо программа chroot
, применяемая для запуска сервера. Подробно этот вопрос будет рассмотрен далее в данной главе.
При использовании поддерева chroot
должны выполняться следующие условия.
• Если программа использует конфигурационные файлы или библиотеки, а также предоставляет клиенту или принимает от него некоторые файлы, все эти файлы должны размещаться в поддереве chroot
. В результате для ряда серверов размеры поддерева должны быть очень большими. Однако если сервер самостоятельно вызывает функцию chroot()
, он сможет прочитать содержимое требуемых файлов до вызова chroot()
, т.е. в тот момент, когда область его действий еще не будет ограничена поддеревом chroot
. В этом случае часть файлов, с которыми работает сервер, может лежать за пределами поддерева chroot
.
• Сервер может обращаться только к тем файлам, которые находятся в поддереве chroot
. Сократив до необходимого минимума число файлов, содержащихся в каталогах поддерева, можно уменьшить риск повреждения системы в случае, если взломщик получит контроль над сервером.
• Если в поддереве chroot
должно выполняться несколько серверов, для каждого из них необходимо создать отдельное поддерево. В этом случае злоумышленнику не удастся использовать один сервер для изменения конфигурации остальных.
• Поскольку поддерево chroot
является подмножеством файловой системы Linux, программы, выполняющиеся за пределами данного поддерева, могут записывать файлы в каталоги, принадлежащие поддереву chroot
. В зависимости от конкретных обстоятельств, этот факт можно рассматривать либо как преимущество, либо как возможный источник проблем. Вопросы доступа локальных программ к каталогам поддерева chroot
будут рассматриваться далее в этой главе.
Несмотря на то что использование поддерева chroot
позволяет существенно снизить опасность для компьютера, на котором выполняются серверы, данный подход имеет свои недостатки и ограничения. Одно из ограничений состоит в том, что не все серверы могут выполняться в рамках поддерева chroot
. Для одних серверов подобный режим работы является вполне естественным (в качестве примера можно привести сервер FTP). Другим серверам, например Telnet, требуется более или менее полный доступ к файловой системе Linux. Таким образом, некоторые серверы неизбежно придется запускать за пределами поддерева chroot
.
Поддерево chroot
не устанавливается автоматически программой инсталляции пакета, его создает системный администратор. По этой причине затрудняется установка дополнений к серверу. Если вы забудете скопировать измененные файлы в нужный каталог, конфигурация сервера, выполняющегося в пределах chroot
, останется неизменной.
Не следует также забывать, что процесс, выполняемый в рамках поддерева chroot
с полномочиями root, может вызвать функцию chroot()
и расширить область своих действий на всю файловую систему. (Организовать такой вызов достаточно сложно, но вполне возможно.) Поэтому предоставляя привилегии root
серверу, выполняющемуся в пределах поддерева chroot
, необходимо соблюдать осторожность. Как известно, в защите практически каждого сервера были найдены недостатки, и, несомненно, подобные недостатки будут обнаружены и в дальнейшем. Таким образом, несмотря на то, что поддерево chroot
является чрезвычайно полезным инструментом, оно вовсе не гарантирует безопасность системы.
Читать дальше