Как я могу вынудить chrooted программы использовать виртуальное устройство Ethernet?

Хорошо, Вы до действительно минимальной ОС. Теперь необходимо заставить некоторую машину загружать его.

Какую машину Вы используете (Ваш ноутбук, VirtualBox, и т.д.), когда это запускает, требуется некоторый ROM, содержащий код, чтобы загрузить и запустить ОС. Это обычно - что-то как BIOS. Это будет обычно просто выбирать загрузочный сектор настроенного загрузочного носителя и выполнять то, что он находит там.

Следовательно, просто поместите свою минималистическую ОС в загрузочный сектор, и все прекрасно. Если Ваша ОС не является достаточно минималистической, для загрузочного сектора нужен код для загрузки большего количества ОС.

5
06.08.2014, 01:12
2 ответа

Ответ: Насколько я могу судить по достаточно обширному гуглингу, отсутствие сетевого интервала имён в chroot на самом деле делает это невозможным. Вы не можете присвоить chroot-среде собственный IP, имя хоста или FQDN, или что-либо подобное, ни в коем случае.

Chroot полезен для защиты отдельных программ или демонов. Для создания любой изолированной тестовой системы она кажется в основном бесполезной

.
0
27.01.2020, 20:43

Chroot здесь не поможет. Это влияет только на имена файлов, но не на сетевые и другие функции.

Современные версии Linux предлагают способ виртуализации определенных аспектов среды по частям с помощью пространств имен . В дополнение к традиционной виртуализации имен файлов с помощью chroot (так что chrooted-процесс не будет видеть файлы вне chroot), вы можете виртуализировать идентификаторы процессов (так что процесс внутри пространства имен PID не сможет сигнализировать или отслеживать процессы вне пространства имен), пользователей (таким образом, пользователь 1234 внутри пространства имен пользователей не зависит от пользователя 1234 вне пространства имен) и т. д. Вас интересуют сетевые пространства имен , в которых процессы имеют свои собственные сетевые интерфейсы, IP-адреса, маршрутизация и т. д.

Я рекомендую прочитать отличную серию статей о LWN Майкла Керриска , по крайней мере, введение и статью о сетевых пространствах имен .

Сетевые пространства имен существуют с ядра 2.6.29 (с частичной реализацией, доступной в более ранних версиях), поэтому они доступны во всех современных дистрибутивах, кроме RHEL5 / CentOS5. Начиная с ядра 3.8, вы даже можете объединить сетевое пространство имен с пространством имен пользователя и выполнить настройку сети внутри пространства имен, не имея прав root за пределами пространства имен; с более ранними ядрами, такими как 3.2 на wheezy, вам понадобится root-доступ в хост-системе, чтобы в первую очередь создать пространство имен пользователя. Инструменты пользовательского уровня появляются медленнее, чем функции ядра, поэтому многие современные системы не имеют всех инструментов для полного использования функций ядра. Debian wheezy поставляется с unshare , которого достаточно для создания этого пространства имен, но в нем отсутствует оболочка оболочки nsenter около setns для действий внутри пространства имен с хоста (it стал нестабильным в июле ).

См. Команда для запуска дочернего процесса в автономном режиме (без внешней сети) в Linux для простого примера создания сетевого пространства имен. Блог Скотта Лоу содержит более подробное руководство.

1
27.01.2020, 20:43

Теги

Похожие вопросы