首页 > 解决方案 > 来自 Kubernetes 中 pod 容器内进程的文件所有权和权限

问题描述

根据官方文档:

apiVersion: v1
kind: Pod
metadata:
  name: security-context-demo
spec:
  securityContext:
    runAsUser: 1000
    runAsGroup: 3000
    fsGroup: 2000
  volumes:
  - name: sec-ctx-vol
    emptyDir: {}
  containers:
  - name: sec-ctx-demo
    image: busybox
    command: [ "sh", "-c", "sleep 1h" ]
    volumeMounts:
    - name: sec-ctx-vol
      mountPath: /data/demo
    securityContext:
      allowPrivilegeEscalation: false

由于指定了 fsGroup 字段,容器的所有进程也是补充组 ID 2000 的一部分。卷 /data/demo 的所有者以及在该卷中创建的任何文件都将是组 ID 2000。

但是,该文件似乎不够准确。我发现了很多关于不同工具和框架的错误报告,以及SO 的一些答案,这表明它不是那么简单。

现在,我自己也有类似的情况。我在 GKE 中部署了 Wordpress,并将其wp-content目录安装为 Persistent Volume。我fsGroup 65534为整个 Pod 设置,根据文档应该对所有容器内的所有进程强制执行补充组。但我不认为无论进程如何产生都可以强制执行。它甚至可能与 Unix 安全架构相矛盾。

回到我的示例:我无法将 Wordpress UI 中的新文件存储到 wp-content 文件夹中,因为权限被拒绝。我进入了 Wordpress 容器,这是我看到的:

131111 drwxr-sr-x  4    65533 65533  4096 Dec  9 22:28 rev-f2380fe737e72b1749f98b69fca3e5a739502313 

revdir 符号链接到 by wp-content。我使用git-sync它)。现在,我检查流程:

root@my-wp-deployment-64647c8bcb-9hv7j:/var/www/html# ps aux
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.0  0.8 238516 34392 ?        Ss   Dec09   0:03 apache2 -DFOREGROUND
root         118  0.0  0.0   3868  3276 pts/0    Ss+  Dec09   0:00 /bin/bash
www-data     843  0.0  2.8 342704 114056 ?       S    09:39   0:01 apache2 -DFOREGROUND
www-data     855  0.0  2.4 334936 98624 ?        S    09:39   0:01 apache2 -DFOREGROUND
www-data     857  0.0  2.6 342484 108112 ?       S    09:39   0:02 apache2 -DFOREGROUND
www-data     859  0.0  2.6 335032 106760 ?       S    09:39   0:02 apache2 -DFOREGROUND
www-data     932  0.0  2.4 334888 98976 ?        S    10:33   0:01 apache2 -DFOREGROUND
www-data     934  0.0  2.8 345308 116380 ?       S    10:33   0:01 apache2 -DFOREGROUND
www-data     938  0.0  2.4 337084 99040 ?        S    10:33   0:01 apache2 -DFOREGROUND
www-data     940  0.0  2.5 339356 104144 ?       S    10:33   0:02 apache2 -DFOREGROUND
www-data     946  0.0  2.1 328920 87932 ?        S    10:33   0:00 apache2 -DFOREGROUND
www-data     966  0.0  2.1 326644 84796 ?        S    10:56   0:00 apache2 -DFOREGROUND
root         975  0.0  0.0   3868  3180 pts/1    Ss   11:06   0:00 /bin/bash
root         989  0.0  0.0   7640  2708 pts/1    R+   11:14   0:00 ps aux

现在我还检查用户的组从属关系:

root@my-wp-deployment-64647c8bcb-9hv7j:/var/www/html# groups root
root : root
root@my-wp-deployment-deployment-64647c8bcb-9hv7j:/var/www/html# groups www-data
www-data : www-data

正如我所看到的,一些用户没有关联,65534他们是启动新流程的人。

问题在哪里?我错过了什么还是 Kubernetes 文档不准确?或两者?:)

标签: wordpresskubernetes

解决方案


推荐阅读