
Я много слышал/читал о chroot jail под Linux, но никогда им не пользовался (я ежедневно использую Fedora), так что же такое chroot "jail"? Когда и почему я могу/не могу его использовать и есть ли что-то еще, что мне следует знать? Как мне его создать?
решение1
Chroot jail — это способ изолировать процесс и его потомков от остальной системы. Его следует использовать только для процессов, которые не работают как root, поскольку пользователи root могут очень легко выйти из jail.
Идея заключается в том, что вы создаете дерево каталогов, куда копируете или связываете все системные файлы, необходимые для запуска процесса. Затем вы используете системный chroot()
вызов, чтобы изменить корневой каталог на базовый для этого нового дерева и запустить процесс, работающий в этой chroot-среде. Поскольку он фактически не может ссылаться на пути за пределами измененного корня, он не может выполнять операции (чтение/запись и т. д.) злонамеренно в этих местах.
В Linux использование bind mounts — отличный способ заполнить дерево chroot. Используя его, вы можете втягивать папки вроде /lib
и , /usr/lib
не втягивая /usr
, например. Просто привяжите нужные вам деревья каталогов к каталогам, которые вы создаете в каталоге jail.
решение2
"chroot jail" - это неправильное название, которое должно было бы действительно исчезнуть, но люди продолжают его использовать. chroot
- это инструмент, который позволяет вам имитировать каталог в вашей файловой системе как корень файловой системы. Это означает, что вы можете иметь структуру папок, например:
-- foo
-- bar
-- baz
-- bazz
Если вы chroot foo
и сделаете ls /
, вы увидите:
-- bar
-- baz
Что касается ls
(и любых других инструментов, которые вы запускаете), то это единственные каталоги в файловой системе. Причина, по которой "jail" - неправильное название, заключается в том, что он chroot
не предназначен длясилапрограмма, которая остается в этой имитируемой файловой системе; программа, которая знает, что она находится в chroot-"тюрьме", может довольно легко сбежать, поэтому вам не следует использовать это chroot
в качестве меры безопасности, чтобы помешать программе изменять файлы за пределами вашей имитируемой файловой системы
решение3
По сути, вы просто меняете корневой каталог вашей среды. Итак
/
становится
/some-jail/ (or whatever directory you want)
Когда приложение получает доступ к /, оно получит /some-jail/. Также приложение не может выйти за пределы /some-jail/, поэтому вы знаете, что оно не получит доступ ни к чему другому на вашей машине. Это очень простой способ сказать: «Эй, ты можешь получить доступ только к тем вещам, которые я тебе даю, и не можешь получить доступ ни к чему другому в системе».
решение4
chroot легко понять как более современный термин виртуальная среда. Процесс получает новый виртуальный корневой каталог для установки видимости пути. Это в основном удобный и простой способ контролировать, на какие файлы и библиотеки может ссылаться процесс. Это очень полезно для изоляции от вещей, которые могут иметь разные версии, доступные в реальной файловой системе.
Вы также можете рассматривать это как своего рода фильтр того, что видно в файловой системе.
Важно также рассмотреть возможность смены текущего рабочего каталога после chroot, чтобы избежать неожиданного вида файловой системы.
Одна вещь, которая вводит в заблуждение, это термин jail. Исторически chroot использовался для имитации того, что FreeBSD называет jail, другие могут называть sandbox. Для этого также требуется самопонижение привилегий процесса. Не очень хорошая модель безопасности.
Распространенным вариантом использования является компиляция программного обеспечения, которому необходимо ссылаться на определенную цепочку инструментов или набор библиотек, файлов и инструментов, которые являются подмножеством того, что фактически есть в системе.