Команда chroot создает изолированную среду в Linux, изменяя корневой каталог для всех запущенных процессов.
Вы хотите запускать приложения или службы в изолированном пространстве в Linux? Или, может быть, вы хотите протестировать и отладить приложение, не мешая работе остальной системы? Если это так, вы захотите узнать о chroot, мощном механизме, встроенном в Linux, который позволяет вам создавать отдельную среду в вашей системе.
Давайте подробно рассмотрим chroot, узнаем о его преимуществах, примерах использования, о том, как настроить его в системе Linux и, если необходимо, как его избежать.
Что такое chroot в Linux?
chroot или change-root, возможно, является одной из самых простых и древних форм программного обеспечения для контейнеризации, которое позволяет пользователю безопасно помещать приложения и службы в песочницу. Песочница, с точки зрения вычислительной техники, — это процесс изоляции программы в ограниченном пространстве с заранее определенными ресурсами.
Если вы знакомы с Докер и как он работает
, вы можете думать о chroot как о его сильно урезанной версии. chroot работает, изменяя корневой каталог программы, ограничивая доступ и видимость и, таким образом, обеспечивая дополнительный уровень изоляции и безопасности.По сути, вы создаете отдельный каталог, копируете все зависимости программы в новый каталог, а затем запускаете команду chroot. Это позволяет программе работать правильно, не имея доступа к базовой файловой системе.
chroot для программы — отличный способ проверить ее надежность в безопасном месте без изменения реальных системных файлов. Кроме того, вы также можете снизить риск безопасности, вызванный скомпрометированным пакетом, поскольку в chroot-окружении скомпрометированный пакет не сможет получить доступ и изменить конфиденциальные системные файлы.
Программа сможет получать доступ и просматривать только файлы, импортированные в каталог chroot, также известный как «тюрьма chroot». Это предотвращает вмешательство программы и ее подпроцессов в базовую систему.
Что такое chroot Jail?
Тюрьма chroot — это изолированная среда, в которой находятся и выполняются программы chroot. Термин chroot-тюрьма происходит от концепции, согласно которой процесс и его подпроцессы внутри chroot-окружения не имеют доступа или видимости к базовой файловой системе и находятся в пределах границ chroot с заранее определенными Ресурсы.
Теперь, когда концепция chroot вам ясна, давайте приступим к практике и узнаем, как создать chroot-тюрьму и порождать в ней процессы.
Как создать chroot-тюрьму и запускать в ней программы
Тюрьма chroot — это, по сути, каталог, содержащий все необходимые ресурсы, файлы, двоичные файлы и другие зависимости, которые необходимы программе для правильной работы.
Однако, в отличие от обычной среды Linux, среда chroot-тюрьмы сильно ограничена, и программа не может получить доступ к внешним или дополнительным файлам и системным ресурсам.
Например, чтобы запустить оболочку Bash в chroot-тюрьме, вам потребуется скопировать двоичный файл Bash и все его зависимости в каталог chroot.
Вот шаги для создания chroot-тюрьмы и запуска оболочки Bash:
- Чтобы программа работала успешно, вам необходимо скопировать все ее зависимости в каталог chroot. Найдем бинарный файл, в данном случае Bash, и расположение всех его зависимостей с помощью команд which и ldd:
какой удар
ldd /usr/bin/bash - Теперь, когда вы знаете расположение двоичного файла и его зависимостей, скопируйте их в каталог, который вы хотите превратить в chroot-тюрьму. С помощью команды mkdir создайте необходимые каталоги и с помощью команда ср, скопируйте все файлы в соответствующие каталоги:
mkdir bin lib lib64 && cp -r /lib/ * ./lib && cp -r /lib64/* /lib64/ && cp /bin/bash /bin/
- Наконец, когда программа и ее зависимости скопированы, вы можете запустить команду chroot с повышенными привилегиями, используя префикс sudo, чтобы создать среду chroot в выбранном каталоге. По умолчанию он порождает оболочку Bash. Вот команда для ввода:
sudo chroot имя_каталога
Это все шаги по созданию chroot-тюрьмы и запуску программы внутри нее.
Как вырваться из chroot-тюрьмы
Хотя chroot-тюрьмы хороши для тестирования нестабильного программного обеспечения, они также полезны при работе с SSH-соединениями, поскольку chroot-подключение подключенных пользователей является одним из многих способы защитить свой SSH-сервер.
С другой стороны, если вы тестировщик на проникновение и зашли на SSH-сервер вашей цели, обнаружение среды с chroot может разочаровать и показаться тупиком.
Тем не менее, существует довольно много способов выбраться из неправильно сконфигурированной тюрьмы chroot, некоторые из них требуют навыков программирования на C, а другие можно автоматизировать с помощью инструментов. Вот несколько простых способов выхода из chroot:
- Вложенные вызовы chroot
- Вложенные вызовы chroot с сохраненным файловым дескриптором
- Метод монтирования root
- побег procfs
- побег
Обратите внимание, что для выполнения побега из chroot любым из этих методов вам потребуются повышенные привилегии в системе. Узнайте больше об этих методологиях побега, перейдя на GitHub-репозиторий chw00t, инструмент автоматизации выхода из chroot.
Теперь вы знаете все о chroot в Linux
Теперь, когда вы знаете, что такое chroot, как он работает и как его реализовать, вы сможете без особых усилий помещать приложения в песочницу из терминала. Имейте в виду, что, как вы знаете, есть несколько способов выйти из chroot-окружения.
Это говорит о том, что chroot никоим образом не предназначался для реализации в качестве функции безопасности. Таким образом, вы должны использовать chroot с большой осторожностью, поскольку неправильная конфигурация может привести к неприятным последствиям и поставить под угрозу безопасность вашей системы.
Лучше всего придерживаться специализированных решений для песочницы, таких как программное обеспечение для контейнеризации или виртуальные машины. Оба они сосредоточены на песочнице и безопасности, поэтому, если в городе не будет нового нулевого дня, вам не нужно беспокоиться о безопасности и целостности вашей системы.
Если вы не уверены, что выбрать между программным обеспечением для контейнеризации и виртуализации, попробуйте оба и убедитесь сами, какой из них лучше.