![일반 사용자 네임스페이스(podman 외부에서 생성됨)로 루트 없는 Podman을 사용할 수 있습니까?](https://linux55.com/image/185372/%EC%9D%BC%EB%B0%98%20%EC%82%AC%EC%9A%A9%EC%9E%90%20%EB%84%A4%EC%9E%84%EC%8A%A4%ED%8E%98%EC%9D%B4%EC%8A%A4(podman%20%EC%99%B8%EB%B6%80%EC%97%90%EC%84%9C%20%EC%83%9D%EC%84%B1%EB%90%A8)%EB%A1%9C%20%EB%A3%A8%ED%8A%B8%20%EC%97%86%EB%8A%94%20Podman%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%A0%20%EC%88%98%20%EC%9E%88%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
다음을 사용하여 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
기능을 실행할 수 있지만 이 답변을 기대하지 않기를 바랍니다 .podman
CAP_SYS_ADMIN
sudo