chroot
Оригинальный автор(ы) | Билл Джой , AT&T Bell Laboratories |
---|---|
Разработчик(и) | Различные с открытым исходным кодом и коммерческие разработчики разработчики |
Первоначальный выпуск | 1979 год |
Операционная система | Unix , Unix-подобные , Plan 9 , Inferno |
Платформа | Кросс-платформенный |
Тип | Команда |
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/пароль и /etc/shadow ), что приведет к повышению привилегий .
Некоторые Unix-системы предлагают расширения механизма chroot для устранения хотя бы некоторых из этих ограничений (см. Реализации технологии виртуализации на уровне операционной системы ).
Графические приложения в chroot [ править ]
Можно запускать графические приложения в chrooted-среде, используя такие методы, как: [13] [14]
- Используйте xhost (или скопируйте секрет из .Xauthority).
- Вложенные X-серверы, такие как Xnest или более современный Xephyr (или запуск настоящего X-сервера из тюрьмы)
- Доступ к chroot через SSH с использованием функции пересылки X11 (ssh -X).
- xchroot расширенная версия chroot для пользователей и переадресация Xorg/X11 (socat/mount)
- Сервер X11 VNC и подключение клиента VNC вне среды.
- Atoms — это инструмент управления Chroot Linux с удобным графическим интерфейсом. [15]
Известные приложения [ править ]
Агент передачи почты 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.
# Mount Kernel Virtual File Systems
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
# Copy /etc/hosts
/bin/cp -f /etc/hosts $TARGETDIR/etc/
# Copy /etc/resolv.conf
/bin/cp -f /etc/resolv.conf $TARGETDIR/etc/resolv.conf
# Link /etc/mtab
chroot $TARGETDIR rm /etc/mtab 2> /dev/null
chroot $TARGETDIR ln -s /proc/mounts /etc/mtab
См. также [ править ]
- Список команд Unix
- Виртуализация на уровне операционной системы
- Песочница (компьютерная безопасность)
- судо
Ссылки [ править ]
- ^ «тюрьма, отделение 9» . docs.freebsd.org . Архивировано из оригинала 5 января 2017 г. Проверено 14 марта 2016 г.
- ^ Лош, Уорнер (2 февраля 2000 г.). «Блог случайного взлома Warner: куда идти chroot?» . Архивировано из оригинала 28 июня 2020 года . Проверено 28 июня 2020 г.
- ^ «Инфраструктуры данных для всех нас – III – программное обеспечение» . Архивировано из оригинала 30 июня 2020 г. Проверено 28 июня 2020 г.
- ^ Чесвик, Билл (1991). «Вечер с Берфердом: в котором заманивают, выдерживают и изучают взломщика» (PDF) . Материалы летней конференции USENIX, Том 1 . УСЕНИКС . Сан-Франциско, Калифорния: Ассоциация. п. 163. Архивировано (PDF) из оригинала 5 ноября 2018 г. Проверено 9 июня 2018 г.
- ^ Кэрол, Феннелли. «Летний обед» . SunWorld онлайн . Кэрол Феннелли. Архивировано из оригинала 28 сентября 2021 года.
- ^ Риондато, Маттео. «Справочник FreeBSD, глава «Тюрьмы»» . freebsd.org . Проект FreeBSD. Архивировано из оригинала 15 августа 2014 г. Проверено 30 октября 2018 г.
- ^ Николя, Буато. «Chroot-оболочка» . lycos.fr . Николя Буате. Архивировано из оригинала 14 октября 2002 г. Проверено 24 марта 2018 г.
- ^ «Жирафон» . сайт girafon.org . жирафон. Архивировано из оригинала 12 июня 2004 г. Проверено 24 марта 2018 г.
- ^ Шмидт, Клаус (2 сентября 2006 г.). Высокая доступность и аварийное восстановление: концепции, проектирование, реализация . Springer Science & Business Media. п. 186. ИСБН 9783540345824 . Архивировано из оригинала 20 февраля 2023 г. Проверено 21 августа 2014 г.
- ^ «Файлы загрузки SourceForge LXC» . sourceforge.net . Архивировано из оригинала 19 августа 2014 г. Проверено 21 августа 2014 г.
- ^ Розен, Рами (26 марта 2014 г.). «Контейнеры Linux и облако будущего» (PDF) . Архивировано (PDF) из оригинала 18 апреля 2016 г. Проверено 21 августа 2014 г.
- ^ "chroot(2)" . www.freebsd.org . Архивировано из оригинала 18 сентября 2020 г. Проверено 2 декабря 2020 г.
- ^ «Разработка/Howto/Chroot» . Мандрива Вики . 25 июля 2011 г. Архивировано из оригинала 26 марта 2014 г.
- ^ «КАК запускать x в chroot» . Генту вики . Архивировано из оригинала 31 августа 2011 г. Проверено 13 октября 2011 г.
- ^ Дэвид, Редфилд (10 октября 2023 г.). «Atoms — это инструмент управления Chroot Linux с удобным графическим интерфейсом» .
- ^ «Страница руководства sshd_config(5)» . 26 октября 2017 г. Архивировано из оригинала 05 февраля 2018 г. Проверено 4 февраля 2018 г.
- ^ «Универсальная среда Chroot для Chromium OS (на github)» . Гитхаб . Архивировано из оригинала 25 ноября 2016 г. Проверено 17 декабря 2016 г.
Внешние ссылки [ править ]
- FreeBSD по системным вызовам Руководство : изменить корневой каталог –
- FreeBSD администратора системы Руководство : изменить корневой каталог –
- Linux программиста Руководство – Системные вызовы : изменить корневой каталог –
- Интеграция GNU/Linux с Android с помощью chroot