如何从非特权用户命名空间挂载 9p 文件系统?

如何从非特权用户命名空间挂载 9p 文件系统?

我正在尝试从用户命名空间内部挂载 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:不允许操作”。

我不明白。

相关内容