
내 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
물론 그렇지 않으면 너무 쉬울 것입니다. ;-)