Chroot

Материал из свободной русской энциклопедии «Традиция»
Перейти к: навигация, поиск

chroot в Unix-операционных системах — это операция изменения корневого каталога. На практике программа (обычно это командная оболочка), запущенная с помощью утилиты chroot будет воспринимать указанный каталог, как единственную доступную файловую систему. Поэтому, если нужно обеспечить программе доступ к другим каталогам или файловым системам (например, /proc), нужно заранее примонтировать в целевом каталоге необходимые каталоги или устройства. chroot затрагивает только текущий процесс и всех его потомков. chroot сам по себе может ссылаться на chroot(2) системный вызов или на программу-обёртку chroot(8).

Программа, корень которой был перенесён в другой каталог не может обращаться к файлам вне этого каталога. Это обеспечивает удобный способ помещения в «sandbox» («песочницу») тестовой, ненадёжной или другой опасной программы. Это также простой способ механизма «jail» («тюрьмы»). Но наиболее часто chroot используется для сборки дистрибутивов или отдельных программ как бы в «чистой» среде. См. также bootstrapping.

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

Программам разрешается открывать файловые дескрипторы (для файлов, конвейеров и сетевых соединений) в chroot-е, который может упростить изготовление jail делая необязательным хранение рабочих файлов внутри каталога chroot. Это также может использоваться как простейшая capability-система, в которой программе явно даётся доступ к ресурсам вне chroot основываясь на дескрипторах, которые содержатся внутри.

Использование[править]

Разделение привилегий 
chroot может использоваться как упреждающий способ защиты от бреши в безопасности предотвращая возможного атакующего от нанесения любых повреждений или зондирования системы с помощью скомпрометированной программы. Например, сетевой файловый сервер может делать chroot в тот каталог, из которого он раздаёт файлы сразу после соединения с клиентом. Подобный подход используется MTA Postfix, который разделяет свою работу на конвейер меньших, индивидуально заточённых в chroot программ.
Изготовление honeypot-ов 
chroot-каталог может быть наполнен таким образом, чтобы симулировать реальную систему с запущенными сетевыми сервисами. Механизм chroot в результате может предотвратить обнаружение атакующими систему с целью компрометации от того, что это является искусственным окружением, или от взлома реальной системы.
Тестирование 
Изоляция, которая обеспечивается механизмом chroot также полезна для целей тестирования. Отдельная копия операционной системы может быть установленая в chroot-каталог как тестовое окружение для ПО, которое в противном случае было бы слишком рискованно разворачивать на работающей системе.

Недостатки[править]

Только супер-пользователь (root) может выполнять chroot. Это необходимо для того, чтобы предотвратить атаку со стороны пользователя при помощи помещения setuid-ной программы внутри специально изготовленной chroot jail (например, с ложным файлом /etc/passwd) что будет приводить к тому, что они получат повышение привилегий.

Сам по себе механизм chroot не полностью безопасен. Если программа, запущенная в chroot имеет супер-пользовательские привилегии, она может выполнить second chroot для того, чтобы вылезти наружу. Это работает потому, что некоторые ядра Unix не позволяют правильного вложения контекстов chroot.

Большинство систем Unix не полностью ориентированы на файловую систему и оставляют потенциально разрушительную функциональность, такую как сетевую и контроль процессов доступной через интерфейс системных вызовов к программе в chroot.

Механизм chroot сам по себе не умеет осуществляет лимитирования на ресурсы, такие как пропускная способность ввода/вывода, дисковое пространство или время ЦПУ.

Ссылки[править]