Chroot target что это
Изменение корневой системы. Команда chroot в Linux
При обслуживании систем на базе Linux, нередко возникают ситуации, когда необходимо получить доступ к корневой файловой системе (ФС) из внешней системной среды или просто временно, например, на время обслуживания, изменить путь корневой ФС для выполнения в ней процессов системы. Для этого в Linux-системах существует команда chroot. Она довольно проста, однако используется она в очень ответственных и технически довольно сложных ситуациях.
В каких случаях удобно использование chroot?
Итак, команда chroot позволяет изменить системное окружение для выполняемых процессов. Таким образом, они не могут получить доступ к ресурсам вне нового окружения. Исходя из этого, использование chroot очень практично, например в следующих ситуациях:
Как можно видеть, номенклатура применения для chroot довольно широка. При том, что сами вышеперечисленные задачи требуют хорошего опыта при работе и/или администрировании UNIX/Linux-систем.
Особняком стоит вопрос безопасности. Ведь в данном случае даже с помощью «безобидного» Live-CD/DVD/USB абсолютно скрытно можно скомпрометировать систему и сделать с системой всё что угодно. Но следует заметить, что это уже в большей степени вопрос об уровне физического доступа к самой системе.
Синтаксис и основные опции
Согласно официальной документации, синтаксис команды chroot следующий:
Как видно, в качестве NEWROOT указывается новый путь в файловой системе, далее может следовать, собственно, команда со своими аргументами. В следующей таблице перечислены опции chroot, которых не так много:
Опция | Значение |
—groups=G_LIST | Задаёт список групп пользователей перечислением в формате g1,g2,…gn. |
—userspec=USER:GROUP | Задаёт пользователя и группу в формате ПОЛЬЗОВАТЕЛЬ:ГРУППА |
—skip-chdir | Запрещает изменение рабочего каталога на корневой «/». |
Подготовка системной среды для режима Chroot
Для того, чтобы обеспечить полноценное использование Chroot-среды, необходимо предварительно соблюсти ряд условий, а также подготовить для неё соответствующее окружение.
Во-первых:
Во-вторых:
Должен быть примониторан корневой раздел той Linux-системы, в которую необходимо выполнить chroot. Чтобы легче сориентироваться в наименовании разделов и определить нужный, можно воспользоваться командой lsblk – она выведет наименования всех доступных в системе разделов с соответствующими им точками монтирования:
В данном случае это sda2. Теперь нужно создать каталог для монтирования этого раздела и примонтировать его командой mount:
$ sudo mkdir /mnt/test
$ sudo mount /dev/sda2 /mnt/test
В случае, когда другие обязательные системные каталоги (/home, /boot) вынесены в отдельные разделы, то их также необходимо примонтировать:
В-третьих:
Теперь следует примонтировать служебные каталоги, необходимые для обеспечения взаимодействия будущей системной среды Chroot с ядром:
Иногда, для того, чтобы было возможно использовать сеть, необходимо скопировать файл resolv.conf:
Теперь можно подключить командную оболочку (например Bash) к новому корню и, собственно, создать новую среду Chroot:
С этого момента всё системное окружение переориентировано на работу с корневой ФС раздела sda2 и связанными с ним другими системными и служебными каталогами.
Полезным будет также выполнить инициализацию системных и сеансовых (пользовательских) переменных окружения:
По завершении работы в среде Chroot, выыход из неё осуществляется командой:
После этого необходимо отмонтировать корневую и все остальные ФС, которые были примонтированы ранее:
Вопросы безопасности
При первом знакомстве с командой chroot, да и вообще с работой Chroot-среды, вполне закономерно может показаться, что эту технику можно использовать для защиты системы. И это действительно так и есть, но лишь отчасти, поскольку chroot допустимо использовать как дополнительный уровень защиты, сужающий направления и варианты атак.
На самом же деле, выйти из Chroot-окружения достаточно легко. Это связано, в первую очередь с несовершенством механизма работы chroot, поскольку он создавался изначально для быстрого и относительно простого доступа к ресурсам системы «из вне». Безопасности как таковой, внимания практически не уделялось, поскольку опять же, предполагалось использование chroot только в случаях согласованного и доверенного доступа к системе.
Механизмы обхода chroot достаточно просты. Например, один из них заключается в создании в Chroot-среде файла-устройства для устройства хранения с последующим обращением к этому устройству с помощью этого файла.
Заключение
В заключение стоит ещё раз отметить, что использование chroot требует особой «деликатности». Допускать к работе с chroot следует строго проверенных пользователей. В остальном же, как можно было убедиться, сама команда очень проста. А в основе её применения лежат правильное определение целевых разделов и грамотное их монтирование. Т.е. надлежащая подготовка системной среды для Chroot.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Chroot target что это
Команда chroot позволяет выполнить другую команду с измененным путем к корневой директории. Хотя она и может пригодиться для выполнения различных административных задач, чаще всего о ней упоминают как о методе защиты отдельных служб или процессов, заключающемся в их запуске с использованием новой нестандартной корневой директории. Преимущество данного метода заключается в том, что служба или процесс исполняется в окружении chroot, изолированном от таких важных хранилищ системных файлов, как директория /etc или других не менее важных файлов, хранящихся в системных директориях. Вместе с данным методом защиты используется еще один метод, заключающийся в запуске служб или процессов с использованием учетных записей пользователей с минимальными наборами привилегий.
Например, при активации поддержки chroot служба доменных имен named использует в качестве корневой директории директорию /var/named/ и запускается от лица локального пользователя с именем «named» (с минимальными привилегиями) в отличие от корневой директории системы и учетной записи пользователя root. Поэтому если сервер named будет скомпрометирован взломщиком или вредоносной программой, будут повреждены лишь файлы из директории /var/named (новой корневой директории сервера), ведь служба named не может получить доступ к файлам, находящимися за приделами окружения chroot, а пользователь с именем named не имеет достаточных прав для чтения каких-либо других системных файлов.
Обратите внимание на то, что окружение chroot все же можно покинуть с помощью различных специальных техник. Одна из таких техник связана с созданием файла устройства (с помощью команды mknod) для жесткого диска в рамках окружения chroot и доступом к содержимому этого жесткого диска посредством созданного файла устройства. Еще одна техника связана с осуществлением манипуляций с сетевым трафиком, передаваемым на машину и отправляемым с нее. Наконец, существует еще одна техника, связанная с управлением работой ядра ОС либо напрямую, либо посредством дополнительных загруженных модулей.
Базовый синтаксис команды выглядит следующим образом:
Примеры использования
Запуск процесса с измененной корневой директорией
# chroot /home/alex /home/alex/myprogram
Запуск процесса с измененной корневой директорией от лица другого пользователя
Запуск процесса с измененной корневой директорией с дополнительными группами пользователей
Советы по использованию поддержки chroot в системных службах
Для того, чтобы сократить шансы проникновения злоумышленников за пределы окружения chroot с помощью одной из выше описанных техник следует смонтировать файловую систему для окружения chroot с параметром «nodev». Создание небольшой узловой файловой системы или раздела для окружения chroot не представляет каких-либо сложностей.
Apache
Хотя веб-сервер Apache и может быть запущен посредством команды chroot таким же образом, как и любая системная служба, существует также специализированный модуль под названием «mod_chroot», который может использоваться для автоматического запуска Apache в окружении chroot после добавления дополнительной строки в файл конфигурации /etc/httpd.conf.
BIND является одной из самых печально известных программ в плане информационной безопасности. Это отличный кандидат для запуска в рамках окружения chroot, так как после запуска ей не требуется осуществлять доступ к каким-либо файлам конфигурации помимо собственных.
Некоторые серверы FTP автоматически активируют поддержку chroot после добавления символа точки «.» (соответствующего текущей директории) в путь к домашней директории соответствующего пользователя в файле /etc/passwd.
Chroot
Содержание
Подготовка к переходу в целевую систему [ править ]
Предполагается, что корень целевой системы находится во втором разделе первого диска (/dev/sda2). Перед тем, как сменить корень, мы уже подняли сеть. Но, чтобы в чруте работало преобразование имён в IP-адреса (и обратно), мы скопировали текущий /etc/resolv.conf, например, на случай, если будем ставить пакеты из сети.
Также мы сделали bind-mount ВСЕХ устройств из исходной системы. Все необходимые устройства должны быть в будущем /dev. bind-mount решает эту задачу одной командой, потому что, как правило, в исходной системе все имеющиеся устройства уже доступны через devtmpfs в /dev. Однако, если мы не доверяем этому чруту, не хотим, чтобы из него можно было оказать негативное воздействие на исходную систему, из которой мы заходим в этот чрут, то делать bind-mount напротив, не следует. Достаточно вручную определить в /mnt/target/dev только необходимые ноды устройств (man mknod).
Последней командой мы переустановили hostname. Если имя хоста выводится в приглашении, то во время работы в чруте имя будет ожидаемым. Также это необходимо для работы с некоторыми утилитами, привязывающимися к имени хоста, например, mdadm. Не забывайте вернуть оригинальный hostname по возвращении в исходную систему!
Переход в целевую систему [ править ]
В простом случае так. PS1 рекомендуется менять, чтобы визуально отличать приглашение в чруте от приглашений в других терминалах. Вместо /bin/bash можно указать свою любимую оболочку. Предлагаемый выше вызов как бы перенесёт вас в целевую систему, в точку, когда система с ядром и initrd уже загрузились, когда запустились все службы, когда было дано дано приглашение войти в систему, разве что без ввода логина и пароля. На самом деле ничего этого, конечно, не было, просто при запуске процесс /bin/bash получил в качестве «корневой» директорию /mnt/target. Ни /bin/bash, ни что-либо из него запущенное не смогут увидеть директории выше уровнем, им доступно только содержимое /mnt/target, которое они видят как «/». Но есть ещё один существенный нюанс. Команда выше передаёт все переменные окружения из исходной системы, а это далеко не всегда желательно. Более длинный, но более безопасный вариант запуска мог бы выглядеть следующим образом:
Первым делом в целевой системе [ править ]
Первая и наиболее предпочтительная форма подключения /proc, /sys и /dev/pts. Про другие варианты говорится далее.
Выход из целевой системы [ править ]
Не забываем отмонтировать всё, что было смонтировано ранее. Обращаем внимание на синтаксис.
Чрут в экзотическую систему [ править ]
В случае, если в целевой системе отсутствует команда mount, что совсем не характерно для ALT Linux, смонтировать в ней /proc, /sys и /dev/pts не получится. Тогда придётся сделать это заранее до перехода в экзотический чрут.
Хотя последняя форма наиболее универсальная, есть целый ряд причин, по которым предпочтительно монтировать эти три файловые системы только по мере необходимости, и только изнутри самого чрута.
Кроме того, возможен чрут из 64-бит исходной системы в 32-бит целевую систему. В ALT Linux для этих целей используется setarch.
При отсутствии /usr/bin/env в целевой системе, что также не характерно для ALT Linux, достаточно поменять аргументы местами, например:
А можно ли попроще? [ править ]
Да, можно. Так как мы используем ALT Rescue, то сразу после загрузки нам доступен скрипт mount-system (о чём будет подсказка). Делаем так:
Если что-то пошло не так, то переходим к началу статьи.
chroot (Русский)
Chroot — операция изменения корневого каталога диска для запущенного процесса и его дочерних процессов. Программа, запущенная в таком окружении не может получить доступ к файлам вне нового корневого каталога. Это измененное окружение называется chroot jail.
Contents
Причины
Изменение корневого каталога обычно производится для выполнения действий по обслуживанию систем, загрузка и/или вход в которых стали невозможны. В таком режиме, например, могут быть выполнены:
Требования
Монтирование разделов
Корневой раздел среды Linux, в которую вы хотите войти с chroot, должен быть первым делом смонтирован. Чтобы найти имя раздела, выполните:
Затем создайте каталог для монтирования корневого раздела и смонтируйте его:
Если отдельные системные каталоги были вынесены на отдельные разделы, их также нужно смонтировать в файловую систему корневого раздела:
Изменение корневого раздела
Используя arch-chroot
Запустите arch-chroot с указанием нового корневого каталога:
Чтобы запустить командную оболочку bash вместо sh:
Используя chroot
Смонтируйте временные интерфейсные файловые системы:
Чтобы использовать интернет-соединение в chroot может понадобиться скопировать resolv.conf:
Чтобы запустить bash в окружении chroot:
После входа в сеанс chroot может понадобиться проинициализировать среду командной оболочки в новой среде:
Используя systemd-nspawn
systemd-nspawn может использоваться для запуска команды или операционной системы в легковесном контейнере. Во многих случаях он похож на chroot, но является более мощным инструментом, так как он полностью эмулирует отдельную иерархию файловой системы и дерево процессов, различные системы межпроцессного взаимодействия, имя хоста и домена.
Перейдите в точку монтирования нового корневого раздела и запустите systemd-nspawn:
Чтобы вернуться в основную систему, просто разлогиньтесь или запустите команду poweroff. После этого вы можете размонтировать разделы, как показано в #Выход из среды chroot.
Запуск графических приложений в среде chroot
Если у вас есть запущенный X-сервер, вы сможете запускать даже графические приложения в среде chroot.
Чтобы разрешить среде chroot соединение с сервером X, откройте виртуальный терминал внутри сервера (то есть, внутри рабочего стола пользователя, который в данный момент вошел в систему), запустите команду xhost, которая даст права каждому подключаться к X-серверу пользователя:
Теперь, для соединения приложений с сервером X, установите переменной окружения DISPLAY в сеансе chroot значение, совпадающее с переменной окружения DISPLAY пользователя, от имени которого запущен сервер. То есть, выполните
от имени этого пользователя для того, чтобы узнать значение переменной, и выполните
в среде chroot, установив переменной нужное значение (в данном примере это :0 ).
Выход из среды chroot
После завершения работы, выйдите из сеанса chroot:
Теперь размонтируйте временные файловые системы и корневой раздел:
Без прав суперпользователя
Chroot требует привелегий суперпользователя, что может быть нежелательно. Однако, есть несколько способов симулировать работу chroot, используя альтернативные реализации.
PRoot
Fakechroot
fakechroot является небольшой прослойкой, которая перехватывает системные вызовы chroot и симулирует поведение системы, на самом деле не выполняя реальных вызовов (на которые все равно нет прав). Он может использоваться вместе с fakeroot для создания видимости того, что chroot запускается суперпользователем.
Из чрута — на поверхность: как, почему и что делать?
Основано на реальных событиях.
Представьте себе, что у вас есть крупный проект, для которого необходимо собирать софт. А ещё у вас есть желание замутить сборочную ферму, на которой ваши подчинённые будут собирать нужный софт. А ещё это всё происходит под Linux-ом, и каждому надо организовать «чистое» окружение с минимумом затрат. Как это сделать?
В зале подняли руки несколько человек и воскликнули «chroot!». Вы согласились, что это просто, быстро и каждый получает полностью ресурсы хостовой машины. Все заапплодировали, решение принято.
А через неделю после интеграции этого решения и после увольнения сотрудника «икс» вы просыпаетесь — а на сервере девственно чистый жёсткий диск. Злодей уничтожил труды разработчиков, работа встала.
Почему же он сумел удалить всё, если был в «защищённом» «запертом» чруте?
Вся суть — в том, что злодей мог ставить в чрут программы. Или же просто обладал в чруте правами root.
Начнём издалека. В Linux помимо реальных файловых систем существуют виртуальные. Одной из таких систем является /proc/ — файловая система информации ядра. Например, команда
покажет нам содержимое конфиг-файла, с которым собиралось загруженное ядро. В этой файловой системе есть куча информации, и она почти всегда нужна, когда ты собираешь что-то под Linux-ом. Соотвественно — она была примонтирована в chroot, в котором сидел наш вояка. А так как chroot не предполагает загрузку собственного ядра — примонтирована она была из хостовой системы командой типа
и, что важно, она содержит информацию и о хостовой системе!
В /proc существуют папки вида /proc/$pid/cwd, в которых можно посмотреть содержимое папки, которая является текущей для данного процесса (а для текущего процесса существует также шорткат /proc/self/pid). Существуют такие папки для всех запущенных процессов, в том числе — для init.
А какая папка является текущей для init? Верно, /! А так как init у нас — хостовой, то задача «выбраться наверх» сводится к проделыванию
и потиранию ручек: вуаля, мы снаружи! Дальнейшая свобода действий ограничивается лишь фантазией воспользовавшегося уязвимостью.