사용자 네임스페이스 내부에서 9p 파일 시스템을 마운트하려고 합니다.
먼저 9p 서버를 실행합니다.
p9ufs -v --unix '/run/9p/srved'
그런 다음 setuid 바이너리 9mount(https://sqweek.net/code/9mount/) 설치하려면 다음 단계를 따르세요.
9mount -u 'unix!/run/9p/srved' /tmp/ed1
효과가있다.
9mount의 코드를 편집하여 uid와 euid를 표시했는데 "getuid는 1000을 반환하고 geteuid는 0을 반환합니다"라고 표시됩니다. 나는 또한 다음을 확인
grep Uid /proc/$(pgrep 9mount)/status
하고 을 얻습니다 1000 0 0 0
.
이제 사용자 네임스페이스 내부에서 동일한 작업을 수행하면 실패합니다. 먼저 사용자 네임스페이스를 입력합니다.
unshare -U
그런 다음 문서에 다음과 같이 명시되어 있으므로 네임스페이스 외부에서 gid 및 uid 맵을 만듭니다.
파일의 사용자 또는 그룹 ID가 네임스페이스 내에 매핑되지 않은 경우 set-user-ID(set-group-ID) 비트는 자동으로 무시됩니다.
-- https://man7.org/linux/man-pages/man7/user_namespaces.7.html
매핑을 생성하기 위해 네임스페이스 외부에서 다음 명령을 실행합니다.
sudo sh -c 'echo 0 0 4294967295 > /proc/11339/gid_map'
sudo sh -c 'echo 0 0 4294967295 > /proc/11339/uid_map'
이제 9mount를 다시 실행하면 "getuid가 1000을 반환하고 geteuid가 0을 반환합니다"라는 메시지가 표시됩니다. 네임스페이스 외부에서는 euid 0으로도 표시되지만 "9mount: mount: No Allow Operation"과 함께 mount() 호출이 실패합니다. .
난 이해가 안 돼요.