Я много слышал / читал о chroot jail под linux, но никогда еще не использовал его (я использую Fedora изо дня в день), так что такое chroot "jail"? Когда и почему я могу использовать это / не использовать это и есть ли что-то еще, что я должен знать? Как бы я занялся его созданием?
99
Ответы:
Тюрьма chroot - это способ изолировать процесс и его дочерние элементы от остальной части системы. Его следует использовать только для процессов, которые не запускаются от имени пользователя root, поскольку пользователи root могут очень легко выйти из тюрьмы.
Идея состоит в том, что вы создаете дерево каталогов, куда вы копируете или связываете все системные файлы, необходимые для запуска процесса. Затем вы используете
chroot()
системный вызов, чтобы изменить корневой каталог, чтобы он лежал в основе этого нового дерева, и запустите процесс, запущенный в среде chroot. Поскольку он не может ссылаться на пути вне измененного корня, он не может выполнять операции (чтение / запись и т. Д.) Злонамеренно в этих местах.В Linux использование bind mounts - отличный способ заполнить дерево chroot. Используя это, вы можете вытягивать папки, например,
/lib
и, в/usr/lib
то же время, не вытягивая их/usr
, например. Просто свяжите деревья каталогов, которые вы хотите, с каталогами, которые вы создаете в каталоге jail.источник
firejail
работы./bin
который установлен пользователем root? @Ben Combee«chroot jail» - это неправильное название, которое должно действительно исчезнуть, но люди продолжают его использовать.
chroot
это инструмент, который позволяет вам моделировать каталог в вашей файловой системе как корень файловой системы. Это означает, что вы можете иметь структуру папок, например:Если вы так
chroot foo
и сделаетеls /
, вы увидите:Что касается
ls
(и любых других используемых вами инструментов), это единственные каталоги в файловой системе. Причина, по которой «тюрьма» является неправильным,chroot
не в том, чтобы заставить программу оставаться в этой моделируемой файловой системе; программа, которая знает, что находится в изолированной «тюрьме», может довольно легко выйти, поэтому вам не следует использоватьchroot
в качестве меры безопасности, чтобы предотвратить изменение программой программ за пределами вашей имитированной файловой системыисточник
chroot
«тюрьмы». Случай я видел требует эскалации привилегий суперпользователя. Сложно ли помешать процессу перерасти в привилегии root?chroot
не. По этой причине люди часто смешиваютсяchroot
и имеютjails
в виду одно и то же. Они не Термин «тюрьма», как говорят, был придуман Биллом Чесвиком, когда он создал приманку для ловли крекера: csrc.nist.gov/publications/secpubs/berferd.pdfchroot jail
хорошую идею в моем случае ?По сути, вы просто меняете корневой каталог вашей среды. Так
становится
Когда приложение получит доступ к / они получат / some-jail /. Кроме того, приложение не может выйти из / some-jail /, поэтому вы знаете, что оно не получит доступ ни к чему другому на вашей машине. Это очень простой способ сказать: «Эй, ты можешь получить доступ только к тем вещам, которые я тебе даю, и ты не можешь получить доступ ни к чему другому в системе.
источник
"Когда и почему я могу использовать это?"
Одно из применений - это тестирование сценариев (время загрузки и т. Д.), Которые делают ссылки на абсолютные пути, или которые запускают команды, которые вы, возможно, захотите перехватить и записать (и, возможно, запретить их) - в среде, где вы не хотите, чтобы эти команды на самом деле работать в вашей рабочей среде.
Например, у меня есть встроенное устройство под управлением Linux, я хотел бы проверить работу некоторого bash без: а) запуска его на реальном устройстве (так как у меня есть лучшие инструменты на моем рабочем столе и я не хочу кирпичить устройство) б) запуска это реально на моем рабочем столе (так как я не хочу, чтобы моя настольная система испортилась)
Кроме того, вы можете узнать, какие команды или другие файлы сценариев используются, так как запуск завершится с ошибкой, когда он попытается запустить сценарий команды или оболочки, которого нет в «chroot jail».
(Конечно, чтобы проделать всю работу, вы можете запустить внутри QEMU или Docker, или ВМ, но это потребует создания образа ВМ и т. Д. - гораздо больше работы)
источник