stringtranslate.com

chroot

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

Chroot: от Gentoo до Ubuntu

История

Системный вызов chroot был представлен во время разработки версии 7 Unix в 1979 году. Один источник предполагает, что Билл Джой добавил его 18 марта 1982 года — за 17 месяцев до выпуска 4.2BSD — для тестирования его установки и системы сборки. [1] Все версии BSD, имеющие ядро, имеют chroot(2). [2] [3] Раннее использование термина «jail» в применении к chroot произошло от Билла Чесвика, создавшего honeypot для слежки за хакером в 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, что может упростить проектирование jail, поскольку устраняет необходимость оставлять рабочие файлы внутри каталога chroot. Это также упрощает общую схему запуска потенциально уязвимых частей привилегированной программы в песочнице, чтобы превентивно сдержать нарушение безопасности. Обратите внимание, что chroot не обязательно достаточно для сдерживания процесса с привилегиями root.

Ограничения

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

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

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

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

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

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

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

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

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

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

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

Если включено разделение привилегий, демон OpenSSH будет chrootировать непривилегированный вспомогательный процесс в пустой каталог для обработки сетевого трафика до аутентификации для каждого клиента. Демон также может изолировать сеансы SFTP и shell в 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. ^ "jail, section 9". docs.freebsd.org . Архивировано из оригинала 2017-01-05 . Получено 2016-03-14 .
  2. Losh, Warner (2 февраля 2000 г.). «Warner's Random Hacking Blog: Wherether chroot?». Архивировано из оригинала 28 июня 2020 г. Получено 28 июня 2020 г.
  3. ^ "Инфраструктуры данных для остальных из нас - III - программное обеспечение". Архивировано из оригинала 2020-06-30 . Получено 2020-06-28 .
  4. ^ Чесвик, Билл (1991). «Вечер с Берфердом: в котором крекер соблазняется, терпится и изучается» (PDF) . Труды летней конференции USENIX, том 1 . USENIX . Сан-Франциско, Калифорния: Ассоциация. стр. 163. Архивировано (PDF) из оригинала 2018-11-05 . Получено 2018-06-09 .
  5. ^ Кэрол, Феннелли. «Летний обед». SunWorld Online . Кэрол Феннелли. Архивировано из оригинала 28 сентября 2021 г.
  6. ^ Риондато, Маттео. "FreeBSD Handbook "Jails" Chapter". freebsd.org . Проект FreeBSD. Архивировано из оригинала 2014-08-15 . Получено 2018-10-30 .
  7. ^ Николя, Буато. "chroot shell". lycos.fr . Николя Буато. Архивировано из оригинала 2002-10-14 . Получено 24 марта 2018 .
  8. ^ "Girafon". girafon.org . girafon. Архивировано из оригинала 2004-06-12 . Получено 24 марта 2018 .
  9. ^ Шмидт, Клаус (2006-09-02). Высокая доступность и аварийное восстановление: концепции, проектирование, реализация. Springer Science & Business Media. стр. 186. ISBN 9783540345824. Архивировано из оригинала 2023-02-20 . Получено 2014-08-21 .
  10. ^ "SourceForge LXC Download Files". sourceforge.net . Архивировано из оригинала 2014-08-19 . Получено 2014-08-21 .
  11. ^ Розен, Рами (2014-03-26). "Linux Containers and the Future Cloud" (PDF) . Архивировано (PDF) из оригинала 2016-04-18 . Получено 2014-08-21 .
  12. ^ "chroot(2)". www.freebsd.org . Архивировано из оригинала 2020-09-18 . Получено 2020-12-02 .
  13. ^ "Development/Howto/Chroot". Mandriva Wiki . 25 июля 2011 г. Архивировано из оригинала 2014-03-26.
  14. ^ "HOWTO startx в chroot". Gentoo Wiki . Архивировано из оригинала 2011-08-31 . Получено 2011-10-13 .
  15. ^ Дэвид, Редфилд (10 октября 2023 г.). «Atoms — это инструмент управления Linux Chroot с удобным графическим интерфейсом».
  16. ^ "sshd_config(5) manual page". 2017-10-26. Архивировано из оригинала 2018-02-05 . Получено 2018-02-04 .
  17. ^ "Chromium OS Universal Chroot Environment (на github)". GitHub . Архивировано из оригинала 2016-11-25 . Получено 2016-12-17 .

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