일반 사용자 네임스페이스(podman 외부에서 생성됨)로 루트 없는 Podman을 사용할 수 있습니까?

일반 사용자 네임스페이스(podman 외부에서 생성됨)로 루트 없는 Podman을 사용할 수 있습니까?

다음을 사용하여 uts 네임스페이스를 생성하면unshare호스트 이름을 로 설정합니다 foo.

$ unshare --map-root-user --uts /bin/sh
# echo $$
31882
# readlink /proc/31882/ns/uts
uts:[4026532825]
# hostname foo

그러면 이렇게 podman실행하지 않고 rootless 내에서 해당 사용자 네임스페이스를 어떻게 사용합니까? 작동하지 않고 반환됩니다.sudo"오류: 지정된 UTS 네임스페이스 경로를 찾을 수 없습니다. stat [proc-ns-link]: 권한이 거부되었습니다."

$ podman run -ti --uts=ns:/proc/31882/ns/uts alpine:3 /bin/hostname
Error: cannot find specified UTS namespace path: stat /proc/31882/ns/uts: permission denied

하지만 효과가 있어요.

$ sudo podman run -ti --uts=ns:/proc/31882/ns/uts alpine:3 /bin/hostname
foo

답변1

나는 그것에 익숙하지 않지만 podman누군가가 다른 네임스페이스에 대한 액세스를 사용해야 한다면 시스템 호출을 /proc/31882/ns/uts사용해야 합니다 .setns

새로운 네트워크, IPC, 시간 또는 UTS 네임스페이스와 다시 연결하려면 호출자는 자신의 사용자 네임스페이스와 대상 네임스페이스를 소유하는 사용자 네임스페이스 모두에 CAP_SYS_ADMIN 기능이 있어야 합니다. 인용하다:https://man7.org/linux/man-pages/man2/setns.2.html

따라서 (sudo) 기능이 없으면 CAP_SYS_ADMIN호출자는 다른 네임스페이스에 들어갈 수 없습니다. 이것이 가능하다면 보안 문제입니다.

추가 참고 사항: suid 비트를 바이너리로 설정하면 이를 언급하지 않고도 podman기능을 실행할 수 있지만 이 답변을 기대하지 않기를 바랍니다 .podmanCAP_SYS_ADMINsudo

관련 정보