Mount
chroot 與 unionfs-fuse,無法訪問 /dev/*
我已經結合 unionfs-fuse 創建了一個 chroot 監獄,這樣我就不需要在其中安裝另一個系統。
但是,生成的系統的 /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
like/dev/sd*
或. 中的其他文件/dev/mem
。)
解釋位於
mount.fuse
手冊頁中:文件系統
nodev,nosuid
預設掛載,只能由特權使用者覆蓋使用該
nodev
選項,核心將禁止對已掛載文件系統中的設備的所有訪問。使用該nosuid
選項,核心將忽略 setuid 和 setgid 屬性。當文件系統由非 root 使用者掛載時,這兩個選項對於安全性都是必需的:否則,掛載使用者可以創建一個 setuid root shell 或設備,讓他繞過文件系統訪問所有磁碟。
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,您可以綁定掛載一個包含準備就緒的設備的目錄。您需要綁定安裝
/dev/pts
才能在 chroot 中獲取偽終端。