Linux的capability

时间:Sept. 22, 2020 分类:

目录:

Capabilitites

Capabilities主要的作用是普通用户也可以完成超级用户的操作。

Capabilities分割root的用户权限为不同的能力,每一种能力代表一种特权操作,例如可以让普通用户通过一个命令可以kill掉其他的进程,但是不能执行mount等操作,也不能重启系统

只有进程和可执行文件具有能力

进程拥有三组能力集

  • cap_permitted 进程拥有的最大能力集,简称(pP)
  • cap_effective 进程当前可用能力集,简称(pE)
  • cap_inheritable 进程可以专递到子进程的能力集,简称(pI)

可执行文件拥有三组能力集

  • cap_allowed 可执行文件在运行时,可以从原进程的cap_inheritable中继承的能力,简称(fI)
  • cap_forced 运行可执行文件前,必须拥有的能力,简称(fP)
  • cap_effective 可执行文件在运行时,拥有的能力,简称(fE)

进程的能力可以通过/proc/PID/status的CapInh和CapBnd看到,例如00000000a80425fb转换为为二进制为10101000000001000010010111111011,从后往前分别是0位到更高的位

  • getcap可以获得程序文件所具有的能力
  • getpcaps可以获得进程所具有的能力
  • setcap可以设置程序文件的能力

对于setcap

setcap    cap_net_bind_service=+eip /nginx-ingress-controller \
setcap -v cap_net_bind_service=+eip /nginx-ingress-controller

可以单独加epp,每次setcap是覆盖的操作

各种能力

Kubernetes使用capabilitites

spec.template.spec.containers.securityContext中进行配置

如果希望非root用户使用1024以下的端口号

          securityContext:
            capabilities:
              drop:
                - ALL
              add:
                - NET_BIND_SERVICE

统一的配置也可以在准入控制里完成,个性化的东西最好单独配置

apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
  name: netbind
spec:
  capabilities:
    drop:
      - ALL
    add:
      - NET_BIND_SERVICE