что такое chroot в linux

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

Содержание

Подготовка к переходу в целевую систему [ править ]

Предполагается, что корень целевой системы находится во втором разделе первого диска (/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

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

Usage

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

Using arch-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:

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

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

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.

Источник

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 запускается суперпользователем.

Источник

Chroot

Chroot (англ. Change root — «изменение корневого каталога») — это системная утилита Unix, используемая для смены текущего корневого каталога с целью создания нового окружения, логически отдельного от основной системы. Это новое окружение также известно как «chroot jail» («тюрьма»). Пользователь, работающий внутри jail, не может видеть файлы вне среды, которой они ограничены, или обращаться к ним.

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

Contents

Предварительные требования

Настройка окружения

При создании новой установки chroot первым делом необходимо создать каталог для chroot, например в /mnt/mychroot :

Чтобы смонтировать существующую установку из раздела, выполните следующую команду. Не забудьте заменить из приведенного примера на устройство и раздел существующей установки:

Если установка была уже произведена в одном из подкаталогов корневого каталога, вышеприведенные шаги можно пропустить.

Распаковка системных файлов и дерева Portage (новая установка)

При создании новой установки, следующим шагом будет загрузка файла стадии stage3 и архива Portage и их последующая распаковка внутри chroot каталога. Для получения дополнительной информации по данному вопросу, посмотрите Загрузка архива stage и Распаковка архива stage в Gentoo Handbook.

Конфигурация

Перед тем, как изменить корневой каталог, нам необходимо смонтировать несколько каталогов.

Использование

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

При создании новой установки необходимо синхронизировать дерево Portage, чтобы убедиться, что он обновлен.

Init-скрипт

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

Источник

Понравилась статья? Поделиться с друзьями:

Не пропустите наши новые статьи:

  • Что такое ccxprocess в windows 10
  • что такое cbs в windows
  • что такое catch в windows 10
  • что такое catalyst control center для windows 10
  • Что такое cat программы

  • Операционные системы и программное обеспечение
    0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest
    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии