0

Kubernetes를 처음 접했고 보안에 대해 이해하려고합니다.Kubernetes, 보안 컨텍스트, 컨테이너를 실행하는 fsGroup 필드 및 기본 사용자의 그룹 ID

제 질문은 컨테이너를 실행하는 사용자의 그룹 ID (= gid)에 대한 것입니다.

가 나는 포드는이 공식 예를 사용하여 만든 : 문서에서 https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod

apiVersion: 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을 사용하고 있습니다)?

설명서를 잘못 이해합니까?

감사합니다.

답변

관련 문제