다음을 사용하여 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