- chroot (Русский)
- Contents
- Причины
- Требования
- Монтирование разделов
- Изменение корневого раздела
- Используя arch-chroot
- Используя chroot
- Используя systemd-nspawn
- Запуск графических приложений в среде chroot
- Выход из среды chroot
- Без прав суперпользователя
- PRoot
- Fakechroot
- Изменение корневой системы. Команда chroot в Linux
- В каких случаях удобно использование chroot?
- Синтаксис и основные опции
- Подготовка системной среды для режима Chroot
- Вопросы безопасности
- Заключение
- Подготовка chroot-окружений для тестирования на сервере Ubuntu 12.04
- Что такое chroot-окружение?
- Когда не нужно использовать chroot?
- Настройка инструментов
- Заполнение chroot-окружения
- Работа в chroot-окружении
- Выход из chroot-окружения
- Заключение
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 в 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-окружений для тестирования на сервере Ubuntu 12.04
В системе Linux часто возникает необходимость изолировать определённое приложение, пользователя или окружение. В различных операционных системах для этого применяются разные методы; в Linux для этого традиционно используется окружение chroot. В данном руководстве речь пойдёт о том, как настроить изолированное chroot-окружение, которое служит в качестве барьера между операционной системой и отдельным окружением. Как правило, это необходимо для проведения тестирования. В руководстве рассматриваются случаи, в которых необходимо использовать chroot, а также ситуации, в которых больше подойдёт альтернативное решение. Все примеры выполнены на виртуальном выделенном сервере Ubuntu 12.04. Многим системным администраторам пригодится навык создания окружения chroot.
Что такое chroot-окружение?
Chroot-окружение – это системный вызов, который временно перемещает root каталог в новую папку. Как правило, root каталог находится в «/». Но при помощи chroot можно задать другой каталог, который будет служить как root-каталог в окружении chroot. Любые приложения, которые запускаются внутри изолированного окружения, в принципе не могут взаимодействовать с остальной операционной системой. Кроме того, не-рутовый пользователь (non-root), помещённый в chroot-окружение, не сможет перемещаться по иерархии каталогов. Когда нужны chroot-окружения?
Chroot-окружение необходимо в самых различных ситуациях. К примеру, оно позволяет собирать, устанавливать и тестировать программное обеспечение в среде, которая отделена от остальной операционной системы. Также его можно использовать для запуска 32-битных приложений в 64-битной среде.
В целом, chroot – это способ временно воссоздать окружение операционной системы из подмножества файловой системы.
Это позволяет временно перейти с привычных утилит на их экспериментальные версии, посмотреть, как приложения ведут себя в чистом окружении; также chroot может помочь выполнить операции по восстановлению, развернуть систему или создать дополнительный барьер, чтобы предотвратить потенциальный взлом системы.
Когда не нужно использовать chroot?
Chroot-окружение Linux не стоит использовать в качестве средства защиты. В целом, окружения chroot могут быть использованы как дополнительный уровень безопасности, но они не достаточно изолированы, чтобы выступать в качестве полноценной защиты системы.
Конечно, chroot-окружения, создадут дополнительную работу для непривилегированного пользователя; однако их следует рассматривать как способ усиления безопасности сервера, а не как полноценную защиту, так как они способны только уменьшить количество векторов атаки, не обеспечивая полной безопасности. Для пользователей, которые нуждаются в полной изоляции, существуют боле надёжные решения (контейнеры Linux, Docker и т.п.).
Настройка инструментов
Чтобы добиться максимальной производительности chroot, нужно использовать некоторые инструменты для установки основных файлов дистрибутивов. Это ускорит процесс и предоставит необходимые библиотеки и пакеты.
Первый инструмент – dchroot или schroot – используется для управления chroot-окружениями. Он также позволяет выполнять команды в chroot-окружении.
Команда dchroot несколько устарела и сейчас используется как оболочка совместимости для более современной команды schroot.
Debootstrap – ещё один необходимый инструмент, создающий операционную систему в подкаталоге другой системы. Это позволяет ускорить запуск, так как chroot-окружение требует определенных инструментов и библиотек для того, чтобы функционировать должным образом.
Установите эти пакеты (рекомендуется установить dchroot, так как он поставляется с schroot):
sudo apt-get update
sudo apt-get install dchroot debootstrap
Теперь необходимые инструменты установлены, и нужно только указать каталог, который будет использоваться как root-каталог окружения chroot. Для этого создайте в root-каталоге каталог test:
sudo mkdir /test
Как уже говорилось, команда dchroot в современных системах используется как оболочка для более мощной команды schroot. Потому нужно отредактировать конфигурационный файл schroot, внеся в него свои данные.
Откройте файл с привилегиями администратора:
sudo nano /etc/schroot/schroot.conf
В файл нужно добавить опции, которые будут использоваться для создания изолированной системы. Например, в Ubuntu нужно указать версию и т.п. Для Debian существуют хорошо закомментированные значения (т.к. команда schroot изначально разрабатывалась для Debian).
Итак, в данный момент используется система Ubuntu 12.04; для примера предположим, что вам необходимо протестировать некоторые пакеты для Ubuntu 13.10 (кодовое название – Saucy Salamander). Для того нужно внести следующие данные:
[saucy] description=Ubuntu Saucy
location=/test
priority=3
users=demouser
groups=sbuild
root-groups=root
Сохраните и закройте файл.
Заполнение chroot-окружения
Теперь нужно установить систему в chroot; просто введите:
sudo debootstrap —variant=buildd —arch amd64 saucy /test/ http://mirror.cc.columbia.edu/pub/linux/ubuntu/archive/
Флаг –variant задаёт тип chroot-окружения, которое нужно собрать. Опция build указывает, что нужно также установить инструменты сборки программ «из коробки», которые находятся в пакете build-essential. Узнать о доступных опциях больше можно при помощи команды:
Найдите описание –variant. Флаг –arch указывает архитектуру системы клиента. Если архитектура отличается от родительской архитектуры, нужно также использовать флаг –foreign. После этого нужно вызвать команду debootstrap во второй раз, чтобы завершить установку:
sudo chroot /test /debootstrap/debootstrap —second-stage
Эта команда выполняет установку, в то время как первая команда только загружает пакеты в случае архитектурных различий.
Примечание: Не забудьте флаг –foreign, если архитектура систем не совпадает.
Saucy в команде должно соответствовать имени, заданному в файле schroot.conf. Часть команды /test/ указывает целевой каталог, а URL задаёт адрес репозитория и загружает запрошенные файлы. На самом деле, формат данного файла очень похож на /etc/apt/sources.list. После этого можно просмотреть все файлы, которые были скачаны и установлены, проверив целевой каталог.
ls /test
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
Как видите, выглядит как обыкновенная файловая система, только развёрнута она в нестандартном каталоге.
Работа в chroot-окружении
После установки системы нужно внести несколько заключительных конфигураций, чтобы обеспечить корректную работу chroot-окружения.
Для начала убедитесь в том, что fstab хоста знает о гостевых псевдосистемах. Внесите в конец fstab строки:
sudo nano /etc/fstab
proc /test/proc proc defaults 0 0
sysfs /test/sys sysfs defaults 0 0
Сохраните и закройте файл.
Теперь нужно смонтировать эти системы:
sudo mount proc /test/proc -t proc
sudo mount sysfs /test/sys -t sysfs
Также нужно скопировать файл /etc/hosts, чтобы иметь доступ к корректным данным сети.
cp /etc/hosts /test/etc/hosts
Затем войдите в chroot-окружение из командной строки:
sudo chroot /test/ /bin/bash
Это откроет новое chroot-окружение. Чтобы протестировать его, перейдите в каталог root и введите:
Если команда вернет какое-либо число, кроме 2, значит, вы в окружении chroot. В этом окружении можно устанавливать программы и выполнять различные действия, при этом никак не влияя на остальную систему (кроме использования ресурсов).
Выход из chroot-окружения
Чтобы выйти из окружения chroot, нужно просто отменить некоторые ранее выполненные действия.
Для начала выйдите из chroot как root (как это делается в любом окружении оболочки).
Затем демонитруйте файловые системы:
sudo umount /test/proc
sudo umount /test/sys
Нужно также удалить дополнительные строки из файла /etc/fstab, если только chroot не понадобится позже.
Если же это окружние больше не понадобится, удалите каталог, в котором хранятся все пакеты:
Заключение
Конечно, сегодня существует множество современных технологий (например, Docker), предоставляющих более надёжную изоляцию. Однако chroot-окружения просты в использовании и управлении, а также доступны из операционной системы хоста, что также является несомненным преимуществом.
Запомните случаи, в которых инструмент chroot будет полезен, и старайтесь избегать ситуаций, в которых chroot не сможет помочь.
Chroot-окружения отлично подходят для тестирования и сборки программ различных архитектур без необходимости устанавливать отдельную систему. Это невероятно гибкое решение для различных задач.
Источник