Chroot — это утилита Linux/Unix, которая может изменять корневую файловую систему. С помощью команды chroot
вы можете легко создать изолированную файловую систему внутри основной файловой системы. Chroot особенно полезен для разделения вашей рабочей и домашней среды или если вы хотите, чтобы тестовая среда тестировала программное обеспечение изолированно.
Читайте также: Что такое Rc Shell и как его установить в Linux
Разница между Chroot и виртуальной машиной
На первый взгляд, вы можете подумать, что chroot похож на виртуальную машину или контейнерная система, такая как Docker. . Это отчасти похоже, но chroot — гораздо более
Contents
Разница между Chroot и виртуальной машиной
ой машине необходим гипервизор для установки и работы на отдельном ядре, отличном от хост-машины. В отличие от виртуальной машины, chroot использует то же ядро и процессы, но создает тюрьму в файловой системе. Внутри тюрьмы невозможно выглянуть наружу без разрешения root. Поэтому изолированная файловая система также называется chroot-тюрьмой.Различные случаи использования Chroot
- Изолированная среда сборки в конвейере CI/CD. Chroot используется для создания изолированной среды сборки для приложений в конвейере CI/CD. Это помогает создавать приложение с уникальными зависимостями и полностью изолировано от всех других сред сборки, чтобы исключить потенциальные конфликты.
- Отдельная среда разработки и тестирования. Зачастую программное обеспечение, работающее на компьютере разработчика, не работает на устройстве конечного пользователя. Это связано с тем, что в системе разработчика установлено множество инструментов и зависимостей. У нормальных людей на своих машинах не установлены все эти зависимости. Чтобы протестировать программное обеспечение, если оно будет работать на всех устройствах, разработчик или тестировщик может легко создать простую стандартную среду, используя chroot для тестирования своего программного обеспечения.
- Снижение риска для разработчика
Различные случаи использования Chroot
ограммы, которые взаимодействуют с нашими системными файлами без какой-либо надлежащей изолированной программной среды. Поэтому, если мы допустим ошибку, наше программное обеспечение может легко стереть важные данные с нашего устройства. Чтобы снизить риск такого типа, разработчик часто использует chroot для создания новой рабочей среды, чтобы снизить риск потери данных. - Другая версия одного и того же программного обеспечения. Иногда в целях разработки вам необходимо установить очень старую или очень свежую версию программного обеспечения или зависимости. Но использование такой противоречивой зависимости может испортить вашу систему. Эту ситуацию можно легко преодолеть с помощью chroot-тюрьмы.
- Исправить неисправную систему. Если у вас неисправная система, вы можете легко восстановить ее с помощью chroot. Просто загрузите живую среду Linux на устройстве и смонтируйте файловую систему. Используя эту точку монтирования, вы можете запускать различные команды для устранения проблемы. Это обсуждается далее в этом руководстве.
- Безопасная работа FTP-сервера. FTP означает протокол передачи файлов. Запуск FTP-сервера дает вам возможность делиться только теми файлами, которые вам нужны. Таким образом, ни один удаленный узел не сможет увидеть файловую систему вашего хоста и получить к ней доступ.
Также читайте: Что такое XDP (экспресс-путь к данным) в Linux
Создание среды Chroot
Это краткое руководство по созданию среды chroot в вашей системе. Вы можете получить подробную информацию в Arch Wiki .
- Чтобы создать среду chroot, создайте новый каталог внутри вашей домашней папки. Внутри этой папки в будущем будет присутствовать наша изолированная файловая система. В этом уроке я назвал папку «mte».
mkdir ~/mte
- Мы создаем очень минимальную среду Linux. Мы устанавливаем
bash
как оболочку внутри среды chroot и устанавливаемls
,rm
иtouch
для вывода списка, удаления и создавать файлы соответственно. Давайте создадим необходимые каталоги внутри нашего каталога «mte».
cd ~/mte mkdir bin mkdir lib mkdir lib64
- Скопируйте необходимые двоичные файлы из обычного каталога «/bin» в среду chroot «~/mte».
cp /bin/bash ~/mte/bin cp /bin/touch ~/mte/bin cp /bin/ls ~/mte/bin cp /bin/rm ~/mte/bin
- Копирования двоичных файлов недостаточно. Нам также нужно скопировать их зависимости в папку «mte». Чтобы узнать необходимые зависимости, мы используем команду
ldd
. Если вы хотите узнать зависимость bash, запустите:
ldd /bin/bash
Вывод приведенной выше команды дает следующий результат.
- Перечисление этих зависимостей и копирование их одна за другой будет очень медленным и скучным занятием. Поэтому для автоматизации этого процесса мы используем bash-скрипт. Создайте файл с именем «copydependent.sh» и напишите в нем эти команды оболочки.
#Setting the chroot directory mte="~/mte" # enter your binary name echo -e "Please enter your binary name \n" #Reading from terminal input read binaryname # Listing all the dependencies list="$(ldd /bin/$binaryname | egrep -o '/lib.*\.[0-9]')" # Looping through the dependency list for i inСоздание среды Chroot
pan>do cp -v --parents "$i" "${mte}"; done
Давайте рассмотрим, что делает этот скрипт. Сначала этот сценарий оболочки запрашивает двоичное имя, затем он берет это двоичное имя, находит все зависимости этого двоичного файла и сохраняет его внутри переменной списка. Затем он запускает цикл for, который выполняется для каждого элемента списка и копирует зависимость из нашего обычного файла «/bin» в наш chroot-каталог «mte».
Сохраните этот сценарий в другом месте и используйте его при создании новой среды chroot.
Затем измените разрешение скрипта и запустите его внутри терминала.
chmod +x copydependancy.sh
- Поскольку все зависимости установлены в нашей системе, давайте активируем нашу среду chroot. Стандартная команда chroot выглядит так:
chroot [-OPTION] [PATH FOR NEW ROOT] [PATH FOR SERVER]
Но для достижения нашей цели мы запускаем следующую команду, чтобы активировать нашу среду chroot.
sudo chroot ~/mte /bin/bash
Приведенная выше команда активирует среду chroot в каталоге «~/mte» и указывает на запуск оболочки bash. Вы можете увидеть изменения в приглашении терминала и теперь можете использовать команды touch
, rm
и ls
для создания, удаления и отображения файлов соответственно..
Чтобы выйти из среды chroot, выполните команду exit
.
Если вы хотите полностью удалить среду chroot, удалите каталог «mte» из вашей файловой системы.
rm -rf ~/mte
Читайте также: Как использовать команду Rm в Linux
Исправить сломанный загрузчик с помощью Chroot
Самое интересное в chroot — это то, что вы можете войти в сломанную систему и запустить внутри нее команду. Таким образом, используя chroot, вы можете легко установить критическое обновление для исправления системы или переустановить весь загрузчик, чтобы устранить проблему.
Но для этого у вас должна быть работающая среда Linux. Создайте загрузочный USB-накопитель, загрузив ISO-образ Linux и загрузившись с USB-накопителя. Это дает вам живую среду для работы. Подключите системный раздел для работы с chroot.
sudo mount -t ext4 /dev/sda /mnt
Замените «/dev/sda» на предполагаемое имя системного раздела, с которым вы хотите работать, и позвольте загрузчику grub найти информацию, необходимую для устранения проблемы с загрузчиком.
sudo mount --bind /dev /mnt/dev && sudo mount --bind /dev/pts /mnt/dev/pts && sudo mount --bind /proc /mnt/proc && sudo mount --bind /sys /mnt/sys
Давайте выполним chroot в каталог «/mnt» и войдем в сломанную систему.
sudo chroot /mnt
Установите, проверьте и обновите загрузчик grub в вашей системе. Обязательно используйте правильное имя диска и не копируйте эти команды вслепую.
grub-install /dev/sda grub-install --recheck /dev/sda update-grub
Выйдите из оболочки, используя команду выхода, упомянутую ранее. Отключите ранее привязанные каталоги и размонтируйте файловую систему. Выполняйте эти команды последовательно одну за другой.
sudo umount /mnt/sys && sudo umount /mnt/proc && sudo umount /mnt/dev/pts && sudo umount /mnt/dev && sudo umount /mnt
Перезагрузите компьютер и отсоедините работающий USB. Когда компьютер загрузится, ваш загрузчик grub засияет как новый, и все должно работать нормально.
Читайте также: Как изменить размер и оптимизировать изображения из терминала Linux
Часто задаваемые вопросы
Безопасен ли Chroot?
Chroot не подразумевает безопасность. Никогда не предполагалось, что он станет таковым. В целях безопасности вы можете используйте SELinux . Если вы поместите кого-то в chroot-каталог, у него не будет доступа к корневой файловой системе, но это не значит, что это сделает вашу систему неуязвимой. Chroot также не означает меньшую безопасность — он просто обеспечивает такой же уровень безопасности, как и ваша основная система. Ни больше, ни меньше.
Каковы ограничения систем Chroot?
Система Chroot не предназначена для защиты от преднамеренного вмешательства со стороны пользователя root. В некоторых системах chroot-программы могут получить достаточные привилегии для создания собственной среды chroot и выхода из chroot-тюрьмы. Chroot не означает полную изоляцию. Обычно вы можете делать все, что захотите, в пользовательском пространстве. Вы можете получить доступ к аппаратным устройствам, смонтировать и прочитать что угодно, при условии, что вам не нужно устанавливать какую-либо другую программу, тогда вам потребуются права root, которых у вас нет.
<раздел class="sc_fs_faq sc_card ">
Почему Chroot называют тюрьмой?
Chroot называется тюрьмой, поскольку создается впечатление, что вы находитесь внутри изолированной среды. Вы можете делать в этой тюрьме