- Изменение корневой системы. Команда chroot в Linux
- В каких случаях удобно использование chroot?
- Синтаксис и основные опции
- Подготовка системной среды для режима Chroot
- Вопросы безопасности
- Заключение
- chroot (Русский)
- Contents
- Причины
- Требования
- Монтирование разделов
- Изменение корневого раздела
- Используя arch-chroot
- Используя chroot
- Используя systemd-nspawn
- Запуск графических приложений в среде chroot
- Выход из среды chroot
- Без прав суперпользователя
- PRoot
- Fakechroot
- chroot
- Contents
- Reasoning
- Requirements
- Usage
- Using arch-chroot
- Enter a chroot
- Run a single command and exit
- Using chroot
- Run graphical applications from chroot
- Without root privileges
- PRoot
- Fakechroot
- Unshare
- Troubleshooting
- arch-chroot: /location/of/new/root is not a mountpoint. This may have undesirable side effects.
Изменение корневой системы. Команда 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.
Источник