LINUX.ORG.RU

chroot-окружение


0

1

Прочитал на вики статью про chroot https://ru.wikipedia.org/wiki/Chroot Задумался.
Я вот хочу сделать sandbox в котором можно было совершать действия требующие root, но не вредящие основной системе: устанавливать программы через «make install», например. Вопрос, как вообще chroot-окружение создать? Я создаю, например, каталог /chroot, в нем систему каталогов linux: /bin,/lib,/etc,/var,/proc. Затем туда устанавливаю bash, glibc, что ещё необходимо чтобы программы запускать? Вопрос второй, насколько это безопасно? Программы, выполняемые в chroot-окружении, имеют доступ только к chroot-окружению, но ведь теоретически они могут из него выбраться: например через повторный chroot или через mount. Как обезопаситься от этого?

★★★★★

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

Чруты ограничены только на уровне доступных файлов в фс. Система может смонтировать диск, если ей доступны файлы дисков в /dev (может ли система создать такие файлы при их отсутствии я не знаю, но что-то подсказывает, что может).

Для большей безопасности лучше использовать контейнеры или виртуализацию.

PolarFox ★★★★★
()

Вопрос, как вообще chroot-окружение создать?

По-колхозному - поставить виртуалку, затарить ей /, развернуть в чрут и прокинуть биндами хостовые /proc /sys и что там ещё.

Как обезопаситься

Если такой вопрос вообще возникает, значит чрут не подходит.

Deleted
()
Ответ на: комментарий от Deleted

Вроде как оно использует lxc, который всё же обеспечивает более высокий уровень изоляции.

PolarFox ★★★★★
()

gentoo например устанавливается с помощью чрута, можешь почитать хендбук.

TDrive ★★★★★
()

Программы, выполняемые в chroot-окружении, имеют доступ только к chroot-окружению, но ведь теоретически они могут из него выбраться: например через повторный chroot или через mount. Как обезопаситься от этого?

как обычно: создать обычного пользователя.

устанавливать программы через «make install»

для этого не нужно быть рутом. Что ещё?

emulek
()
Ответ на: комментарий от PolarFox

файлы дисков в /dev (может ли система создать такие файлы при их отсутствии я не знаю, но что-то подсказывает, что может).

правильно подсказывает: man mknod

emulek
()

Резюмируя сказанное:
Если нужно поставить программу через «make install» или через slackbuild, но страшно за систему, то можно это сделать под чтутом.
Если собираешься ставить более опасные эксперементы или защищаться от хакеров - то чрут не поможет и лучше использовать докер или виртуалки. Кстати что такое докер?

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

А под слакой как?

для этого не нужно быть рутом. Что ещё?

Как ты себе представляешь запись в /usr без рута?

sunny1983 ★★★★★
() автор топика

stage3 распакуй от генты

mittorn ★★★★★
()
Ответ на: комментарий от sunny1983

Как ты себе представляешь запись в /usr без рута?

./configure --prefix=/home/user/.local например

mittorn ★★★★★
()
Ответ на: комментарий от deterenkelt

И поэтому ты решил за него. Правильно.

Deleted
()
Ответ на: комментарий от deterenkelt

В Debian можно воспользоваться debbootstap, в Gentoo распаковать stage3, в Slackware наверняка можно поступить как-нибудь по своему, например с помощью installpkg установить группу с"A" в chroot-каталог. Но верно ли это? Наверное создание chroot-окружения должно отличаться от создания окружения для новой установки, разные вещи всё-таки.

sunny1983 ★★★★★
() автор топика
Ответ на: комментарий от sunny1983

Но верно ли это? Наверное создание chroot-окружения должно отличаться от создания окружения для новой установки

Прости, ты

устанавливать программы через «make install»

на голый тулчейн собрался?

deterenkelt
()

В новых ядрах есть разделение namespace'ов — в том числе PID и прочих. Это реализуется через пару сисколлов. Напиши патч к chroot :) Тебе скажут очень большое спасибо.

anonymous
()

для безопасности можно из чрут окружения убрать chroot и mount

teod0r ★★★★★
()
Ответ на: комментарий от deterenkelt

deterenkelt, сейчас поясню Нашёл я допустим, программу, которой нет в официальном репозитории, но есть в виде исходников. Я ничего не делаю в рабочей системе, потому что у меня для этого есть sandbox в виде chroot-окружения. Перехожу в sandbox, там распаковываю исходники, делаю:

./configure
make
touch timestamp
make install
find / -xdev -newer timestamp
Последняя команда выдаст список всех файлов, что появились в системе после «make install». Можно будет упаковать файлы из этого списка и с помощью makepkg получить готовый tgz-пакет программы. Я тестирую программу в садбоксе и, если сочту её годной, устанавливаю в рабочей системе, но уже не через «make install», а из готового пакета.

sunny1983 ★★★★★
() автор топика
Ответ на: комментарий от deterenkelt

Я про этот трюк где-то читал. Список файлов правда потом подредактировать немного придётся, потому что в него попадают открытые логи такие как /var/log/dmesg
А есть способ лучше?

sunny1983 ★★★★★
() автор топика
Ответ на: комментарий от sunny1983

Почему бы не сделать, как пакетные менеджеры — установить в пустой клон дерева каталогов рутовой фс? В пакете, конечно, все нужные каталоги прописаны, но большинству и заранее известных /usr/{bin,lib,lib64,share/{doc,man/man1}} хватит же. +man fakeroot

deterenkelt
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.