gid_map에 대한 에코는 실패했지만 uid_map은 성공했습니다.

gid_map에 대한 에코는 실패했지만 uid_map은 성공했습니다.

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해당 명령을 사용 가능하게 만들어서 탈출할 수 있습니다.거부 그룹어쨌든, "감옥". 이 명령은 사용자가 권한 없는 컨테이너를 실행할 수 있는 환경에서 어디에나 사용됩니다.

관련 정보