uid_map 및 gid_map 파일에 작성하여 새 네임스페이스에 사용자 및 그룹 ID를 매핑하려고 합니다.
곧터미널 1나는 일을 해요
vaibhav@vaibhav:~$ unshare -U /bin/sh
$ id
uid=65534(nobody) gid=65534(nogroup) groups=65534(nogroup)
$ echo $$
2506
그런 다음 새 터미널을 엽니다.NO2.그래요
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
답변1
Linux 3.19부터 권한이 없는 사용자가 사용자 그룹을 매핑하려고 할 때 특정 제한 사항이 추가되었습니다. 즉, 보조 그룹을 변경할 수 있는 권한을 포기해야 합니다. 이는 일반적으로 사용자가제거하다someuser:denygroup
이는 및 mode 와 같은 소유권을 가진 파일에 대한 거부 필터 역할을 하는 그룹에서 비롯됩니다 u=rw,g=,o=r
.
그러한 제한이 없으면 사용자가 직접 전화할 수 있습니다.setgroups(2)
보조 그룹 목록을 지웁니다.
이 내용은 다음과 같이 기록됩니다.user_namespaces(7)
:
"거절"이라고 쓰세요
/proc/[pid]/setgroups
이전 파일에 대한 쓰기는 사용자 네임스페이스에서/proc/[pid]/gid_map
영구적으로 비활성화 되며setgroups(2)
/proc/[pid]/gid_map
상위 사용자 네임스페이스에서 CAP_SETGID 기능 없이 쓰기 허용.
OP의 상황은 다음과 같습니다.
echo deny > /proc/2506/setgroups
보충 그룹의 통제권을 포기하고 완료를 허용합니다.
echo '0 1000 1' > /proc/2506/gid_map
노트:
사용자는 자신의 uid/gid를 다른 사용자에게만 매핑할 수 있으며 흥미로운 값은 자신 또는뿌리. 더 많은 가능성을 위해 setuid-root 도우미를 사용할 수 있습니다
newuidmap
그리고newgidmap
각 사용자가 할당한 범위를 사용합니다./etc/subuid
그리고/etc/subgid
. 이는 권한이 있는 도우미를 사용하여 사용자 권한이 없는 컨테이너가 실제로 작동하는 방식의 일부입니다.보안 참고 사항으로 계속하기 전에 권한 있는 명령을
newgidmap
작성한allow
경우/proc/[pid]/setgroups
해당 명령을 사용 가능하게 만들어서 탈출할 수 있습니다.거부 그룹어쨌든, "감옥". 이 명령은 사용자가 권한 없는 컨테이너를 실행할 수 있는 환경에서 어디에나 사용됩니다.