Kubernetes를 처음 접했고 보안에 대해 이해하려고합니다.Kubernetes, 보안 컨텍스트, 컨테이너를 실행하는 fsGroup 필드 및 기본 사용자의 그룹 ID
제 질문은 컨테이너를 실행하는 사용자의 그룹 ID (= gid)에 대한 것입니다.
가 나는 포드는이 공식 예를 사용하여 만든 : 문서에서 https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-podapiVersion: v1
kind: Pod
metadata:
name: security-context-demo
spec:
securityContext:
runAsUser: 1000
fsGroup: 2000
volumes:
- name: sec-ctx-vol
emptyDir: {}
containers:
- name: sec-ctx-demo
image: gcr.io/google-samples/node-hello:1.0
volumeMounts:
- name: sec-ctx-vol
mountPath: /data/demo
securityContext:
allowPrivilegeEscalation: false
를, 그들이 말하는 : 구성 파일에서
의 하여 RunAsUser 필드 지정 어떤 컨테이너에 대한 포드에서 첫 번째 프로세스는 사용자 ID 1000으로 실행됩니다. fsGroup 필드 그룹 ID 2000 포드의 모든 컨테이너에 연결되어 있는지 지정합니다. 그룹 ID 2000은/data/demo에 마운트 된 볼륨 및 해당 볼륨에 생성 된 파일과도 연관됩니다.
그래서 나는 용기로 이동합니다
kubectl exec -it security-context-demo -- sh
내가 첫 번째 프로세스가 (즉, PID 1) 사용자 1,000 내가 기대 => OK, 그건 행동으로 실행되는 것을 알 수 있습니다.
$ ps -f -p 1
UID PID PPID C STIME TTY TIME CMD
1000 1 0 0 13:06 ? 00:00:00 /bin/sh -c node server.js
그런 다음/data/demo 폴더에 "testfile"파일을 만듭니다./데이터/데모 그룹 권한의 "S"플래그를 가지고 있기 때문에이 파일은 그룹 "2000"에 속하는 : 다음
$ ls -ld /data/demo
drwxrwsrwx 3 root 2000 39 Dec 29 13:26 /data/demo
$ echo hello > /data/demo/testfile
$ ls -l /data/demo/testfile
-rw-r--r-- 1 1000 2000 6 Dec 29 13:29 /data/demo/testfile
을, 나는 하위 폴더 "내 폴더"를 생성하고 그룹의 "S"플래그를 제거 허가. 나는이 폴더에 파일 "내 파일"을 만들 :
$ mkdir /data/demo/my-folder
$ ls -ld /data/demo/my-folder
drwxr-sr-x 2 1000 2000 6 Dec 29 13:26 /data/demo/my-folder
$ chmod g-s /data/demo/my-folder
$ ls -ld /data/demo/my-folder
drwxr-xr-x 2 1000 2000 6 Dec 29 13:26 /data/demo/my-folder
$ touch /data/demo/my-folder/my-file
$ ls -l /data/demo/my-folder/my-file
-rw-r--r-- 1 1000 root 0 Dec 29 13:27 /data/demo/my-folder/my-file
I이 파일 그룹 "루트", GID 0 나는 그것이 "그룹에 속해야 것으로 예상 으로 즉, 그룹에 속한 놀랐어요 문서에서이 문장에 따라 2000 "
fsGroup 필드는 그룹 ID 2000 포드 다음 명령을
의 모든 컨테이너에 연결되어 있는지 지정, 나는 UID와 해당 사용자를 참조컨테이너의 "1000"은 기본 유닉스 그룹이 "0"또는 2000 :
$ id
uid=1000 gid=0(root) groups=0(root),2000
$ cat /proc/1/status
...
Pid: 1
...
Uid: 1000 1000 1000 1000
Gid: 0 0 0 0
...
Groups: 2000
...
누구나 설명이 있습니까?
사용자의 GID가 포드의 보안 컨텍스트에서 "fsGroup"필드의 값으로 설정되지 않은 이유는 무엇입니까?
사용자의 GID가 0 = root로 설정된 이유는 무엇입니까?
Kubernetes의 버그입니까? (v1.8.0을 사용하고 있습니다)?
설명서를 잘못 이해합니까?
감사합니다.