Что такое chroot Linux

Обновлено: 04.07.2024

Как следует из названия, операция chroot изменяет видимый корневой каталог для запущенного процесса и его дочерних элементов. Он позволяет запускать программу (процесс) с корневым каталогом, отличным от /. Программа не может видеть или получать доступ к файлам за пределами назначенного дерева каталогов.

Например, вы можете запустить программу и указать ее корневой каталог как /home/user/jail. В этом случае корневой каталог программы на самом деле /home/user/jail. Программа не будет знать или не сможет получить доступ к каким-либо файлам выше этого каталога в иерархии.

Этот искусственный корневой каталог называется тюрьмой chroot. Его цель — ограничить доступ к каталогу потенциального злоумышленника. Тюрьма chroot блокирует данный процесс и любой идентификатор пользователя, который он использует, так что пользователь видит только каталог, в котором запущен процесс. Процессу
похоже, что он работает в корневом каталоге.< /p>

Тюрьма chroot не предназначена для:
– защиты от преднамеренного вмешательства со стороны привилегированных (корневых) пользователей.
– Используется для блокировки низкоуровневого доступа к системным устройствам со стороны привилегированных пользователей. Пользователь root chroot по-прежнему может создавать узлы устройств и монтировать на них файловые системы.

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

Использование утилиты chroot

<р>1. Чтобы использовать chroot-тюрьму, используйте следующую команду (new_root должен быть существующим каталогом):

<р>2. Каталог new_root становится искусственным корневым каталогом. chroot изменится на new_root и запустит необязательную команду. Без указания команды в качестве аргумента chroot изменяется на new_root и выполняет значение переменной среды SHELL или /bin/sh, если SHELL не задан.

<р>3. Например, если для SHELL установлено значение /bin/bash, а каталог /home/user/jail существует, запуск команды chroot приведет к следующему:

<р>4. Каталог /home/user/jail называется /. chroot не может найти /bin/bash в этой chroot-тюрьме и возвращает сообщение об ошибке. Чтобы реализовать chroot-тюрьму, создайте новую структуру корневого каталога и скопируйте все необходимые файлы в этот новый корневой каталог перед запуском команды chroot.

Настройка chroot Jail

<р>1. Чтобы реализовать chroot-тюрьму и запустить /bin/bash, создайте каталог bin в искусственном корневом каталоге (в данном примере /home/oracle/jail) и скопируйте /bin/bash в этот каталог:

<р>2. Команда /bin/bash динамически связана с общими библиотеками. Эти библиотеки также необходимо скопировать в chroot-джейл. Используйте команду ldd, чтобы определить, какие библиотеки требуются для команды /bin/bash:

<р>3. Скопируйте каждый из этих файлов в каталог lib64 в искусственном корневом каталоге. Создайте каталог lib64 и скопируйте общие библиотеки в этот каталог:

<р>4. Теперь, когда все необходимые файлы находятся в ожидаемых местах, выполнение команды chroot (от имени пользователя root) приводит к следующему:

<р>5. На этот раз команда выполнена успешно, и программа /bin/bash выполнена. Ввод pwd для вывода текущего каталога отображает /, даже если фактический каталог /home/oracle/jail:

Команда pwd запускается, поскольку это встроенная команда оболочки. Выполнение любой другой команды завершается ошибкой, поскольку bash не может найти команду. Процесс предполагает, что он находится в корневом каталоге и не видит и не знает никаких файлов выше этого каталога в иерархии. Например, запуск команды ls завершается ошибкой:

Термин "тюрьма chroot" появился еще в 1992 году и часто используется в наши дни. Но что означает этот термин и для чего используется эта операция?

В этом руководстве мы рассмотрим основы использования chroot-тюрьм и покажем, как их настроить.

 Что такое chroot-джейл и как его использовать

  • Система под управлением операционной системы Linux или Unix.
  • Учетная запись пользователя с привилегиями уровня sudo
  • Доступ к терминалу/командной строке

Что такое chroot-тюрьма?

Chroot (сокращение от change root) — это операция Unix, которая изменяет видимый корневой каталог на тот, который указан пользователем.

Любой процесс, который вы запускаете после операции chroot, имеет доступ только к вновь определенному корневому каталогу и его подкаталогам. Эта операция в просторечии известна как тюрьма chroot, поскольку эти процессы не могут читать или записывать вне нового корневого каталога.

Для чего используется chroot-тюрьма?

Тюрьма Chroot используется для создания ограниченной изолированной программной среды для запуска процесса. Это означает, что процесс не может злонамеренно изменять данные за пределами заданного дерева каталогов.

Еще одно применение chroot-тюрьм — замена виртуальных машин.Этот метод называется виртуализацией на уровне ядра и требует меньше ресурсов, чем виртуальные машины. Эта операция позволяет пользователям создавать несколько изолированных экземпляров в одной системе.

Как использовать chroot-тюрьму

В этом примере показано, как создать и настроить chroot-тюрьму, чтобы она могла запускать команды bash и ls.

Выполните следующие действия:

<р>1. Создайте новый каталог с именем chroot_jail:

Если мы попытаемся войти в новый каталог, мы получим следующий вывод:

 Результат неудачной попытки chroot

Вы должны включить команду bash, прежде чем сможете перейти в новый каталог. Для этого необходимо скопировать командный файл и все связанные библиотеки в новый корневой каталог.

<р>2. Создайте новое дерево подкаталогов внутри chroot_jail:

В этих подкаталогах будут храниться все необходимые элементы команд bash и ls.

<р>3. Использование команды cp с командой which позволяет копировать команды bash и ls без указания пути, из которого вы копируете.

Примечание. Если у вашей команды bash или ls есть псевдонимы, перед копированием их необходимо отменить. Используйте unalias [command] , где [command] — это имя команды, которую вы хотите отменить.

<р>4. Чтобы bash и ls работали в новой корневой папке, добавьте все связанные библиотеки в chroot_jail/libraries. Используйте команду ldd, чтобы узнать, какие библиотеки связаны с какой командой:

 Список библиотек, связанных с командами bash и ls

<р>5. Скопируйте соответствующие библиотеки в подкаталоги lib и lib64 chroot_jail.

Для команды bash:

Для команды ls:

<р>6. Используйте команду chroot, чтобы изменить корневой каталог на каталог chroot_jail:

 Успешное подключение к новому корневому каталогу

Примечание. Изменение корневого каталога на каталог chroot_jail запускает новый экземпляр оболочки bash.

Используйте команду ls, чтобы вывести список всех файлов и каталогов в новом корневом дереве каталогов:

 Список файлов и папок в новом корневом каталоге

<р>7. Когда вы закончите использовать новую корневую папку, выйдите из оболочки:

После выполнения этого руководства вы сможете настроить chroot-тюрьму вместе с необходимыми ресурсами для запуска процессов и команд в новом корневом каталоге.

Для получения дополнительной информации о командах Linux ознакомьтесь с нашей памяткой по командам Linux.

Chroot — это операция, которая изменяет видимый корневой каталог для текущего запущенного процесса и его дочерних элементов. Программа, запущенная в такой измененной среде, не может получить доступ к файлам и командам за пределами этого дерева каталогов среды. Эта измененная среда называется тюрьмой chroot.

Содержание

Обоснование

  • Переустановка загрузчика.
  • Восстановление образа initramfs.
  • Обновление или понижение пакетов.
  • Сброс забытого пароля.
  • Создание пакетов в чистом chroot.

Требования

  • Привилегии root.
  • Другая среда Linux, например. с LiveCD или USB-накопителя либо из другого существующего дистрибутива Linux.
  • Соответствие архитектуры средам; то есть chroot from и chroot to. Архитектуру текущей среды можно узнать с помощью: uname -m (например, i686 или x86_64).
  • Загружены модули ядра, необходимые в среде chroot. включено при необходимости:
  • При необходимости установлено подключение к Интернету.

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

  • Некоторые инструменты systemd, такие как hostnamectl, localectl и timedatectl, нельзя использовать внутри chroot, так как для них требуется активное соединение dbus. [1]
  • Файловая система, которая будет использоваться в качестве нового корня ( / ) вашего chroot, должна быть доступна (т. е. расшифрована, смонтирована).

Существует два основных варианта использования chroot, описанных ниже.

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

Сценарий bash arch-chroot является частью пакета arch-install-scripts. Перед запуском /usr/bin/chroot скрипт монтирует файловые системы API, такие как /proc, и делает /etc/resolv.conf доступным из chroot.

Введите chroot

Запустите команду arch-chroot с новым корневым каталогом в качестве первого аргумента:

Например, в руководстве по установке этот каталог будет /mnt :

Чтобы выйти из chroot, просто используйте:

Выполнить одну команду и выйти

Чтобы запустить команду из chroot и снова выйти, добавьте команду в конец строки:

Например, чтобы запустить mkinitcpio -p linux для chroot, расположенного в /mnt/arch, выполните:

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

Предупреждение: при использовании --rbind некоторые подкаталоги dev/ и sys/ нельзя будет размонтировать. Попытка размонтировать с помощью umount -l в этой ситуации прервет ваш сеанс и потребует перезагрузки. Если возможно, используйте вместо этого -o bind.

В следующем примере /location/of/new/root — это каталог, в котором находится новый корень.

Сначала смонтируйте временные файловые системы API:

Если вы используете систему UEFI, вам также потребуется доступ к переменным EFI. В противном случае при установке GRUB вы получите сообщение, похожее на: Переменные UEFI не поддерживаются на этом компьютере:

Далее, чтобы использовать подключение к Интернету в среде chroot, скопируйте данные DNS:

Наконец, чтобы изменить root на /location/of/new/root с помощью оболочки bash:

  • chroot: невозможно запустить команду '/usr/bin/bash': ошибка формата Exec, вероятно, архитектура хост-среды и среды chroot не совпадают.
  • chroot: '/usr/bin/bash': разрешение отклонено, перемонтируйте с разрешением на выполнение: mount -o remount,exec /location/of/new/root.
    • если проверка не помогла, убедитесь, что базовые компоненты новой среды не повреждены (если это корень Arch, попробуйте paccheck --root=/location/of/new/root --files --file-properties --md5sum файловая система glibc , из pacutils )

    После chroot может потребоваться загрузить локальную конфигурацию bash:

    После завершения работы с chroot вы можете выйти из него через:

    Затем размонтируйте временные файловые системы:

    Примечание. Если есть ошибка с упоминанием чего-то вроде: umount: /path: устройство занято, это обычно означает, что либо программа (даже оболочка) осталась запущенной в chroot, либо что подмонтированное устройство все еще существует. Выйдите из программы и используйте findmnt -R /location/of/new/root, чтобы найти, а затем размонтировать подсистемы. Размонтировать некоторые вещи может быть сложно, и можно надеяться, что umount --force сработает, в крайнем случае используйте umount --lazy, который просто их освобождает. В любом случае, чтобы быть в безопасности, перезагрузите компьютер как можно скорее, если они не устранены, чтобы избежать возможных конфликтов в будущем.

    Запуск графических приложений из chroot

    Если в вашей системе работает X-сервер, вы можете запускать графические приложения из среды chroot.

    Чтобы позволить среде chroot подключаться к X-серверу, откройте виртуальный терминал внутри X-сервера (т. е. внутри рабочего стола пользователя, который в данный момент вошел в систему), затем запустите команду xhost, которая дает разрешение любому подключиться к X-серверу пользователя (см. также Xhost):

    Затем, чтобы направить приложения на X-сервер из chroot, установите переменную среды DISPLAY внутри chroot так, чтобы она соответствовала переменной DISPLAY пользователя, которому принадлежит X-сервер. Например, запустите:

    как пользователь, владеющий X-сервером, чтобы увидеть значение DISPLAY. Если значение равно ":0" (например), то в среде chroot запустите:

    Без привилегий root

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

    Корень

    PRoot можно использовать для изменения видимого корневого каталога и использования mount --bind без привилегий root. Это полезно для ограничения приложений одним каталогом или запуска программ, созданных для другой архитектуры ЦП, но имеет ограничения, связанные с тем, что все файлы принадлежат пользователю в хост-системе. PRoot предоставляет аргумент --root-id, который можно использовать в качестве обходного пути для некоторых из этих ограничений аналогично (хотя и более ограниченно) способу fakeroot.

    Поддельный корень

    fakechroot — это библиотечная прокладка, которая перехватывает вызов chroot и подделывает результаты. Его можно использовать в сочетании с fakeroot для имитации chroot как обычного пользователя.

    Отменить публикацию

    Unshare, часть util-linux, может использоваться для создания нового пространства имен ядра. Это работает с обычной командой chroot. Например:

    Устранение неполадок

    arch-chroot: /location/of/new/root не является точкой монтирования. Это может иметь нежелательные побочные эффекты.

    При выполнении arch-chroot /location/of/new/root выдается предупреждение:

    См. arch-chroot(8) для пояснения и примера использования монтирования привязки, чтобы сделать каталог chroot точкой монтирования.


    Энтони Хеддингс


    Энтони Хеддингс
    Писатель

    Энтони Хеддингс (Anthony Heddings) – штатный облачный инженер LifeSavvy Media, технический писатель, программист и эксперт по платформе Amazon AWS. Он написал сотни статей для How-To Geek и CloudSavvy IT, которые были прочитаны миллионы раз. Подробнее.


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

    Что делает chroot?

    Chroot выполняет одну функцию — запускает команду в другом корневом каталоге. Запускаемая команда понятия не имеет о существовании чего-либо за пределами ее тюрьмы, поскольку у нее нет никаких ссылок на нее, и, насколько ей известно, она все равно работает в корневой файловой системе. Нет ничего выше корня, поэтому команда не может получить доступ ни к чему другому.

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

    Для чего используется chroot?

    Главное, для чего используется chroot, — это блокировка системных демонов, чтобы любые уязвимости безопасности в этих демонах не влияли на остальную часть системы. Например, почтовый агент Postfix можно настроить для работы в окружении с ограниченным доступом к каталогам, которые он использует для связи с системой. Таким образом, если в Postfix обнаружена ошибка, она влияет на Postfix, а не на что-либо еще.

    Это очень полезно для такой службы, как FTP. Если вы хотите предоставить удаленным пользователям доступ к частям вашей системы, chroot-процесс — это простой способ заблокировать доступ.

    Он также полезен в качестве «контейнера бюджета» для создания подмножества вашей операционной системы и запуска приложений в изолированной среде, будь то для тестирования, безопасности или простоты разработки. Но поскольку chroot требует, чтобы вы вручную копировали зависимости приложений в джейл, он не подходит для всего. Процесс, которому требуется доступ и взаимодействие с ресурсами пользовательского уровня, не будет хорошо работать внутри chroot-тюрьмы или потребует дополнительной настройки, которая может сделать всю установку более небезопасной. Но даже такие сложные приложения, как Apache и MySQL, можно запускать в chroot-окружении с учетом всех зависимостей.

    Хотя chroot-тюрьма является дополнительным уровнем безопасности, chroot не должен быть вашим единственным инструментом безопасности. Выход из тюрьмы может быть относительно тривиальным, если он не настроен должным образом, а chroot-тюрьма только изменяет местоположение монтирования и не влияет на другие пространства имен. Если вы хотите повысить безопасность, используйте пространства имен или механизм контейнеризации, например Docker.

    Отправка процессов в тюрьму

    Чтобы открыть оболочку внутри каталога, заключенного в тюрьму, вы можете запустить:

    Однако эта команда завершится ошибкой с только что созданным каталогом /jail, так как chroot попытается загрузить bash из /jail/bin/bash . Этого файла не существует, и это первая проблема с chroot — вам нужно собрать джейл самостоятельно.

    Для некоторых вещей достаточно скопировать их с помощью cp:

    Но это копирует только исполняемый файл bash, а не все его зависимости, которых еще нет в нашей тюрьме. Вы можете перечислить зависимости для bash с помощью команды ldd:

    Вы можете скопировать их вручную:

    Но это становится серьезной проблемой для каждой команды, которую вы хотите запустить из-под chroot . Если вы не заботитесь о том, чтобы ваш chroot обращался к вашим фактическим каталогам lib и bin (без доступа к остальной части системы), вы можете использовать mount --bind для предоставления ссылки в вашей тюрьме:

    Вы также можете просто скопировать все каталоги /bin и /lib, что занимает больше места, но может быть немного лучше с точки зрения безопасности, особенно если вы используете chroot для запуска небезопасных процессов, которые вы не хотели бы нарушать. с папками вашей системы.

    Теперь, когда все скопировано, вы сможете еще раз запустить sudo chroot /jail, чтобы открыть bash. Кроме того, вы можете запустить любую другую команду, выполнив:

    Если вы запускаете процессы через chroot bash, вы можете выйти из оболочки, нажав exit или Control+D, что остановит запущенный процесс. Процессы, запущенные в тюрьме, работают в своей собственной среде и не имеют доступа к другим процессам в системе.

    Может ли процесс избежать тюрьмы?

    Нелегко, если только они не работают от имени пользователя root. Chroot не блокирует доступ к низкоуровневым системным ресурсам (для доступа к которым требуется root), поэтому привилегированный процесс может легко избежать тюрьмы.

    Непривилегированные процессы могут полностью выйти из строя с помощью метода chdir("..") и другого вызова chroot .Если вы действительно сосредоточены на безопасности, вам следует отказаться от доступа к системному вызову chroot(2) или использовать ответвление jchroot , которое автоматизирует эту дополнительную функцию безопасности.

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

    • › Как добавлять, заменять и удалять теги изображений Docker
    • › Как развернуть веб-сервер Caddy с помощью Docker
    • › Как использовать Docker для упаковки приложений CLI
    • › Что нового в TypeScript 4.6?
    • › Как развернуть сервер GitLab с помощью Docker
    • › CloudFoundry или Kubernetes: какую облачную платформу выбрать?


    Дэйв Маккей


    Дэйв Маккей
    Писатель

    Команда chroot может отправить вас в тюрьму, изолировать вашу среду разработки или тестирования или просто повысить безопасность вашей системы. Мы покажем вам самый простой способ его использования.

    Что такое chroot?

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

    В обсуждениях с пользователями Linux — лично и на форумах — создается впечатление, что команда chroot считается сложной в использовании или слишком привередливой и утомительной в настройке. Кажется, эта потрясающая утилита используется не так часто, как могла бы.

    С помощью chroot вы можете устанавливать и запускать программы или интерактивные оболочки, такие как Bash, в инкапсулированной файловой системе, которая не может взаимодействовать с вашей обычной файловой системой. Все в среде chroot записывается и содержится. Ничто в среде chroot не может выйти за пределы своего собственного специального корневого каталога, не получив привилегий root. Благодаря этому среда такого типа получила прозвище chroot-тюрьмы. Термин «тюрьма» не следует путать с командой jail во FreeBSD, которая создает более безопасную среду chroot, чем обычная среда chroot.

    Но на самом деле есть очень простой способ использования chroot , который мы и рассмотрим. Мы используем обычные команды Linux, которые будут работать во всех дистрибутивах. В некоторых дистрибутивах Linux есть специальные инструменты для настройки среды chroot, например debootstrap для Ubuntu, но здесь мы не зависим от дистрибутива.

    Когда следует использовать chroot?

    Среда chroot предоставляет функциональные возможности, аналогичные виртуальной машине, но это более легкое решение. Для авторизованной системы не требуется установка и настройка гипервизора, такого как VirtualBox или Virtual Machine Manager. Также не нужно устанавливать ядро ​​в каптивной системе. Ограниченная система использует ваше существующее ядро.

    В некотором смысле среды chroot ближе к контейнерам, таким как LXC, чем к виртуальным машинам. Они легкие, быстро развертываются, а их создание и запуск можно автоматизировать. Как и в случае с контейнерами, одним из удобных способов их настройки является установка достаточного количества операционной системы для выполнения необходимых задач. Чтобы ответить на вопрос «что требуется», нужно посмотреть, как вы собираетесь использовать среду chroot.

    Разработка программного обеспечения и проверка продукта. Разработчики пишут программное обеспечение, а группа проверки продукта (PV) его тестирует. Иногда PV обнаруживает проблемы, которые невозможно воспроизвести на компьютере разработчика. У разработчика на компьютере для разработки установлены всевозможные инструменты и библиотеки, которых нет у обычного пользователя и PV. Часто оказывается, что новое программное обеспечение, которое работает для разработчика, но не для других, использует ресурс на ПК разработчика, который не был включен в тестовую версию программного обеспечения. chroot позволяет разработчикам иметь на своем компьютере простую ванильную среду, в которую они могут погрузить программное обеспечение, прежде чем передать его PV. Среда авторизации может быть настроена с минимальным количеством зависимостей, которые требуются программному обеспечению.

    Снижение риска разработки. Разработчик может создать выделенную среду разработки, чтобы никакие действия, происходящие в ней, не могли испортить работу его ПК.

    Запуск устаревшего программного обеспечения. Иногда вам просто нужно, чтобы старая версия чего-то работала.Если у старого программного обеспечения есть требования, которые противоречат вашей версии Linux или несовместимы с ней, вы можете удалить среду для проблемного программного обеспечения.

    Восстановление и обновление файловой системы. Если установка Linux становится неработоспособной, вы можете использовать chroot для монтирования поврежденной файловой системы в точку монтирования на Live CD. Это позволяет вам работать в поврежденной системе и пытаться исправить ее, как если бы она была нормально смонтирована в root /. Это означает, что ожидаемые пути к файлам в поврежденной системе будут правильно указаны из корневого каталога, а не из точки монтирования Live CD. Похожая техника использовалась в статье, описывающей перенос файловой системы Linux с ext2 или ext3 на ext4.

    Приложения кольцевой защиты. Запуск FTP-сервера или другого подключенного к Интернету устройства в среде chroot ограничивает ущерб, который может нанести внешний злоумышленник. Это может оказаться ценным шагом в усилении безопасности вашей системы.

    Создание среды chroot

    Нам нужен каталог, который будет использоваться в качестве корневого каталога среды chroot. Чтобы у нас был сокращенный способ обращения к этому каталогу, мы создадим переменную и сохраним в ней имя каталога. Здесь мы настраиваем переменную для хранения пути к каталогу «testroot». Неважно, что этот каталог еще не существует, мы собираемся его создать в ближайшее время. Если каталог существует, он должен быть пустым.


    Если каталога не существует, нам нужно его создать. Мы можем сделать это с помощью этой команды. Параметр -p (parents) обеспечивает одновременное создание всех отсутствующих родительских каталогов:


    Нам нужно создать каталоги для хранения частей операционной системы, которые потребуются нашей среде chroot. Мы собираемся настроить минималистичную среду Linux, использующую Bash в качестве интерактивной оболочки. Мы также включим команды touch, rm и ls. Это позволит нам использовать все встроенные команды Bash, а также touch, rm и ls. Мы сможем создавать, просматривать и удалять файлы, а также использовать Bash. И — в этом простом примере — это все.

    Перечислите каталоги, которые вам нужно создать, в скобках <>.


    Теперь мы изменим каталог на наш новый корневой каталог.


    Давайте скопируем двоичные файлы, которые нам нужны в нашей минималистичной среде Linux, из вашего обычного каталога «/bin» в наш каталог chroot «/bin». Параметр -v (подробный) заставляет cp сообщать нам, что он делает, когда выполняет каждое действие копирования.


    Файлы скопированы для нас:


    Эти двоичные файлы будут иметь зависимости. Нам нужно выяснить, что это такое, и скопировать эти файлы в нашу среду, иначе bash , touch , rm и ls не смогут работать. Нам нужно сделать это по очереди для каждой из выбранных нами команд. Сначала мы сделаем Bash. Команда ldd выдаст нам список зависимостей.


    Зависимости идентифицируются и перечисляются в окне терминала:

    Нам нужно скопировать эти файлы в нашу новую среду. Выбор сведений из этого списка и копирование их по одному займет много времени и чревато ошибками.

    К счастью, мы можем частично автоматизировать это. Мы снова перечислим зависимости, и на этот раз сформируем список. Затем мы пройдемся по списку, копируя файлы.

    Здесь мы используем ldd для получения списка зависимостей и передачи результатов через канал в egrep . Использование egrep аналогично использованию grep с параметром -E (расширенные регулярные выражения). Параметр -o (только соответствие) ограничивает вывод совпадающими частями строк. Мы ищем подходящие файлы библиотеки, которые заканчиваются цифрой 2.


    Мы можем проверить содержимое списка с помощью команды echo :


    Теперь, когда у нас есть список, мы можем выполнить следующий цикл, копируя файлы по одному. Мы используем переменную i для перехода по списку. Для каждого члена списка мы копируем файл в наш корневой каталог chroot, который является значением, хранящимся в $chr .

    Опция -v (подробный) заставляет cp объявлять каждую копию по мере ее выполнения. Опция --parents обеспечивает создание всех отсутствующих родительских каталогов в среде chroot.


    И это результат:


    Мы воспользуемся этой техникой для захвата зависимостей каждой из других команд. И мы будем использовать технику цикла для выполнения фактического копирования. Хорошая новость заключается в том, что нам нужно лишь внести небольшие изменения в команду, которая собирает зависимости.

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

    Здесь мы использовали клавишу со стрелкой вверх, чтобы найти команду, и мы отредактировали ее так, чтобы она говорила touch вместо bash .



    И наши файлы копируются для нас:


    Теперь мы можем редактировать командную строку списка для ls :


    Снова воспользуемся той же командой цикла. Неважно, какие файлы находятся в списке. Он вслепую работает по списку, копируя файлы за нас.


    И зависимости для ls скопированы для нас:

    Редактируем командную строку списка в последний раз, чтобы она работала для rm :


    В последний раз мы используем циклическую команду копирования:

    Последние из наших зависимостей копируются в нашу среду chroot. Наконец-то мы готовы использовать команду chroot. Эта команда задает корень среды chroot и указывает, какое приложение запускать в качестве оболочки.


    Теперь наша среда chroot активна. Приглашение окна терминала изменилось, а интерактивная оболочка теперь обрабатывается оболочкой bash в нашей среде.


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


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

    Мы можем использовать touch для создания файла, ls для его отображения и rm для его удаления.


    Конечно, мы также можем использовать встроенные команды, предоставляемые оболочкой Bash. Если вы наберете help в командной строке, Bash выведет их список для вас.


    Используйте exit, чтобы выйти из среды chroot:


    Если вы хотите удалить среду chroot, вы можете просто удалить ее:


    Это рекурсивно удалит файлы и каталоги в среде chroot.

    Автоматизация для удобства

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

    < /tbody>
    Команды Linux
    Файлы tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm
    Процессы alias · screen · top · nice · renice · прогресс · strace · systemd · tmux · chsh · история · at · пакетное · бесплатное · которое · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · стена · yes · kill · спать · sudo · su · время · groupadd · usermod · группы · lshw · выключение · перезагрузка · halt · poweroff · passwd · lscpu · crontab · date · bg · fg
    Сеть netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · копать · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw
    • › Docker для начинающих: все, что вам нужно знать
    • ›5 шрифтов, которые следует прекратить использовать (и лучшие альтернативы)
    • › Почему прозрачные чехлы для телефонов желтеют?
    • › Как восстановить метки панели задач в Windows 11
    • › Что означает XD и как вы его используете?
    • › Как установить Google Play Маркет в Windows 11
    • › Худшее, что есть в телефонах Samsung, — это программное обеспечение Samsung.

    Читайте также: