
На моей машине 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
этого, конечно, было бы слишком просто. ;-)