Изменение корневой системы. Команда chroot в Linux

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

В каких случаях удобно использование chroot?

Итак, команда chroot позволяет изменить системное окружение для выполняемых процессов. Таким образом, они не могут получить доступ к ресурсам вне нового окружения. Исходя из этого, использование chroot очень практично, например в следующих ситуациях:

  • сброс паролей суперпользователя root;
  • обновление или создание образов initramfs для ядра;
  • восстановление состояния пакетов приложений;
  • восстановление или обновление работы загрузчика, например, GRUB – это самая распространённая ситуация.

Как можно видеть, номенклатура применения для chroot довольно широка. При том, что сами вышеперечисленные задачи требуют хорошего опыта при работе и/или администрировании UNIX/Linux-систем.

Особняком стоит вопрос безопасности. Ведь в данном случае даже с помощью «безобидного» Live-CD/DVD/USB абсолютно скрытно можно скомпрометировать систему и сделать с системой всё что угодно. Но следует заметить, что это уже в большей степени вопрос об уровне физического доступа к самой системе.

Синтаксис и основные опции

Согласно официальной документации, синтаксис команды chroot следующий:

chroot [OPTION] NEWROOT [COMMAND [ARG]. . .]

Как видно, в качестве NEWROOT указывается новый путь в файловой системе, далее может следовать, собственно, команда со своими аргументами. В следующей таблице перечислены опции chroot, которых не так много:

Опция Значение
—groups=G_LIST Задаёт список групп пользователей перечислением в формате g1,g2,…gn.
—userspec=USER:GROUP Задаёт пользователя и группу в формате ПОЛЬЗОВАТЕЛЬ:ГРУППА
—skip-chdir Запрещает изменение рабочего каталога на корневой «/».

Подготовка системной среды для режима Chroot

Для того, чтобы обеспечить полноценное использование Chroot-среды, необходимо предварительно соблюсти ряд условий, а также подготовить для неё соответствующее окружение.
Во-первых:

  • вычислительные архитектуры двух окружений должны быть идентичны, т. е. если среда, из которой происходит загрузка является amd64-архитектурой, то и среда, в которой производится изменение корневой ФС должна быть также amd64;
  • для среды Chroot должны быть подключены модули ядра, которые ей нужны, в соответствии с выполняемыми задачами, например, должны быть подключены модули для обеспечения работы с разными типами ФС;
  • Наличие возможности загрузки из Live-образов: CD/DVD/USB-носитель;
  • привилегии суперпользователя root.

Во-вторых:

Должен быть примониторан корневой раздел той Linux-системы, в которую необходимо выполнить chroot. Чтобы легче сориентироваться в наименовании разделов и определить нужный, можно воспользоваться командой lsblk – она выведет наименования всех доступных в системе разделов с соответствующими им точками монтирования:

$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 232,9G 0 disk
├─sda1 8:1 0 524M 0 part /boot
├─sda2 8:2 0 18,6G 0 part /
├─sda3 8:3 0 167,7G 0 part /usr
├─sda4 8:4 0 18,6G 0 part /var
└─sda5 8:5 0 27,5G 0 part /opt
sdb 8:32 0 149,1G 0 disk
└─sdb1 8:33 0 149,1G 0 part /home
sr0 11:0 1 1024M 0 rom

В данном случае это sda2. Теперь нужно создать каталог для монтирования этого раздела и примонтировать его командой mount:

$ sudo mkdir /mnt/test
$ sudo mount /dev/sda2 /mnt/test

В случае, когда другие обязательные системные каталоги (/home, /boot) вынесены в отдельные разделы, то их также необходимо примонтировать:

$ sudo mount /dev/sda1 /mnt/test/boot/
$ sudo mount /dev/sdb1 /mnt/test/home/

В-третьих:

Теперь следует примонтировать служебные каталоги, необходимые для обеспечения взаимодействия будущей системной среды Chroot с ядром:

$ cd /mnt/test
$ sudo mount -t proc proc proc/
$ sudo mount --rbind /sys sys/
$ sudo mount --rbind /dev dev/

Иногда, для того, чтобы было возможно использовать сеть, необходимо скопировать файл resolv.conf:

$ sudo cp /etc/resolv.conf etc/resolv.conf

Теперь можно подключить командную оболочку (например Bash) к новому корню и, собственно, создать новую среду Chroot:

sudo chroot /mnt/test /bin/bash

С этого момента всё системное окружение переориентировано на работу с корневой ФС раздела sda2 и связанными с ним другими системными и служебными каталогами.
Полезным будет также выполнить инициализацию системных и сеансовых (пользовательских) переменных окружения:

$ source /etc/profile
$ source ~/.bashrc

По завершении работы в среде Chroot, выыход из неё осуществляется командой:

$ exit

После этого необходимо отмонтировать корневую и все остальные ФС, которые были примонтированы ранее:

$ cd /
$ sudo umount --recursive /mnt/test/

Вопросы безопасности

При первом знакомстве с командой chroot, да и вообще с работой Chroot-среды, вполне закономерно может показаться, что эту технику можно использовать для защиты системы. И это действительно так и есть, но лишь отчасти, поскольку chroot допустимо использовать как дополнительный уровень защиты, сужающий направления и варианты атак.
На самом же деле, выйти из Chroot-окружения достаточно легко. Это связано, в первую очередь с несовершенством механизма работы chroot, поскольку он создавался изначально для быстрого и относительно простого доступа к ресурсам системы «из вне». Безопасности как таковой, внимания практически не уделялось, поскольку опять же, предполагалось использование chroot только в случаях согласованного и доверенного доступа к системе.

Механизмы обхода chroot достаточно просты. Например, один из них заключается в создании в Chroot-среде файла-устройства для устройства хранения с последующим обращением к этому устройству с помощью этого файла.

Заключение

В заключение стоит ещё раз отметить, что использование chroot требует особой «деликатности». Допускать к работе с chroot следует строго проверенных пользователей. В остальном же, как можно было убедиться, сама команда очень проста. А в основе её применения лежат правильное определение целевых разделов и грамотное их монтирование. Т.е. надлежащая подготовка системной среды для Chroot.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Понравилась статья? Поделиться с друзьями:
Comments: 2
  1. Саша

    Спасибо, лучшая статья по этой теме :idea:

  2. Александр

    Хорошая статья получилась. Приятно читать. Спасибо.

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

ИТ Проффи

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: