Chroot linux что это
Перейти к содержимому

Chroot linux что это

  • автор:

Chroot системный вызов и утилита в Linux

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

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

Отметим, однако, что при переназначении вывода команды в файл:

chroot новый_корень команда > файл

указанный файл будет создан с учетом исходного, а не нового корневого каталога.

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

Данная команда может быть выполнена только суперпользователем.

Chroot linux что это

Команда chroot позволяет выполнить другую команду с измененным путем к корневой директории. Хотя она и может пригодиться для выполнения различных административных задач, чаще всего о ней упоминают как о методе защиты отдельных служб или процессов, заключающемся в их запуске с использованием новой нестандартной корневой директории. Преимущество данного метода заключается в том, что служба или процесс исполняется в окружении chroot, изолированном от таких важных хранилищ системных файлов, как директория /etc или других не менее важных файлов, хранящихся в системных директориях. Вместе с данным методом защиты используется еще один метод, заключающийся в запуске служб или процессов с использованием учетных записей пользователей с минимальными наборами привилегий.

Например, при активации поддержки chroot служба доменных имен named использует в качестве корневой директории директорию /var/named/ и запускается от лица локального пользователя с именем «named» (с минимальными привилегиями) в отличие от корневой директории системы и учетной записи пользователя root. Поэтому если сервер named будет скомпрометирован взломщиком или вредоносной программой, будут повреждены лишь файлы из директории /var/named (новой корневой директории сервера), ведь служба named не может получить доступ к файлам, находящимися за приделами окружения chroot, а пользователь с именем named не имеет достаточных прав для чтения каких-либо других системных файлов.

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

Базовый синтаксис команды выглядит следующим образом:

Вы можете указать имена пользователя и группы пользователей, от лица которых должна быть выполнена команда, с помощью параметра —userspec=: или перечислить дополнительные группы пользователей будущего процесса с помощью параметра —groups=, . .

Примеры использования

Запуск процесса с измененной корневой директорией

# chroot /home/alex /home/alex/myprogram

Запуск процесса с измененной корневой директорией от лица другого пользователя

# chroot —userspec=test:test /home/alex /home/alex/myprogram

Запуск процесса с измененной корневой директорией с дополнительными группами пользователей

# chroot —userspec=test:test —groups=dialout /home/alex /home/alex/myprogram

Советы по использованию поддержки chroot в системных службах

Для того, чтобы сократить шансы проникновения злоумышленников за пределы окружения chroot с помощью одной из выше описанных техник следует смонтировать файловую систему для окружения chroot с параметром «nodev». Создание небольшой узловой файловой системы или раздела для окружения chroot не представляет каких-либо сложностей.

Apache

Хотя веб-сервер Apache и может быть запущен посредством команды chroot таким же образом, как и любая системная служба, существует также специализированный модуль под названием «mod_chroot», который может использоваться для автоматического запуска Apache в окружении chroot после добавления дополнительной строки в файл конфигурации /etc/httpd.conf.

BIND

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

FTP

Некоторые серверы FTP автоматически активируют поддержку chroot после добавления символа точки «.» (соответствующего текущей директории) в путь к домашней директории соответствующего пользователя в файле /etc/passwd.

chroot (Русский)

Состояние перевода: На этой странице представлен перевод статьи chroot. Дата последней синхронизации: 30 января 2022. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

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

Причины

Изменение корневого каталога обычно производится при обслуживании системы, загрузка и/или вход в которую стали невозможны. В таком режиме, например, могут быть выполнены:

  • Переустановка загрузчика.
  • Пересборка образа initramfs.
  • Обновление или откат пакетов.
  • Сброс пароля root.
  • Сборка пакетов в чистом окружении, смотрите DeveloperWiki:Building in a clean chroot.

Требования

  • Наличие привилегий суперпользователя.
  • Возможность загрузки с другой среды Linux, например, LiveCD, загрузочного USB-носителя или другого установленного дистрибутива.
  • Совпадение архитектур двух сред: с которой производится загрузка и в которую происходит изменение корня. Архитектуру текущей среды можно узнать командой uname -m (например, i686 или x86_64).
  • Если среде chroot необходимы какие-нибудь модули ядра, они должны быть загружены.
  • Если нужен раздел подкачки, он должен быть включен: # swapon /dev/sdxY .
  • Интернет-соединение установлено, если нужно.

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

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

Есть два варианта использования chroot.

Используя arch-chroot

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

Переход в chroot

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

# arch-chroot /путь/к/новому/корню 

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

# arch-chroot /mnt

Выход из chroot простой:

# exit
Запуск одной команды и выход

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

# arch-chroot /путь/к/новому/корню команда 

Чтобы запустить mkinitcpio -p linux в окружении chroot минуя создание сеанса в командной оболочке:

# arch-chroot /mnt/arch /usr/bin/mkinitcpio -p linux

Используя chroot

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

В данном примере /путь/к/новому/корню является каталогом, который станет корнем файловой системы внутри chroot.

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

# cd /путь/к/новому/корню # mount -t proc proc proc/ # mount -t sysfs /sys sys/ # mount --rbind /dev dev/
# mount --rbind /run run/

Если у вас UEFI, вам также может поднадобиться доступ к переменным EFI. Без них попытка установки GRUB приведёт к ошибке вроде UEFI variables not supported on this machine :

# mount --rbind /sys/firmware/efi/efivars sys/firmware/efi/efivars/

Чтобы использовать интернет-соединение в chroot может понадобиться скопировать resolv.conf:

# cp /etc/resolv.conf etc/resolv.conf

Чтобы запустить bash в окружении chroot:

# chroot /путь/к/новому/корню /bin/bash
  • chroot: cannot run command ‘/usr/bin/bash’: Exec format error , это значит, что архитектуры основной среды и среды нового корневого каталога не совпадают.
  • chroot: ‘/usr/bin/bash’: permission denied , перемонтируйте раздел с разрешением exec: mount -o remount,exec /mnt/arch .
    • Если это не помогает, убедитесь, что базовые компоненты новой среды не повреждены (если это корень Arch, попробуйте paccheck —root=/путь/к/новому/корню —files —file-properties —md5sum glibc filesystem из пакета pacutils )

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

    # source /etc/profile # source ~/.bashrc

    Совет: Вы также можете установить другое приглашение командной оболочки для того, чтобы отличать среду chroot от основной:

    # export PS1="(chroot) $PS1"

    После завершения работы выйдите из сеанса chroot:

    # exit

    Теперь размонтируйте временные файловые системы и корневой раздел:

    # cd / # umount --recursive /путь/к/новому/корню 

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

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

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

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

    $ xhost +local:

    Теперь, для соединения приложений с сервером X, установите переменной окружения DISPLAY в сеансе chroot значение, совпадающее с переменной окружения DISPLAY пользователя, от имени которого запущен сервер. То есть, выполните

    $ echo $DISPLAY

    от имени этого пользователя для того, чтобы узнать значение переменной, и выполните

    # export DISPLAY=:0

    в среде chroot, установив переменной нужное значение (в данном примере это :0 ).

    Без прав суперпользователя

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

    PRoot

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

    Fakechroot

    fakechroot является небольшой прослойкой, которая перехватывает системные вызовы chroot и симулирует поведение системы, на самом деле не выполняя реальных вызовов (на которые все равно нет прав). Он может использоваться вместе с fakeroot для создания видимости того, что chroot запускается суперпользователем.

    # fakechroot fakeroot chroot ~/my-chroot bash

    Unshare

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

    $ unshare --map-root-user chroot ~/namespace /bin/sh

    Решение проблем

    arch-chroot: /путь/к/новому/корню is not a mountpoint. This may have undesirable side effects.

    При выполнении arch-chroot /путь/к/новому/корню может появиться такое предупреждение:

    ==> WARNING: /путь/к/новому/корню is not a mountpoint. This may have undesirable side effects.

    Объяснение этого можно прочитать в arch-chroot(8) ; там же вы найдёте пример, как превратить каталог в точку монтирования с помощью bind mount.

    Смотрите также

    Retrieved from «https://wiki.archlinux.org/index.php?title=Chroot_(Русский)&oldid=723314»

    • System recovery (Русский)
    • Sandboxing (Русский)
    • Commands (Русский)

    Что такое chroot jail и как этим пользоваться?

    img

    Термин chroot jail появился еще в 1992 году но часто используется сегодня. Что же это означает и для чего используется эта операция?

    Что такое chroot jail?

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

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

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

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

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

    Как использовать chroot jail

    Рассмотрим на примере как создать и настроить chroot jail, чтобы он мог запускать команды bash и ls.

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

    mkdir chroot_jail

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

    chroot chroot_jail

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

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

    mkdir -p chroot_jail / bin chroot_jail / lib64 / x86_64-linux-gnu chroot_jail / lib / x86_64-linux-gnu

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

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

    Для этого используйте:

    cp $(which ls) chroot_jail/bin/ cp $(which bash) chroot_jail/bin/

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

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

    ldd $(which bash) ldd $(which ls)

    ldd

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

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

    cp /lib/x86_64-linux-gnu/libtinfo.so.6 chroot_jail/lib/x86_64-linux-gnu/ cp /lib/x86_64-linux-gnu/libdl.so.2 chroot_jail/lib/x86_64-linux-gnu/ cp /lib/x86_64-linux-gnu/libc.so.6 chroot_jail/lib/x86_64-linux-gnu/ cp /lib64/ld-linux-x86-64.so.2 chroot_jail/lib64/
    cp /lib/x86_64-linux-gnu/libselinux.so.1 chroot_jail/lib/x86_64-linux-gnu/ cp /lib/x86_64-linux-gnu/libc.so.6 chroot_jail/lib/x86_64-linux-gnu/ cp /lib/x86_64-linux-gnu/libpcre2-8.so.0 chroot_jail/lib/x86_64-linux-gnu/ cp /lib/x86_64-linux-gnu/libdl.so.2 chroot_jail/lib/x86_64-linux-gnu/ cp /lib64/ld-linux-x86-64.so.2 chroot_jail/lib64/ cp /lib/x86_64-linux-gnu/libpthread.so.0 chroot_jail/lib/x86_64-linux-gnu/

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

    sudo chroot chroot_jail

    sudo chroot chroot_jail

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

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

    ls -R

    ls -R

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

    exit

    Заключение

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *