Chroot arch linux что это

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

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

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

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

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

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

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

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

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

Как видно, в качестве 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 – она выведет наименования всех доступных в системе разделов с соответствующими им точками монтирования:

В данном случае это 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 (Русский)

Chroot — операция изменения корневого каталога диска для запущенного процесса и его дочерних процессов. Программа, запущенная в таком окружении не может получить доступ к файлам вне нового корневого каталога. Это измененное окружение называется chroot jail.

Contents

Причины

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

Требования

  • Наличие привилегий суперпользователя.
  • Возможность загрузки с другой среды Linux, например, LiveCD, загрузочного USB-носителя или другого установленного дистрибутива.
  • Совпадение архитектур двух сред: с которой производится загрузка и в которую происходит изменение корня. Архитектуру текущей среды можно узнать командой # uname -m (например, i686 или x86_64).
  • Если среде chroot необходимы какие-нибудь модули ядра, они должны быть загружены.
  • Если нужен раздел подкачки, он должен быть включен: swapon /dev/sdxY .
  • Интернет-соединение установлено, если нужно.

Монтирование разделов

Корневой раздел среды Linux, в которую вы хотите войти с chroot, должен быть первым делом смонтирован. Чтобы найти имя раздела, выполните:

Затем создайте каталог для монтирования корневого раздела и смонтируйте его:

Если отдельные системные каталоги были вынесены на отдельные разделы, их также нужно смонтировать в файловую систему корневого раздела:

Изменение корневого раздела

Используя arch-chroot

Bash-скрипт arch-chroot является частью пакета arch-install-scripts из официальных репозиториев. Перед тем, как запускать /usr/bin/chroot , этот скрипт монтирует интерфейсные файловые системы вроде /proc и делает /etc/resolv.conf доступным из под окружения chroot.

Запустите arch-chroot с указанием нового корневого каталога:

Чтобы запустить командную оболочку bash вместо sh:

Чтобы запустить mkinitcpio -p linux в окружении chroot минуя создание сеанса в командной оболочке:

Используя chroot

Смонтируйте временные интерфейсные файловые системы:

Чтобы использовать интернет-соединение в chroot может понадобиться скопировать resolv.conf:

Чтобы запустить bash в окружении chroot:

После входа в сеанс chroot может понадобиться проинициализировать среду командной оболочки в новой среде:

Используя systemd-nspawn

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

Перейдите в точку монтирования нового корневого раздела и запустите systemd-nspawn:

Нет необходимости самостоятельно монтировать интерфейсные файловые системы вроде /proc , так как systemd-nspawn запускает новый процесс init в созданной виртуальной среде, который берет на себя эту задачу. Это похоже на загрузку второй операционной системы внутри основной, но без создания виртуальной машины.

Чтобы вернуться в основную систему, просто разлогиньтесь или запустите команду poweroff. После этого вы можете размонтировать разделы, как показано в #Выход из среды chroot.

Запуск графических приложений в среде chroot

Если у вас есть запущенный X-сервер, вы сможете запускать даже графические приложения в среде chroot.

Чтобы разрешить среде chroot соединение с сервером X, откройте виртуальный терминал внутри сервера (то есть, внутри рабочего стола пользователя, который в данный момент вошел в систему), запустите команду xhost, которая даст права каждому подключаться к X-серверу пользователя:

Теперь, для соединения приложений с сервером X, установите переменной окружения DISPLAY в сеансе chroot значение, совпадающее с переменной окружения DISPLAY пользователя, от имени которого запущен сервер. То есть, выполните

от имени этого пользователя для того, чтобы узнать значение переменной, и выполните

в среде chroot, установив переменной нужное значение (в данном примере это :0 ).

Выход из среды chroot

После завершения работы, выйдите из сеанса chroot:

Теперь размонтируйте временные файловые системы и корневой раздел:

Без прав суперпользователя

Chroot требует привелегий суперпользователя, что может быть нежелательно. Однако, есть несколько способов симулировать работу chroot, используя альтернативные реализации.

PRoot

PRoot может использоваться для изменения корневого раздела и использовать mount —bind без привелегий суперпользователя. Это полезно для ограничивания доступа приложений до единственного каталога или запуска программ, собранных для другой архитектуры. Однако PRoot имеет ограничения, связанные с тем, что все файлы принадлежат пользователю на основной системе. PRoot предоставляет опцию —root-id , которая может быть использована в качестве обходного пути для этих ограничений, по тому же принципу (хотя и более ограниченно), что и в fakeroot.

Fakechroot

fakechroot является небольшой прослойкой, которая перехватывает системные вызовы chroot и симулирует поведение системы, на самом деле не выполняя реальных вызовов (на которые все равно нет прав). Он может использоваться вместе с fakeroot для создания видимости того, что chroot запускается суперпользователем.

Источник

chroot

A chroot is an operation that changes the apparent root directory for the current running process and their children. A program that is run in such a modified environment cannot access files and commands outside that environmental directory tree. This modified environment is called a chroot jail.

Contents

Reasoning

Changing root is commonly done for performing system maintenance on systems where booting and/or logging in is no longer possible. Common examples are:

Requirements

  • Root privilege.
  • Another Linux environment, e.g. a LiveCD or USB flash media, or from another existing Linux distribution.
  • Matching architecture environments; i.e. the chroot from and chroot to. The architecture of the current environment can be discovered with: uname -m (e.g. i686 or x86_64).
  • Kernel modules loaded that are needed in the chroot environment.
  • Swap enabled if needed:
  • Internet connection established if needed.

Usage

There are two main options for using chroot, described below.

Using arch-chroot

The bash script arch-chroot is part of the arch-install-scripts package. Before it runs /usr/bin/chroot , the script mounts API filesystems like /proc and makes /etc/resolv.conf available from the chroot.

Enter a chroot

Run arch-chroot with the new root directory as first argument:

For example, in the installation guide this directory would be /mnt :

To exit the chroot simply use:

Run a single command and exit

To run a command from the chroot, and exit again append the command to the end of the line:

For example, to run mkinitcpio -p linux for a chroot located at /mnt/arch do:

Using chroot

In the following example /location/of/new/root is the directory where the new root resides.

First, mount the temporary API filesystems:

If you are running a UEFI system you will also need access to EFI variables. Otherwise, when installing GRUB you will receive a message similar to: UEFI variables not supported on this machine :

Next, in order to use an internet connection in the chroot environment copy over the DNS details:

Finally, to change root into /location/of/new/root using a bash shell:

After chrooting it may be necessary to load the local bash configuration:

When finished with the chroot, you can exit it via:

Then unmount the temporary file systems:

Run graphical applications from chroot

If you have an X server running on your system, you can start graphical applications from the chroot environment.

To allow the chroot environment to connect to an X server, open a virtual terminal inside the X server (i.e. inside the desktop of the user that is currently logged in), then run the xhost command, which gives permission to anyone to connect to the user’s X server (see also Xhost):

Then, to direct the applications to the X server from chroot, set the DISPLAY environment variable inside the chroot to match the DISPLAY variable of the user that owns the X server. So for example, run:

as the user that owns the X server to see the value of DISPLAY. If the value is «:0» (for example), then in the chroot environment run:

Without root privileges

Chroot requires root privileges, which may not be desirable or possible for the user to obtain in certain situations. There are, however, various ways to simulate chroot-like behavior using alternative implementations.

PRoot

PRoot may be used to change the apparent root directory and use mount —bind without root privileges. This is useful for confining applications to a single directory or running programs built for a different CPU architecture, but it has limitations due to the fact that all files are owned by the user on the host system. PRoot provides a —root-id argument that can be used as a workaround for some of these limitations in a similar (albeit more limited) manner to fakeroot.

Fakechroot

fakechroot is a library shim which intercepts the chroot call and fakes the results. It can be used in conjunction with fakeroot to simulate a chroot as a regular user.

Unshare

Unshare, part of util-linux , can be used to create a new kernel namespace. This works with the usual chroot command. For example:

Troubleshooting

arch-chroot: /location/of/new/root is not a mountpoint. This may have undesirable side effects.

Upon executing arch-chroot /location/of/new/root a warning is issued:

See arch-chroot(8) for an explanation and an example of using bind mounting to make the chroot directory a mountpoint.

Источник

Читайте также:  Wifi монитор для linux
Оцените статью