it-swarm-ru.tech

chroot "jail" - что это такое и как мне его использовать?

Я много слышал/читал о chroot jail под linux, но никогда еще не использовал его (я использую Fedora изо дня в день), так что такое chroot "jail"? Когда и почему я могу использовать это/не использовать это и есть ли что-то еще, что я должен знать? Как бы я занялся его созданием?

107
user119

Тюрьма chroot - это способ изолировать процесс и его дочерние элементы от остальной части системы. Его следует использовать только для процессов, которые не запускаются от имени пользователя root, поскольку пользователи root могут очень легко выйти из тюрьмы.

Идея состоит в том, что вы создаете дерево каталогов, куда вы копируете или связываете все системные файлы, необходимые для запуска процесса. Затем вы используете системный вызов chroot(), чтобы изменить корневой каталог на основу этого нового дерева и запустить процесс, запущенный в среде chroot. Поскольку он не может ссылаться на пути вне модифицированного корня, он не может выполнять операции (чтение/запись и т.д.) Злонамеренно в этих местах.

В Linux использование bind mounts - отличный способ заполнить дерево chroot. Используя это, вы можете тянуть в папки, такие как /lib а также /usr/lib пока не тянет в /usr, например. Просто свяжите деревья каталогов, которые вы хотите, с каталогами, которые вы создаете в каталоге jail.

97
Ben Combee

"chroot jail" - это неправильное название, которое должно действительно исчезнуть, но люди продолжают его использовать. chroot - это инструмент, который позволяет вам смоделировать каталог в вашей файловой системе в качестве корня файловой системы. Это означает, что вы можете иметь структуру папок, например:

-- foo
    -- bar
    -- baz
-- bazz

Если ты chroot foo и делать ls /, ты увидишь:

-- bar
-- baz

Что касается ls (и любых других используемых вами инструментов), это единственные каталоги в файловой системе. Причина, по которой "jail" является неправильным, заключается в том, что chroot не предназначен для принудительного сохранения программы в этой моделируемой файловой системе; программа, которая знает, что находится в изолированной "тюрьме", может довольно легко выйти, поэтому вам не следует использовать chroot в качестве меры безопасности, чтобы предотвратить изменение программой программ за пределами вашей имитированной файловой системы.

53
Michael Mrozek

По сути, вы просто меняете корневой каталог своей среды. Так

/

становится

/some-jail/ (or whatever directory you want)

Когда приложение получит доступ к/они получат/some-jail /. Кроме того, приложение не может выйти из/some-jail /, поэтому вы знаете, что оно не получит доступ ни к чему другому на вашей машине. Это очень простой способ сказать: "Эй, ты можешь получить доступ только к тем вещам, которые я тебе даю, и ты не можешь получить доступ ни к чему другому в системе.

12
jacksonh

"Когда и почему я могу использовать это?"

Одно из применений - это тестирование сценариев (время загрузки и т.д.), Которые делают ссылки на абсолютные пути или запускают команды, которые вы, возможно, захотите перехватить и записать (и, возможно, запретить их) - в среде, где вы не хотите, чтобы эти команды на самом деле работать в вашей рабочей среде.

Например, у меня есть встроенное устройство под управлением Linux, я хотел бы проверить работу некоторого bash без: а) запуска его на реальном устройстве (так как у меня есть лучшие инструменты на моем рабочем столе и я не хочу кирпичить устройство) б) запуска это реально на моем рабочем столе (так как я не хочу, чтобы моя настольная система испортилась)

Кроме того, вы можете узнать, какие команды или другие файлы сценариев используются, так как запуск завершится с ошибкой, когда он попытается запустить команду или сценарий оболочки, которого нет в "chroot jail".

(Конечно, чтобы проделать всю работу, вы можете запустить внутри QEMU или Docker, или ВМ, но это потребует создания VM образа и т.д. - гораздо больше работы)

6
MikeW