在我的 Linux 机器上,我(我的用户)有一个主组和多个其他组(注意我属于组 150):
$ id -u; id -g; id -G
1000
1000
1000 6 21 91 97 150 190 465 996 1003
我需要将命令隔离到用户命名空间中。我用unshare --user
它:
$ unshare --user --map-user=4000 --map-group=4000 bash -c 'id -u; id -g; id -G'
4000
4000
4000 65534
(请注意,我所属的所有组都被保留,但由于其中大多数组未映射到新的用户命名空间中,因此它们被溢出组、65534、“nobody”或“nogroup”替换。getgroups
通过调用来确认这一点返回列表“1000 65534 65534 65534 65534 65534 65534 65534 65534 65534” id
会删除该列表的重复项。)
作为用户,我不允许映射除父名称空间(1000)中的有效组之外的任何组。但在这里,我确实需要使用我的补充组之一来运行具有升级权限的可执行文件(请注意,/usr/bin/dumpcap
仅当其中一个组位于组 150 中时才可以执行,我在该组中位于外部命名空间中):
$ ls -n /usr/bin/dumpcap
-rwxr-xr-- 1 0 150 116928 Jun 7 21:16 /usr/bin/dumpcap
$ getcap /usr/bin/dumpcap
/usr/bin/dumpcap cap_dac_override,cap_net_admin,cap_net_raw=eip
有没有办法使用户命名空间中的组映射到我在父命名空间中所属的补充组(此处为150)? ——CAP_SETGID
当然,如果没有的话那就太容易了。 ;-)