我正在尝试通过写入 uid_map 和 gid_map 文件来映射新命名空间中的用户和组 ID。
所以在终端 1我正在做
vaibhav@vaibhav:~$ unshare -U /bin/sh
$ id
uid=65534(nobody) gid=65534(nogroup) groups=65534(nogroup)
$ echo $$
2506
然后我打开新终端,即终端 2,然后我做
vaibhav@vaibhav:~$ echo '0 1000 1' > /proc/2506/
uid_map
vaibhav@vaibhav:~$ echo '0 1000 1' > /proc/2506/
gid_map
-bash: echo: write error: Operation not permitted
现在如果我检查终端 1
$ id
uid=0(root) gid=65534(nogroup) groups=65534(nogroup)
我知道我们只能写入一次 uid_map 和 gid_map 文件,但它在第一次写入时失败。
我想知道为什么写入 gid_map 失败。我在用着Linux Mint 20.3
自 Linux 3.19 起,在尝试映射用户组时,对非特权用户添加了一个特定限制:他们必须放弃更改补充组的权利。这通常是为了防止用户将自己从组中删除,该组充当具有所有权的文件的拒绝过滤器,例如
someuser:denygroup
和 modeu=rw,g=,o=r
。如果没有此限制,用户可以调用
setgroups(2)
并清空其补充组列表。这记录在
user_namespaces(7)
:所以对于OP的情况:
将失去对补充组的控制权,并允许完成:
笔记:
用户只能将自己的 uid/gid 映射到另一个,唯一有趣的值是它自己或root。要获得更多可能性,可以使用 setuid-root 帮助程序并在
newuidmap
和newgidmap
中使用每个用户分配的范围。这是用户非特权容器如何能够实际工作的一部分:使用特权助手。/etc/subuid
/etc/subgid
作为安全说明,正如特权命令在继续之前
newgidmap
写入的那样,只要让这个命令可用,就可以无论如何都可以逃脱拒绝组“监狱”。此命令在用户可以运行自己的非特权容器的环境中无处不在。allow
/proc/[pid]/setgroups