Chroot environment in linux

Изменение корневой системы. Команда 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 восстановление файловой системы на флешке

Должен быть примониторан корневой раздел той 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, выыход из неё осуществляется командой:

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

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

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

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

Читайте также:  Linux mount user group

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

Заключение

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

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

Похожие записи:

Источник

How to build an Ubuntu chroot environment

chroot allows you to change the root directory of your current operating system to another. It’s normally used for development and testing without the high overhead of other methods, such as with virtual machines or docker containers. You can also use chroot to troubleshoot a broken system.

You can create an Ubuntu chroot environment using debootstrap. debootstrap is a tool to create chroot environment for Ubuntu and other Debian-based Linux distributions. You can choose the Ubuntu version use and mount the special filesystems such as proc, sys, and dev to make it a working system.

Steps to build Ubuntu chroot environment:

$ sudo apt update [sudo] password for user: Hit:1 http://jp.archive.ubuntu.com/ubuntu focal InRelease Hit:2 http://jp.archive.ubuntu.com/ubuntu focal-updates InRelease Hit:3 http://jp.archive.ubuntu.com/ubuntu focal-backports InRelease Hit:4 http://jp.archive.ubuntu.com/ubuntu focal-security InRelease Reading package lists. Done Building dependency tree Reading state information. Done All packages are up to date.
$ sudo apt install --assume-yes debootstrap Reading package lists. Done Building dependency tree Reading state information. Done Suggested packages: arch-test squid-deb-proxy-client The following NEW packages will be installed: debootstrap 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. Need to get 39.4 kB of archives. After this operation, 299 kB of additional disk space will be used. Get:1 http://jp.archive.ubuntu.com/ubuntu focal-updates/main amd64 debootstrap all 1.0.118ubuntu1.1 [39.4 kB] Fetched 39.4 kB in 1s (66.1 kB/s) Selecting previously unselected package debootstrap. (Reading database . 107133 files and directories currently installed.) Preparing to unpack . /debootstrap_1.0.118ubuntu1.1_all.deb . Unpacking debootstrap (1.0.118ubuntu1.1) . Setting up debootstrap (1.0.118ubuntu1.1) . Processing triggers for man-db (2.9.1-1) .
$ sudo debootstrap --variant=buildd focal chroot-ubuntu I: Retrieving InRelease I: Checking Release signature I: Valid Release signature (key id F6ECB3762474EDA9D21B7022871920D1991BC93C) I: Retrieving Packages I: Validating Packages I: Resolving dependencies of required packages. I: Resolving dependencies of base packages. I: Checking component main on http://archive.ubuntu.com/ubuntu. I: Retrieving adduser 3.118ubuntu2 I: Validating adduser 3.118ubuntu2 I: Retrieving apt 2.0.2 I: Validating apt 2.0.2 I: Retrieving base-files 11ubuntu5 I: Validating base-files 11ubuntu5 ##### snipped

Change focal to any Ubuntu release code name that’s still supported.
Related: List of Ubuntu releases

$ debootstrap --help Usage: debootstrap [OPTION].  [ []] Bootstrap a Debian base system into a target directory. --help display this help and exit --version display version information and exit --verbose don't turn off the output of wget --download-only download packages, but don't perform installation --print-debs print the packages to be installed, and exit --arch=A set the architecture to install (use if no dpkg) [ --arch=powerpc ] --include=A,B,C adds specified names to the list of base packages --exclude=A,B,C removes specified packages from the list --extra-suites=A,B,C also use packages from the listed suites of the archive --components=A,B,C use packages from the listed components of the archive --variant=X use variant X of the bootstrap scripts (currently supported variants: buildd, fakechroot, minbase) --no-merged-usr do not make // symlinks to /usr/ --keyring=K check Release files against keyring K --no-check-gpg avoid checking Release file signatures --force-check-gpg force checking Release file signatures (also disables automatic fallback to HTTPS in case of a missing keyring), aborting otherwise --no-resolve-deps don't try to resolve dependencies automatically --log-extra-deps record extra dependency info in debootstrap.log --cache-dir=DIR Use specified directory as package cache directory --unpack-tarball=T acquire .debs from a tarball instead of http --make-tarball=T download .debs and create a gzipped tarball --second-stage-target=DIR Run second stage in a subdirectory instead of root (can be used to create a foreign chroot) (requires --second-stage) --extractor=TYPE override automatic .deb extractor selection (supported: dpkg-deb ar) --debian-installer used for internal purposes by debian-installer --private-key=file read the private key from file --certificate=file use the client certificate stored in file (PEM) --no-check-certificate do not check certificate against certificate authorities
$ sudo mount -t proc /proc chroot-ubuntu/proc $ sudo mount --rbind /sys chroot-ubuntu/sys $ sudo mount --rbind /dev chroot-ubuntu/dev
$ sudo chroot chroot-ubuntu /bin/bash bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8) root@host:/#
root@host:/# ls bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var root@host:/# uname -a Linux host 5.4.0-33-generic #37-Ubuntu SMP Thu May 21 12:53:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux root@host:/# df -h Filesystem Size Used Avail Use% Mounted on tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup udev 1.9G 0 1.9G 0% /dev tmpfs 2.0G 0 2.0G 0% /dev/shm
$ sudo umount chroot-ubuntu/proc chroot-ubuntu/sys chroot-ubuntu/dev

Источник

Оцените статью
Adblock
detector