
En mi máquina Linux, yo (mi usuario) tengo un grupo principal y varios otros grupos (tenga en cuenta que pertenezco al grupo 150):
$ id -u; id -g; id -G
1000
1000
1000 6 21 91 97 150 190 465 996 1003
Necesito aislar un comando en un espacio de nombres de usuario. Yo uso unshare --user
para eso:
$ unshare --user --map-user=4000 --map-group=4000 bash -c 'id -u; id -g; id -G'
4000
4000
4000 65534
(Tenga en cuenta que todos los grupos a los que pertenecía se mantienen pero, como la mayoría de ellos no están asignados en el nuevo espacio de nombres de usuario, se reemplazan por el grupo desbordado, 65534, "nadie" o "nogroup". Una llamada a getgroups
confirma eso por al devolver la lista "1000 65534 65534 65534 65534 65534 65534 65534 65534 65534 id
se deduplica esa lista).
Como usuario, no tengo permitido asignar ningún grupo excepto el grupo efectivo en el espacio de nombres principal (1000). Pero aquí, necesito usar uno de mi grupo suplementario para ejecutar un ejecutable con privilegios escalados (tenga en cuenta que /usr/bin/dumpcap
solo se puede ejecutar si uno está en el grupo 150, en el que estoy en el espacio de nombres externo):
$ 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
¿Hay alguna manera de asignar un grupo en el espacio de nombres de usuario a un grupo complementario al que pertenezco en el espacio de nombres principal (aquí 150)? —Sin CAP_SETGID
claro, sería demasiado fácil. ;-)