Chroot linux что это
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 в Linux
от sasza
Команда chroot может отправить вас в тюрьму, изолировать среду разработки или тестирования или просто улучшить безопасность вашей системы. Мы покажем вам самый простой способ его использования.
Что такое chroot?
Если вы пытаетесь измерить полезность команды, вы должны учитывать предоставляемые ею функциональные возможности и простоту использования. Если он слишком сложен для использования людьми или слишком многословен, чтобы заставить их попробовать его, функциональность может быть нулевой. Если его никто не использует, он не предоставляет никаких функций.
В обсуждениях с пользователями Linux — лично и на форумах — кажется, что команда chroot считается сложной в использовании или слишком привередливой и утомительной в настройке. Кажется, эта замечательная утилита используется не так часто, как могла бы.
С помощью chroot вы можете настроить и запускать программы или интерактивные оболочки например, Bash в инкапсулированной файловой системе, которая не может взаимодействовать с вашей обычной файловой системой. Все, что находится в среде chroot, записано и содержится. Ничто в среде chroot не может выходить за пределы своего собственного, специального корневого каталога без расширения до привилегий root. Благодаря этому среда этого типа получила прозвище chroot jail. Термин «тюрьма» не следует путать с FreeBSD jail команда, которая создает среду chroot это более безопасно чем обычная среда chroot.
Но на самом деле есть очень простой способ использования chroot, который мы рассмотрим. Мы используем обычные команды Linux, которые будут работать во всех дистрибутивах. В некоторых дистрибутивах Linux есть специальные инструменты для настройки сред chroot, например debootstrap для Ubuntu, но мы здесь не зависимы от дистрибутива.
Когда следует использовать chroot?
В некотором смысле среды chroot ближе к контейнерам, таким как LXC чем к виртуальным машинам. Они легкие, быстро развертываются, а создание и запуск можно автоматизировать. Как и в случае с контейнерами, один из удобных способов их настройки — это установить достаточно операционной системы, чтобы вы могли выполнить то, что требуется. На вопрос «что требуется» можно ответить, посмотрев, как вы собираетесь использовать свою среду chroot.
Вот некоторые распространенные варианты использования:
Разработка программного обеспечения и проверка продукта. Разработчики пишут программное обеспечение, а группа проверки продукта (PV) тестирует его. Иногда PV обнаруживает проблемы, которые невозможно воспроизвести на компьютере разработчика. На компьютере разработчика установлены всевозможные инструменты и библиотеки, которых не будет у обычного пользователя и PV. Часто новое программное обеспечение, которое работает для разработчика, но не для других, оказывается, использует ресурс на ПК разработчика, который не был включен в тестовую версию программного обеспечения. chroot позволяет разработчикам иметь на своем компьютере простую ванильную среду, в которую они могут опустить программное обеспечение, прежде чем передавать его PV. Адаптивная среда может быть настроена с минимальным набором зависимостей, необходимых для программного обеспечения.
Снижение риска развития. Разработчик может создать специальную среду разработки, чтобы все происходящее в ней не могло испортить его настоящий компьютер.
Запуск устаревшего программного обеспечения. Иногда нужно просто запустить старую версию чего-то. Если к старому программному обеспечению предъявляются требования, которые могут противоречить вашей версии Linux или быть несовместимыми с ней, вы можете выполнить chroot среду для проблемного ПО.
Восстановление и обновления файловой системы: Если установка Linux перестает работать, вы можете использовать chroot для монтирования поврежденной файловой системы в точку монтирования на Live CD. Это позволяет вам работать в поврежденной системе и пытаться исправить ее, как если бы она была нормально смонтирована в корневом каталоге /. Это означает, что на ожидаемые пути к файлам в поврежденной системе будут правильно ссылаться из корневого каталога, а не из точки монтирования Live CD. Похожая техника использовалась в статье, описывающей, как перенести файловую систему Linux с ext2 или ext3 на ext4.
Приложения для ограждений. Запуск FTP-сервера или другого подключенного к Интернету устройства в среде chroot ограничивает ущерб, который может нанести внешний злоумышленник. Это может быть ценным шагом в усилении безопасности вашей системы.
Создание среды chroot
Нам нужен каталог, который будет действовать как корневой каталог среды chroot. Чтобы у нас было сокращенное обозначение этого каталога, мы создадим переменную и сохраним в ней имя каталога. Здесь мы настраиваем переменную для хранения пути к каталогу «testroot». Неважно, если этот каталог еще не существует, мы скоро его создадим. Если каталог существует, он должен быть пустым.
Нам нужно создать каталоги для хранения частей операционной системы, которые потребуются нашей среде chroot. Мы собираемся настроить минималистичную среду Linux, которая использует Bash в качестве интерактивной оболочки. Мы также добавим команды touch, rm и ls. Это позволит нам использовать все встроенные команды Bash, а также touch, rm и ls. Мы сможем создавать, перечислять и удалять файлы, а также использовать Bash. И — в этом простом примере — это все.
Теперь мы изменим каталог на наш новый корневой каталог.
Файлы для нас скопированы:
Эти двоичные файлы будут иметь зависимости. Нам нужно узнать, что это такое, и скопировать эти файлы в нашу среду, иначе bash, touch, rm и ls не смогут работать. Нам нужно делать это по очереди для каждой из выбранных нами команд. Сначала мы сделаем Bash. Команда ldd будет перечислить зависимости для нас.
Зависимости определены и перечислены в окне терминала:
Нам нужно скопировать эти файлы в нашу новую среду. Выбирать детали из этого списка и копировать их по очереди будет трудоемким и подверженным ошибкам.
К счастью, мы можем полуавтоматизировать это. Мы снова перечислим зависимости, и на этот раз сформируем список. Затем мы пройдемся по списку, копируя файлы.
Мы можем проверить содержимое списка с помощью echo:
Мы будем использовать эту технику, чтобы зафиксировать зависимости каждой из других команд. И мы будем использовать технику цикла для выполнения фактического копирования. Хорошая новость в том, что нам нужно только внести небольшое изменение в команду, которая собирает зависимости.
Мы можем извлечь команду из нашей истории команд, нажав несколько раз клавишу со стрелкой вверх, а затем внести изменения. Команду циклического копирования вообще не нужно менять.
Здесь мы использовали клавишу со стрелкой вверх, чтобы найти команду, и отредактировали ее так, чтобы она говорила касание вместо bash.
Теперь мы можем повторить ту же самую команду цикла, что и раньше:
И наши файлы копируются для нас:
Теперь мы можем редактировать командную строку списка для ls:
Опять же, мы будем использовать ту же команду цикла. Неважно, какие файлы в списке. Он слепо работает через список, копируя файлы за нас.
И зависимости для ls скопированы для нас:
В последний раз редактируем командную строку list, заставляя ее работать для rm:
Мы используем команду циклического копирования в последний раз:
Последняя из наших зависимостей копируется в нашу среду chroot. Наконец-то мы готовы использовать команду chroot. Эта команда устанавливает корень среды chroot и указывает, какое приложение запускать в качестве оболочки.
Наша среда chroot теперь активна. Приглашение окна терминала изменилось, и интерактивная оболочка обрабатывается оболочкой bash в нашей среде.
Мы можем опробовать команды, которые мы внесли в среду.
Команда ls работает так, как и следовало ожидать, когда мы используем ее в среде. Когда мы пытаемся получить доступ к каталогу за пределами среды, команда не работает.
Мы можем использовать touch для создания файла, ls для его вывода и rm для его удаления.
Конечно, мы также можем использовать встроенные команды, предоставляемые оболочкой Bash. Если вы введете help в командной строке, Bash перечислит их за вас.
Используйте exit для выхода из среды chroot:
Если вы хотите удалить среду chroot, вы можете просто удалить ее:
Это рекурсивно удалит файлы и каталоги в среде chroot.
Автоматизация для удобства
Если вы думаете, что среды chroot могут быть вам полезны, но их сложно настроить, помните, что вы всегда можете снять напряжение и риск из-за повторяющихся задач, используя псевдонимы, функции и сценарии.
chroot окружение и его использование
chroot используется для создания jail и изоляции процессов, а также для сборки пакетов методом debootstrap.
Например chroot /mnt
bin boot dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
lost+found
chroot: failed to run command ‘/bin/bash’: No such file or directory
Как устранить ошибку «chroot: failed to run command ‘/bin/bash’: No such file or directory»
Ошибка возникает из-за отсутствия в каталоге, который делается корневым необходимых библиотек и бинарных файлов. Исправить ошибку можно скопировав файлы хост системы в chroot
Нужны библиотеки скопированы, сейчас создаем каталог для бинарных файлов и полностью копируем их в этот каталог
Теперь ошибок быть не должно
bin lib lib64 usr
Каталогов нет, но их можно очень просто создать и подмонтировать, однако стоит учитывать, что в chroot в этом случае будут использоваться каталоги из хост системы
Теперь доступно управление процессами
Выполнив ps aux можно получить доступ к процессам всей системы, а не только chroot. Это может являться угрозой безопасности. chroot стоит использовать для сборки пакетов под разные системы на одном хосте или для тестирования какого-либо ПО, также он нужен чтобы запуститься со съемного носителя когда на основной машине неработоспособен загрузчик.
Подготовка 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:
Как уже говорилось, команда 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; просто введите:
Флаг –variant задаёт тип chroot-окружения, которое нужно собрать. Опция build указывает, что нужно также установить инструменты сборки программ «из коробки», которые находятся в пакете build-essential. Узнать о доступных опциях больше можно при помощи команды:
Найдите описание –variant. Флаг –arch указывает архитектуру системы клиента. Если архитектура отличается от родительской архитектуры, нужно также использовать флаг –foreign. После этого нужно вызвать команду debootstrap во второй раз, чтобы завершить установку:
Эта команда выполняет установку, в то время как первая команда только загружает пакеты в случае архитектурных различий.
Примечание: Не забудьте флаг –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
Сохраните и закройте файл.
Теперь нужно смонтировать эти системы:
Также нужно скопировать файл /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-окружения отлично подходят для тестирования и сборки программ различных архитектур без необходимости устанавливать отдельную систему. Это невероятно гибкое решение для различных задач.