chroot с unionfs-fuse, не может получить доступ / dev / *

Я создал chroot тюрьму в сочетании с unionfs-fuse, так что мне не нужно устанавливать в нее другую систему.

Однако результирующие системные / dev записи не читаются. Это вызывает проблемы с программами, нуждающимися в доступе к /dev/random , /dev/null и /dev/urandom .

Я попытался решить проблему самостоятельно, создав каталог, состоящий из постоянных файлов и сделав эквиваленты вышеупомянутых файлов, используя mknod как описано здесь , а затем создав unionfs:

 # unionfs-fuse -o cow /chroot/files=RW:/chroot/persistent/:/ /chroot/chroot/ 

А потом,

 # chroot chroot/ 

Но, когда я пытаюсь:

 # head -c 10 /dev/random | hexdump -C 

Я получаю сообщение об ошибке:

 head: cannot open `/dev/random' for reading: Permission denied 

Как мне решить эту проблему?

(Мне не нужен доступ к другим файлам в /dev например /dev/sd* или /dev/mem .)

One Solution collect form web for “chroot с unionfs-fuse, не может получить доступ / dev / *”

Объяснение заключается в mount.fuse man mount.fuse :

nodev,nosuid системы монтируются с nodev,nosuid по умолчанию, которые могут быть переопределены только привилегированным пользователем

С опцией nodev ядро запрещает доступ к устройствам в смонтированной файловой системе. С nosuid ядро игнорирует атрибуты setuid и setgid. Оба параметра необходимы для обеспечения безопасности, когда файловая система монтируется пользователем без полномочий root: в противном случае пользователь может создать корневую оболочку setuid или устройства, позволяющие ему обращаться ко всем дискам в обход файловой системы.

Вам также понадобится опция allow_other если пользователи, не являющиеся root, должны получить доступ к этой файловой системе.

 unionfs-fuse -o cow,dev,suid,allow_other /chroot/files=RW:/chroot/persistent/:/ /chroot/chroot/ 

Если вы хотите ограничить, какие устройства видны в chroot, то соединение с монтированием не подходит для этого. Вместо этого оставьте dev и установите отдельную файловую систему, содержащую требуемый минимальный /dev . Вы можете сделать это tmpfs:

 unionfs-fuse -o cow,suid,allow_other /chroot/files=RW:/chroot/persistent/:/ /chroot/chroot/ mount -t tmpfs -o mode=755 chroot-dev /chroot/chroot/dev cp -a /dev/null /dev/zero /dev/urandom /chroot/chroot/dev mkdir /chroot/chroot/dev/pts mount --bind /dev/pts /chroot/chroot/dev/pts 

Вместо tmpfs вы можете привязать-монтировать каталог, содержащий ваши устройства, готовые к работе. Вам нужно связать-mount /dev/pts чтобы получить псевдотерминалы в chroot.

Interesting Posts

Не удалось записать в раздел

Является ли crontab многопоточным?

Редактирование командной строки bash (быстрые клавиши Emacs)

Необязательный выбор шрифта Fontconfig по умолчанию, как он определяется в конфигурациях XML? Не удалось найти в документации

Большое медиа-хранилище и ZFS или BTRFS

Используйте файл HERE и перенаправляйте вывод команды

Как проверить, является ли файл файлом шрифта

Как получить доступ на уровне пользователя к нажатию клавиш-модификаторов в консольном приложении?

Как получить текущую дату и время в формате YYYYMMDDHHMMSS в ksh88?

Аудит не смотрит / mnt / foo на RHEL4

Что означает «> |» -reirection («большая труба» -определение)?

Создавать эскиз с видео в произвольный временной интервал

Как безопасно отключить своп навсегда и вернуть пространство? (на Debian Jessie)

Моя виртуальная машина VirtualBox не обнаруживает подключенный к USB-диск диск

Вам нужно сравнить два файла и распечатать все столбцы, а затем отобразить как NA, а затем присоединиться к другому файлу

Linux и Unix - лучшая ОС в мире.