A chroot в Unix операционных системах - это операция, которая изменяет видимое корневой каталог для текущего запущенного процесса и его дочерних. Программа, запущенная в такой измененной среде, не может давать имена (и, следовательно, обычно не может получить доступ) к файлам за пределами назначенного дерева каталогов. Термин «chroot» может относиться к системному вызову chroot (2) или программе-оболочке chroot (8). Измененная среда называется chroot jail .
Системный вызов chroot был представлен во время разработки Версии 7 Unix в 1979 году. Один источник предполагает, что Билл Джой добавил его 18 марта 1982 года, за 17 месяцев до выпуска 4.2BSD, чтобы протестировать его систему установки и сборки. Оказывается, это была ошибка при интерпретации файлов SCCS для кода, который перемещался по ядру. Все версии BSD с ядром имеют chroot (2). Термин «тюрьма» применительно к chroot был впервые использован в 1991 г., когда Билл Чесвик создал приманку для отслеживания взломщика.
Первая статья о побеге из тюрьмы обсуждалась в колонке безопасности SunWorld Online, которую написала Кэрол Феннелли; выпуски от августа 1999 г. и января 1999 г. охватывают большую часть тем chroot ().
Чтобы сделать его полезным для виртуализации, FreeBSD расширила концепцию и в своем выпуске 4.0 в 2000 году представила команду jail.
К 2002 году в статье, написанной Николасом Бойтё, описывалось, как создать тюрьму в Linux
. К 2003 году первые интернет-провайдеры микросервисов с Тюрьмы Linux предоставляют услуги SAAS / PAAS (оболочки-контейнеры, прокси, ircd, боты и т. Д.), Которые оплачиваются за потребление в тюрьме по использованию
К 2005 году Sun выпустила Solaris Контейнеры (также известные как зоны Solaris), описываемые как «chroot на стероидах».
К 2008 году LXC (на котором позже был построен Docker ) приняла терминологию «контейнер» и приобрела популярность в 2013 году благодаря включению в ядро Linux 3.8 из пользовательских пространств имен.
Среда chroot может использоваться для создания и размещения отдельная виртуализированная копия программной системы. Это может быть полезно для следующих целей:
Механизм chroot не предназначен для защиты от преднамеренного вмешательства привилегированных (root) пользователей. В большинстве систем контексты chroot не складываются должным образом, и программы chroot с достаточными привилегиями могут выполнить второй chroot для выхода. Чтобы снизить риск этой слабости безопасности, chrooted-программы должны отказываться от root-привилегий сразу после chroot, или вместо этого следует использовать другие механизмы, такие как FreeBSD jails. Обратите внимание, что некоторые системы, такие как FreeBSD, принимают меры предосторожности для предотвращения второй chroot-атаки.
В системах, которые поддерживают узлы устройств в обычных файловых системах, chrooted пользователь root все еще может создавать узлы устройств и монтировать на них файловые системы; таким образом, механизм chroot сам по себе не предназначен для блокирования низкоуровневого доступа привилегированных пользователей к системным устройствам. Он не предназначен для ограничения использования таких ресурсов, как ввод-вывод, пропускная способность, дисковое пространство или время процессора. Большинство Unix-систем не полностью ориентированы на файловую систему и оставляют потенциально разрушительные функции, такие как сеть и управление процессами, доступными через интерфейс системных вызовов для chrooted-программы.
При запуске программы ожидают найти рабочее пространство, файлы конфигурации, узлы устройств и общие библиотеки в определенных заранее заданных местах. Для успешного запуска chrooted-программы, chroot-каталог должен быть заполнен минимальным набором этих файлов. Это может затруднить использование chroot в качестве общего механизма песочницы.
Только пользователь root может выполнять chroot. Это сделано для того, чтобы пользователи не могли поместить программу setuid в специально созданную chroot-тюрьму (например, с поддельными / etc / passwd и / etc / shadow file), что может обмануть его, заставив повысить привилегии.
Некоторые Unix-системы предлагают расширения механизма chroot для устранения хотя бы некоторых из этих ограничений (см. Реализации уровня операционной системы технология виртуализации ).
Можно запускать графические приложения в chrooted среде, используя такие методы, как:
Агент передачи почты Postfix работает как конвейер индивидуально привязанных вспомогательных программ.
Как и до 4.2BSD, внутренние фермы сборки пакетов Debian и Ubuntu широко используют chroot для выявления непреднамеренных зависимостей сборки между пакетами. SUSE использует аналогичный метод со своей программой сборки. Fedora, Red Hat и различные дистрибутивы на основе RPM создают все RPM с использованием инструмента chroot, такого как mock.
Многие FTP-серверы для систем POSIX используют механизм chroot для песочница для ненадежных FTP-клиентов. Это может быть выполнено путем разветвления процесса для обработки входящего соединения и последующего chroot дочернего процесса (чтобы избежать необходимости заполнять chroot библиотеками, необходимыми для запуска программы).
Если включено разделение привилегий, демон OpenSSH заблокирует непривилегированный вспомогательный процесс в пустой каталог для обработки сетевого трафика до аутентификации для каждого клиента. Демон также может изолировать сеансы SFTP и оболочки в chroot (начиная с версии 4.9p1 и далее).
Chrome OS может использовать chroot для запуска экземпляра Linux с помощью Crouton, обеспечивая в противном случае тонкий ОС с доступом к аппаратным ресурсам. Здесь применяются последствия для безопасности, описанные в этой статье.
Чтобы иметь функциональную среду chroot в Linux, виртуальные файловые системы ядра и файлы конфигурации также должны быть смонтированы / скопированы с хоста на chroot.
# Смонтировать виртуальные файловые системы ядра TARGETDIR = "/ mnt / chroot" mount -t proc proc $ TARGETDIR / proc mount -t sysfs sysfs $ TARGETDIR / sys mount -t devtmpfs devtmpfs $ TARGETDIR / dev mount -t tmpfs tmpfs $ TARGETDIR / dev / shm mount -t devpts devpts $ TARGETDIR / dev / pts # Скопируйте / etc / hosts / bin / cp -f / etc / hosts $ TARGETDIR / etc / # Скопируйте /etc/resolv.conf / bin / cp - f /etc/resolv.conf $ TARGETDIR / etc / resolv.conf # Ссылка / etc / mtab chroot $ TARGETDIR rm / etc / mtab 2>/ dev / null chroot $ TARGETDIR ln -s / proc / mounts / etc / mtab
chroot (2)
: изменить корневой каталог - FreeBSD Системные вызовы Ручное chroot(8)
: изменить корневой каталог - FreeBSD System Руководство chroot(2)
менеджера: изменить корневой каталог - Linux Руководство программиста - Системные вызовы