LINUX.ORG.RU

chroot и монтирование proc, sys, dev

 


1

1

Запутался совсем с тем, как монтировать proc, sys и dev. Помогите плиз.

Ситуация такова: есть chroot-песочница, которая должна жить полностью своей жизнью. Все, что ей нужно от хоста — это несколько устройств из /dev. Собственного ssh и других «потребителей» pts у нее нет.

Тут есть два варианта:
1. монтирование (mount -t proc proc $CHROOT/proc)
2. биндинг (mount -o bind /dev $CHROOT/dev)
Какие каталоги как монтировать?

Плюс вопрос в том, откуда это делать? Что нужно монтировать на хосте, а что уже из-под chroot?

У меня после «неудачного» монтирования /dev почему-то отвалился /dev/pts и стоило больших усилий вернуть контроль над сервером.



Последнее исправление: quwy (всего исправлений: 2)

Странный use case, похожее видел только для maintenance (восстановление загрузчика grub, к примеру).

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

use case там ооочень странный. chroot-система имеет другую аппаратную архитектуру, работает в через qemu-user-static и крутит адскую legacy-проприетарщину.

Полетел винт, пришлось все настраивать с нуля. Запуск гостя я сделал, все вроде как работает, вот только с этими монтированиями что-то не хватает понимания как оно должно быть, чтобы без сюрпризов потом.

quwy
() автор топика

systemd-nspawn, LXC. Если конкретно chroot, то:

mount -t proc /proc /mnt/$CHROOT/proc
mount --rbind /sys /mnt/$CHROOT/sys
mount --make-rslave /mnt/$CHROOT/sys
mount --rbind /dev /mnt/$CHROOT/dev
mount --make-rslave /mnt/$CHROOT/dev

Надеюсь, ты понимаешь, что ни chroot, ни systemd-nspawn, ни LXC это не полноценные песочницы.

Если тебе нужна безопасность — дополнительно смотри в сторону SELinux, AppArmor, TOMOYO и т.д.

Pravorskyi ★★★
()

И ещё:

Some distributions make /dev/shm a symbolic link to /run/shm/ which, after the chroot, becomes invalid. Making /dev/shm/ a proper tmpfs mount up front can fix this:

test -L /dev/shm && rm /dev/shm && mkdir /dev/shm
mount -t tmpfs -o nosuid,nodev,noexec shm /dev/shm

Also ensure that mode 1777 is set

chmod 1777 /dev/shm

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

Благодарю.

Если тебе нужна безопасность

Дело не в безопасности. Там работает бинарь, которую выколупали с какого-то специфического MIPS-девайса. Девайс, как я понял, давно сдох, и какой-то умелец перенес ее на обычный комп, настроил запуск MIPS-окружения через chroot и qemu-user. А теперь винт посыпался, систему пришлось переустанавливать на новый. Бинарь спасти ума хватило, а вот скрипты запуска этого будтерброда канули в лету, приходится переизобретать теперь.

quwy
() автор топика

В Gentoo Handbook сказано так:

mount -t proc none /mnt/suse/proc
mount --rbind /dev /mnt/suse/dev
mount --rbind /sys /mnt/suse/sys

Ну и дальше чруться в нужную директорию.

А вот отмонтировать сложнее. Это я нашёл сам, где-то в интернете.

umount /mnt/suse/proc
cat /proc/mounts | awk '{print $2}' | grep "/mnt/suse/sys" | sort -r | xargs umount
cat /proc/mounts | awk '{print $2}' | grep "/mnt/suse/dev" | sort -r | xargs umount
umount /mnt/suse

Я где-то писал чуть-чуть подробнее, чем сейчас.

ZenitharChampion ★★★★★
()
Последнее исправление: ZenitharChampion (всего исправлений: 1)
Ответ на: комментарий от Pyzia

mount --bind /proc /chroot/proc

Вот это самое интересное. Во-первых все советуют по-разному (даже в этом топике), а во-вторых я так понимаю, ваш вариант пробросит /proc с хота в гостя, что мне совсем не надо. У гостя своя кухня с другой архитектурой и ему хостовый /proc как бы не нужен, надо чтобы все было свое, как на отдельной системе. И тут вроде бы уместен mount -t proc /proc $CHROOT/proc ?

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

/proc наполняет работающее ядро. Ну и какая с точки зрения приведенных аргументов разница между mount --bind ... и mount -t proc ... ?

bormant ★★★★★
()
Последнее исправление: bormant (всего исправлений: 1)
Ответ на: комментарий от bormant

Ну, с этой точки зрения действительно нет разницы.

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

Это как раз сейчас, а лет 10 назад я просто делал umount для dev и потом сразу корня. Теперь такое не прокатывает. Да и sys я тогда не монтировал.

grem ★★★★★
()
Последнее исправление: grem (всего исправлений: 2)
Ответ на: комментарий от ZenitharChampion

Посмотрел handbook gentoo в вебархиве: в 2004 перед переходом в chroot монтировали только "-t proc none", в 2006 помимо него уже монтировали "-o bind /dev" (теперь "--rbind /dev"), сейчас ещё и "--rbind /sys" нужен, а если используется systemd, то дополнительно нужно писать всякие "--make-rslave" к ним после их монтирования, как упомянули выше.

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

У гостя своя кухня с другой архитектурой и ему хостовый /proc как бы не нужен, надо чтобы все было свое, как на отдельной системе.

Ты определись, ты про гостя с другой архитектурой говоришь или про чрут?

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от quwy

mount -t proc неужен только когда система не в состоянии сама определить, что за тип ФС крутится там. По поводу гостся со своей кухней-не до конца понял, видимо, но если так, то тебе не нужен совсем ни proc ни sys на госте. И да, я не представляю, как создать нормальный чрут без proc и sys из системы.

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

Про chroot в ФС с бинарями для другой архитектуры.

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