【问题标题】:k8s PodSecurityPolicy. Drop all capabilities except onek8s PodSecurityPolicy。删除除一项以外的所有功能
【发布时间】:2019-06-08 13:02:22
【问题描述】:

我想构建一个 pod 安全策略,在其中删除所有功能,然后仅启用 CHOWN。

问题在于,“requiredDropCapabilities: ALL”似乎是主要规则,如果我将其配置为 ALL,则无法使用 AllowedCapabilities 或 DefaultAddCapabilities 添加单个功能。

https://kubernetes.io/docs/concepts/policy/pod-security-policy/

RequiredDropCapabilities - 必须从中删除的功能 容器。这些功能已从默认设置中删除,并且 不得添加。 RequiredDropCapabilities 中列出的功能 不得包含在 AllowedCapabilities 或 DefaultAddCapabilities 中

我怎么能拒绝除一个以外的所有能力?

--编辑

这是我的例子:

PodSecurityPolicy:

apiVersion: extensions/v1beta1
kind: PodSecurityPolicy
metadata:
  name: a-pot-root
spec:
  allowPrivilegeEscalation: false
  forbiddenSysctls:
  - '*'
  allowedCapabilities:
  - CHOWN
  requiredDropCapabilities:
  - ALL
  fsGroup:
    ranges:
    - max: 65535
      min: 1
    rule: MustRunAs
  runAsUser:
    rule: RunAsAny
  seLinux:
    rule: RunAsAny
  supplementalGroups:
    ranges:
    - max: 65535
      min: 1
    rule: MustRunAs
  volumes:
  - configMap
  - emptyDir
  - projected
  - secret
  - downwardAPI
  - persistentVolumeClaim

那么容器内部就没有 CHOWN 能力了:

root@hellonode-6d654c57b8-b8hz8:/app# capsh --print
Current: =
Bounding set =
Securebits: 00/0x0/1'b0
 secure-noroot: no (unlocked)
 secure-no-suid-fixup: no (unlocked)
 secure-keep-caps: no (unlocked)
uid=0(root)
gid=0(root)
groups=1(daemon)

谢谢。

【问题讨论】:

  • 您能否提供一个示例和/或更具体地说明“我无法添加个人功能”; kubectl 会抱怨它无效吗?它没有效果吗?另外,您对allowPrivilegeEscalationprivileged 使用什么值(如果有)?
  • @MichaelHausenblas 我已经用细节编辑了这个问题。
  • 谢谢@Jxadro,如果你设置了allowPrivilegeEscalation: true,它会改变什么还是结果还是一样?
  • @MichaelHausenblas 同样的结果

标签: kubernetes


【解决方案1】:

我所做的是注释“-ALL”,添加默认允许的所有“功能选项”as documented here,并注释我不需要的功能。

警告:我以为我只需要 CHOWN,但最终需要更多。

  requiredDropCapabilities:
    # - ALL               # Drop all the usual capabilities
    - SETPCAP               # Modify process capabilities.
    - MKNOD               # Create special files using mknod(2).
    - AUDIT_WRITE           # Write records to kernel auditing log.
    # - CHOWN               # Make arbitrary changes to file UIDs and GIDs (see chown(2)).
    - NET_RAW               # Use RAW and PACKET sockets.
    # - DAC_OVERRIDE        # Bypass file read, write, and execute permission checks.
    # - FOWNER            # Bypass permission checks on operations that normally require the file system UID of the process to match the UID of the file.
    - FSETID                # Don’t clear set-user-ID and set-group-ID permission bits when a file is modified.
    - KILL                # Bypass permission checks for sending signals.
    # - SETGID            # Make arbitrary manipulations of process GIDs and supplementary GID list.
    # - SETUID            # Make arbitrary manipulations of process UIDs.
    - NET_BIND_SERVICE    # Bind a socket to internet domain privileged ports (port numbers less than 1024).
    - SYS_CHROOT            # Use chroot(2), change root directory.
    - SETFCAP               # Set file capabilities

希望对您有所帮助。我一直在寻找答案,但首先找到了你的问题 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-04
    • 1970-01-01
    • 2013-01-10
    • 1970-01-01
    相关资源
    最近更新 更多