본문 바로가기
개발/개발공부

User Namespace / Container 기초, 격리, 네임스페이스, 컨테이너, 간단정리, capabilities, 권한

by 치킨개발자 2023. 1. 14.
728x90

User Namespace


user ID와 group ID를 구분하여, container가 특정 user ID, group ID만 볼 수 있도록 구성

호스트에서는 권한이 없는 일반 유저를 container안에서는 root로 보여지도록 해주는 것

즉, 앞선 PID namespace와 같이 중첩된 권한을 갖게 된다는 뜻

보안적으로 host에 영향을 끼치지 않도록 도와줌

root@ubuntu1804:~# unshare -U
nobody@ubuntu1804:~$ id -u
65534
nobody@ubuntu1804:~$ id -g
65534
nobody@ubuntu1804:~$ exit
logout
root@ubuntu1804:~# id -u
0
root@ubuntu1804:~# id -g
0

unshare -U를 통해 user ID, group ID가 바뀌는 것을 볼 수 있다.

그래도 User namespace를 쓸때는 host root의 권한과 분리할 수 있지만, filesystem mount할때 host에 영향을 받지 않도록 유의해야한다.

 

User Namespace in Kubernetes


kubelet이 CRI의 grpc interface를 통해 container runtime과 통신하여 시작

containerd를 사용할 땐 containerd/cri로 통신, kubelet으로부터 CRI명령을 받아 runc로 container시작

runAsUser, runAsGroup, fsGroup등이 존재

hostUser: false 로 설정시에는 hostNetwork, hostIPC, hostPID를 사용할 수 없도록 막음

host file과 host process에는 UID/GID에 0~65535의 ID를 배정하고

격리 보장을 위해 kubelet이 pods에서 사용되는 UID/GID는 이보다 높은 값들을 배정해줌

(추측)위의 예시에서 봤을때는 직접 배정시에는 65535에서 낮아지는 순으로 배정해주는 듯

 

 

 

User namespace를 별도로 깊게 보기보단 실제로 Kubernetes에서 어떻게 적용되는지 공부해봤다.

보안적인 측면이 강하기 때문에, 보안위주로 깊게 공부해보는게 User Namespace공부 측면에서는 더 좋을 것 같다.

반응형

댓글