Linux的capability
目录:
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
可以单独加ep
和p
,每次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