我正在尝试从用户命名空间内部挂载 9p 文件系统。
首先,我运行 9p 服务器:
p9ufs -v --unix '/run/9p/srved'
然后我使用 setuid 二进制 9mount (https://sqweek.net/code/9mount/) 安装它:
9mount -u 'unix!/run/9p/srved' /tmp/ed1
它有效。
我编辑了9mount的代码来显示它的uid和euid,它说:“getuid返回1000,geteuid返回0”。我还检查:
grep Uid /proc/$(pgrep 9mount)/status
并得到1000 0 0 0
.
现在,如果我从用户名称空间内部执行相同的操作,则会失败。首先我输入用户名称空间:
unshare -U
然后,从命名空间外部创建一个 gid 和 uid 映射,因为文档说:
如果文件的用户或组 ID 在命名空间内没有映射,则 set-user-ID (set-group-ID) 位将被静默忽略
-- https://man7.org/linux/man-pages/man7/user_namespaces.7.html
为了创建映射,我从命名空间外部运行以下命令:
sudo sh -c 'echo 0 0 4294967295 > /proc/11339/gid_map'
sudo sh -c 'echo 0 0 4294967295 > /proc/11339/uid_map'
现在,我再次运行 9mount,它显示“getuid 返回 1000,geteuid 返回 0”,从命名空间外部,它也被视为 euid 0,但是,对 mount() 的调用失败,并显示“9mount: mount:不允许操作”。
我不明白。