stringtranslate.com

chroot

chroot— это операция в Unix и Unix-подобных операционных системах , которая изменяет очевидный корневой каталог для текущего запущенного процесса и его дочерних элементов . Программа, запущенная в такой измененной среде, не может называть файлы (и, следовательно, обычно не имеет доступа) за пределами назначенного дерева каталогов. Термин «chroot» может относиться к системному вызову chroot(2) или программе-оболочке chroot(8) . Измененная среда называется chroot-тюрьмой .

История

Системный вызов chroot был введен во время разработки версии 7 Unix в 1979 году. Один источник предполагает, что Билл Джой добавил его 18 марта 1982 года — за 17 месяцев до выпуска 4.2BSD — чтобы протестировать систему установки и сборки. [1] Все версии BSD с ядром имеют chroot(2). [2] [3] Первое использование термина «тюрьма» применительно к chroot принадлежит Биллу Чесвику , создавшему приманку для наблюдения за хакером в 1991 году . [4]

Первая статья о побеге из тюрьмы обсуждалась в колонке безопасности SunWorld Online, написанной Кэрол Феннелли; выпуски за август 1999 г. и январь 1999 г. охватывают большую часть тем, связанных с chroot(). [5]

Чтобы сделать ее полезной для виртуализации , FreeBSD расширила эту концепцию и в версии 4.0 в 2000 году представила команду Jail . [6]

В 2002 году Николя Бойто опубликовал статью, в которой описывалось, как создать тюрьму в Linux. [7]

К 2003 году первые интернет-провайдеры микросервисов с тюрьмами Linux предоставили услуги SAAS/PAAS (контейнеры оболочки, прокси, ircd, боты и т. д.), счета за потребление в тюрьме в зависимости от использования. [8]

К 2005 году Sun выпустила Solaris Containers (также известный как Solaris Zones), описанный как «chroot на стероидах». [9]

К 2008 году LXC (на основе которого позже был построен Docker ) принял «контейнерную» терминологию [10] и приобрел популярность в 2013 году благодаря включению в ядро ​​Linux 3.8 пользовательских пространств имен . [11]

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

Среду chroot можно использовать для создания и размещения отдельной виртуализированной копии программной системы. Это может быть полезно для:

Тестирование и разработка
В chroot можно настроить тестовую среду для программного обеспечения, развертывание которого в производственной системе в противном случае было бы слишком рискованным.
Контроль зависимостей
Программное обеспечение можно разрабатывать, собирать и тестировать в chroot, заполненном только ожидаемыми зависимостями. Это может предотвратить некоторые виды перекоса связей, которые могут возникнуть в результате создания проектов разработчиками с различными наборами установленных программных библиотек.
Совместимость
Устаревшее программное обеспечение или программное обеспечение, использующее другой ABI, иногда необходимо запускать в chroot, поскольку в противном случае их вспомогательные библиотеки или файлы данных могут конфликтовать по имени или связям с библиотеками хост-системы.
Восстановление
Если система становится незагружаемой, можно использовать chroot для возврата в поврежденную среду после загрузки из альтернативной корневой файловой системы (например, с установочного носителя или Live CD ).
Разделение привилегий
Программам разрешено переносить открытые файловые дескрипторы (для файлов, конвейеров и сетевых подключений) в chroot, что может упростить конструкцию тюрьмы, избавляя от необходимости оставлять рабочие файлы внутри chroot-каталога. Это также упрощает общепринятую схему запуска потенциально уязвимых частей привилегированной программы в «песочнице», чтобы упреждающе сдержать нарушение безопасности. Обратите внимание, что chroot не обязательно достаточен для размещения процесса с привилегиями root.

Ограничения

Механизм chroot не предназначен для защиты от преднамеренного вмешательства со стороны привилегированных (root) пользователей. Заметным исключением является NetBSD , в которой chroot считается механизмом безопасности, и экранирование не известно. В большинстве систем контексты chroot не складываются должным образом, и программы с достаточными привилегиями могут выполнить второе chroot для выхода. Чтобы снизить риск этих недостатков безопасности, chrooted-программы должны отказаться от привилегий root как можно скорее после chrooting или вместо этого следует использовать другие механизмы, такие как тюрьмы FreeBSD . Обратите внимание, что некоторые системы, такие как FreeBSD , принимают меры предосторожности, чтобы предотвратить повторную атаку chroot. [12]

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

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

Только пользователь root может выполнить chroot. Это сделано для того, чтобы пользователи не могли поместить программу setuid в специально созданную тюрьму chroot (например, с поддельными файлами /etc/passwd и /etc/shadow ), что могло бы обмануть ее и заставить повысить привилегии .

Некоторые Unix-системы предлагают расширения механизма chroot для устранения хотя бы некоторых из этих ограничений (см. Реализации технологии виртуализации на уровне операционной системы ).

Графические приложения в chroot

Можно запускать графические приложения в chroot-окружении, используя такие методы, как: [13] [14]

Известные приложения

Агент передачи почты Postfix работает как конвейер индивидуально внедренных вспомогательных программ.

Как и в предыдущей версии 4.2BSD, внутренние фермы сборки пакетов Debian и Ubuntu широко используют chroot для обнаружения непреднамеренных зависимостей сборки между пакетами. SUSE использует аналогичный метод в своей программе сборки . Fedora, Red Hat и различные другие дистрибутивы на основе RPM собирают все RPM с помощью инструмента chroot, такого как макет.

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

Если разделение привилегий включено, демон OpenSSH выполнит chroot непривилегированного вспомогательного процесса в пустой каталог для обработки сетевого трафика предварительной аутентификации для каждого клиента. Демон также может изолировать сеансы SFTP и оболочки в chroot (начиная с версии 4.9p1). [16]

ChromeOS может использовать chroot для запуска экземпляра Linux с помощью Crouton , [17] предоставляя тонкой ОС доступ к аппаратным ресурсам. Здесь применимы последствия для безопасности, описанные в этой статье.

Виртуальные файловые системы ядра хоста Linux и файлы конфигурации

Чтобы иметь функциональную среду 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           

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

Рекомендации

  1. ^ "тюрьма, секция 9" . docs.freebsd.org . Архивировано из оригинала 5 января 2017 г. Проверено 14 марта 2016 г.
  2. Лош, Уорнер (2 февраля 2000 г.). «Блог случайного взлома Warner: куда идти chroot?». Архивировано из оригинала 28 июня 2020 года . Проверено 28 июня 2020 г.
  3. ^ «Инфраструктуры данных для всех нас - III - программное обеспечение» . Архивировано из оригинала 30 июня 2020 г. Проверено 28 июня 2020 г.
  4. ^ Чесвик, Билл (1991). «Вечер с Берфердом: в котором заманивают, выдерживают и изучают взломщика» (PDF) . Материалы летней конференции USENIX, Том 1 . УСЕНИКС . Сан-Франциско, Калифорния: Ассоциация. п. 163. Архивировано (PDF) из оригинала 5 ноября 2018 г. Проверено 9 июня 2018 г.
  5. ^ Кэрол, Феннелли. «Летний обед». SunWorld онлайн . Кэрол Феннелли. Архивировано из оригинала 28 сентября 2021 года.
  6. ^ Риондато, Маттео. «Руководство FreeBSD, глава «Тюрьмы»». freebsd.org . Проект FreeBSD. Архивировано из оригинала 15 августа 2014 г. Проверено 30 октября 2018 г.
  7. ^ Николя, Буато. «Chroot-оболочка». lycos.fr . Николя Буате. Архивировано из оригинала 14 октября 2002 г. Проверено 24 марта 2018 г.
  8. ^ "Жирафон". сайт girafon.org . жирафон. Архивировано из оригинала 12 июня 2004 г. Проверено 24 марта 2018 г.
  9. ^ Шмидт, Клаус (2 сентября 2006 г.). Высокая доступность и аварийное восстановление: концепции, проектирование, реализация. Springer Science & Business Media. п. 186. ИСБН 9783540345824. Архивировано из оригинала 20 февраля 2023 г. Проверено 21 августа 2014 г.
  10. ^ «Файлы загрузки SourceForge LXC» . sourceforge.net . Архивировано из оригинала 19 августа 2014 г. Проверено 21 августа 2014 г.
  11. ^ Розен, Рами (26 марта 2014 г.). «Контейнеры Linux и облако будущего» (PDF) . Архивировано (PDF) из оригинала 18 апреля 2016 г. Проверено 21 августа 2014 г.
  12. ^ "chroot(2)". www.freebsd.org . Архивировано из оригинала 18 сентября 2020 г. Проверено 2 декабря 2020 г.
  13. ^ "Разработка/Howto/Chroot" . Мандрива Вики . 25 июля 2011 г. Архивировано из оригинала 26 марта 2014 г.
  14. ^ "КАК запускать x в chroot" . Генту вики . Архивировано из оригинала 31 августа 2011 г. Проверено 13 октября 2011 г.
  15. Дэвид, Редфилд (10 октября 2023 г.). «Atoms — это инструмент управления Chroot Linux с удобным графическим интерфейсом».
  16. ^ "Страница руководства sshd_config(5)" . 26 октября 2017 г. Архивировано из оригинала 5 февраля 2018 г. Проверено 4 февраля 2018 г.
  17. ^ «Универсальная среда Chroot для Chromium OS (на github)» . Гитхаб . Архивировано из оригинала 25 ноября 2016 г. Проверено 17 декабря 2016 г.

Внешние ссылки