#chroot
#chroot
Вопрос:
-
После того, как я помещаю процесс в
chroot
тюрьму, он может получить доступ кlibc.so
библиотеке, которая находится за пределами тюрьмы. Почему или, может быть, как? -
Если у нас есть программная ссылка, ссылающаяся на файл за пределами тюрьмы, можем ли мы получить доступ к основному файлу?
-
можем ли мы использовать
chroot
в многопоточных приложениях? или, если мы изменим корневой каталог из одного потока, изменится корневой каталог всего процесса? -
Я читал, что
chroot
функция не обеспечивает реальной безопасной среды, есть ли какое-либо альтернативное решение в Linux?
Ответ №1:
- До тех пор, пока он был открыт перед вызовом
chroot
, он все еще открыт, точно так же, как его собственный двоичный файл. Однако,chroot
это привилегированная операция, поэтому вызывающий ее процесс, вероятно, изменит идентификатор и запустит реальный процесс, к которому не будет доступа,libc.so
если он не доступен в chroot. - Программная ссылка разрешена в пространстве имен процесса, поэтому она не разрешится для файла за пределами
chroot
. - Я не уверен (и подозреваю, что это не так). Обычно это не имеет значения, поскольку, будучи привилегированной операцией, она выполняется в простой оболочке, которая не является многопоточной, но запускает многопоточное приложение только после укоренения, закрытия всех дескрипторов файлов, изменения текущего каталога на chroot и удаления привилегий.
- Chroot небезопасен. Root можно легко удалить (например, путем повторного монтирования устройства). Существуют Linux-Vserver, lxc и OpenVZ, которые обеспечивают безопасную изоляцию процесса. LXC использует функцию cgroups Linux (начиная с ядра 2.6.29), двум другим, похоже, требуется исправленное ядро. Вы также можете просто настроить cgroup самостоятельно, если вам просто нужно заключить в тюрьму одно приложение.
Комментарии:
1. Я не уверен, что lxc более безопасен, root все равно сможет смонтировать любое устройство на / .