Mount

chroot 與 unionfs-fuse,無法訪問 /dev/*

  • December 16, 2014

我已經結合 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

我應該如何解決這個問題?

(我不需要訪問/devlike/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 中獲取偽終端。

引用自:https://unix.stackexchange.com/questions/174277