Что такое поддерево 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является чрезвычайно полезным инструментом, оно вовсе не гарантирует безопасность системы.
Читать дальше