chroot «джейл» - что это такое и как мне его использовать?

99

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


источник
ответы здесь, кажется, короткие на "как я использую это категория?" :(
Александр Миллс

Ответы:

88

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

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

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

Бен Комби
источник
10
Ваш ответ великолепен. Однако стоит упомянуть, что chroot не является безопасным механизмом (процесс может выйти из тюрьмы, если он становится root, а иногда даже если нет). Реальные тюрьмы могут быть применены с помощью freebsd jails и т.п. См. Это en.wikipedia.org/wiki/FreeBSD_jail#S
Similar_technologies
3
В процессе установки Gentoo используется chroot, поэтому вы можете настроить новую ОС до установки GRUB, ядра Linux и т. Д.
Chris Huang-Leaver
3
Взгляните на firejail для полной заключенной в тюрьму оболочки, использующей все пространства имен Linux. Доступны пакеты deb и rpm. Как правило, я бы порекомендовал ядро ​​3.18 или новее из-за известной проблемы, связанной с невозможностью установки нового программного обеспечения или управления пользователями во время firejailработы.
CivFan
Отличный ответ! - хотя некоторые основные примеры было бы приятно видеть.
Габриэль Стейплс
Может ли пользователь из-под chroot-тюрьмы вызывать двоичные файлы, расположенные под ним, /binкоторый установлен пользователем root? @Ben Combee
Alper
50

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

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

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

-- bar
-- baz

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

Михаил Мрозек
источник
16
Было бы полезно иметь пример того, как избежать chroot«тюрьмы». Случай я видел требует эскалации привилегий суперпользователя. Сложно ли помешать процессу перерасти в привилегии root?
CivFan
4
Это все еще "заключение", так что "тюрьма" - это хорошая стенография. Будет ли «поле 3 уровня содержания» лучше ?!
MikeW
4
Термин происходит от тюрем FreeBSD. Тюрьмы построены на chroot. Тюрьмы были предназначены для решения проблем безопасности chrootне. По этой причине люди часто смешиваются chrootи имеют jailsв виду одно и то же. Они не Термин «тюрьма», как говорят, был придуман Биллом Чесвиком, когда он создал приманку для ловли крекера: csrc.nist.gov/publications/secpubs/berferd.pdf
BugHunterUK
Так что, ты не используешь chroot jailхорошую идею в моем случае ?
Шафизаде
10

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

/

становится

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

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

jacksonh
источник
6

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

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

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

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

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

MikeW
источник