我想知道 devtmpfs 在命名空间方面是否特殊。
这是我的系统信息(使用 Vagrant 进行测试)
vagrant@ubuntu-xenial:~/test$ uname -a
Linux ubuntu-xenial 4.4.0-135-generic #161-Ubuntu SMP Mon Aug 27 10:45:01 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
一个基本的演示可以最好地解释:
vagrant@ubuntu-xenial:~/test$ unshare --ipc --uts --user --mount --fork --pid --net --map-root-user
root@ubuntu-xenial:~/test# mkdir proc
root@ubuntu-xenial:~/test# mkdir sys
root@ubuntu-xenial:~/test# mount -t proc proc ./proc/
root@ubuntu-xenial:~/test# mount -t sysfs sysfs ./sys/
root@ubuntu-xenial:~/test# mkdir dev
root@ubuntu-xenial:~/test# mount -t devtmpfs devtmpfs ./dev/
mount: permission denied
root@ubuntu-xenial:~/test# exit
logout
我有权限挂载 proc 和 sys,但没有权限挂载 devtmpfs?
不过,tmpfs 可以工作(也可以使用相同的 unshare 命令运行)
root@ubuntu-xenial:~/test# mount -t tmpfs tmpfs ./dev/
EDIT2:根据 sourcejedi 的反馈将之前的编辑移至答案。
答案1
我相信这与文件系统标志有关FS_USERNS_MOUNT
(https://lwn.net/Articles/652468/)。
内核的快速 grep 似乎表明它没有设置devtmpfs
:livegrep.com 结果
如果有人有更好的答案,我很乐意接受!