Chroot - Chroot

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

История

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

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

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

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

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

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

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

Использует

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

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

Ограничения

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

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

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

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

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

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

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

  • Использовать xhost (или скопируйте секрет из .Xauthority)
  • Вложенные X-серверы, такие как Xnest или более современный Ксефир (или запустить настоящий X-сервер из тюрьмы)
  • Доступ к chroot через SSH с использованием функции пересылки X11 (ssh -X)
  • xchroot расширенная версия chroot для пользователей и перенаправление Xorg / X11 (socat / mount)
  • X11 VNC сервер и подключение VNC клиент вне окружающей среды.

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

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

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

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

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

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

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

Чтобы иметь функциональную среду chroot в Linux, виртуальные файловые системы ядра и файлы конфигурации также должны быть смонтированы / скопированы с хоста на chroot.

# Смонтировать виртуальные файловые системы ядраTARGETDIR="/ mnt / chroot"монтировать -t proc proc $ TARGETDIR/ procmount -t sysfs sysfs $ TARGETDIR/ sysmount -t devtmpfs devtmpfs $ TARGETDIR/ devmount -t tmpfs tmpfs $ TARGETDIR/ dev / shmmount -t devpts разработчики $ TARGETDIR/ dev / pts# Скопируйте / etc / hosts/ bin / cp -f / etc / hosts $ TARGETDIR/так далее/# Скопируйте /etc/resolv.conf / bin / cp -f /etc/resolv.conf $ TARGETDIR/etc/resolv.conf# Ссылка / etc / mtabchroot $ TARGETDIR rm / etc / mtab 2> / dev / null chroot $ TARGETDIR ln -s / proc / mounts / etc / mtab

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

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

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

внешняя ссылка