--uts=private이 호스트 이름 설정을 허용하지 않는 이유는 무엇입니까?

--uts=private이 호스트 이름 설정을 허용하지 않는 이유는 무엇입니까?

컨테이너를 시작해도 --uts=private여전히 호스트 이름을 변경할 수 없습니다. 하지만 이것이 바로 그 목적인 것 같나요?

--uts=private효과 는 무엇입니까 ?

$ podman run -ti --uts=private alpine
/ # hostname foo.bar.baz
hostname: sethostname: Operation not permitted

CentOS에서는 오류가 약간 다릅니다.

$ podman run -ti --uts=private centos:7
[root@e5fd4d09f5c3 /]# hostname foo.bar.baz
hostname: you must be root to change the host name

내 컨테이너에 새 프라이빗 네임스페이스가 있는 경우 호스트 이름을 변경할 수 없는 이유는 무엇입니까?

답변1

네임스페이스 기능을 기준으로 귀하를 차단하고 있습니다. 기본적으로 컨테이너는 CAP_SYS_ADMIN을 가져오지 않습니다.

$   podman run -ti --uts=private --hostname foobar centos
# hostname
foobar
$   podman run -ti --cap-add SYS_ADMIN --uts=private  centos
[root@a4f36e700ad7 /]# hostname foobar
[root@a4f36e700ad7 /]# hostname
foobar
[root@a4f36e700ad7 /]# exit

답변2

irc.freenode.net/#podman에서,

<nalind> EvanCarroll: --cap-add sys_admin기본 seccomp 필터(from ) 는 시스템 호출을 /usr/share/containers/seccomp.json허용하지 않으며 커널은 다음을 사용하여 컨테이너를 실행하지 않는 한 호출을 허용하지 않습니다.sethostname

더 알고 싶지만 이제 시작입니다. 그래서 이것을 커뮤니티 위키로 표시하고 실제 답변이 있으면 삭제하겠습니다.

지금 바로,

  • 호스트 이름을 설정할 수 없는 경우 개인 uts 네임스페이스의 목적은 무엇입니까?
  • 호스트 이름 설정 기능이 잠겨 있는 이유는 무엇입니까 cap_sys_admin?

관련 정보