권한이 없는 사용자 네임스페이스에서 9p 파일 시스템을 마운트하는 방법은 무엇입니까?

권한이 없는 사용자 네임스페이스에서 9p 파일 시스템을 마운트하는 방법은 무엇입니까?

사용자 네임스페이스 내부에서 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() 호출이 실패합니다. .

난 이해가 안 돼요.

관련 정보