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)最初のプロセスは、ユーザー= 1000で実行されていることを見る> 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 

次に、「testfile」というファイルを/ data/demoフォルダに作成します。 /データ/デモは、グループのアクセス許可の「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 

私はこのファイルがグループ「ルート」、GID 0私はそれが "グループに属している必要があることを期待 とすなわちグループに属することを驚いています2000" ドキュメントのこの文によると:

fsGroupフィールドは、グループID 2000は、次のコマンドを使用してポッド

内のすべての コンテナに関連付けられていることを、私はUIDと、そのユーザーを参照してください指定コンテナ内の「1000」には、Unixグループ「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がPodのセキュリティコンテキストの「fsGroup」フィールドの値に設定されていないのですか?

なぜユーザーのGIDが0 = rootに設定されていますか?

Kubernetesのバグですか(私はv1.8.0を使用しています)?

私はドキュメントを誤解していますか?

ありがとうございます!

答えて

関連する問題