特权容器CAP权能解析
在配置k8s
容器的securityContext.capabilities
字段时,不知道该排除/添加哪些CAP
属性。
我们先了解特权容器的14
个CAP
字段:
容器特权进程默认
CAP
缺省值解析(共计14个)
0x00000000a80425fb=cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_bind_service,cap_net_raw,cap_sys_chroot,cap_mknod,cap_audit_write,cap_setfcap
cap_chown
: 允许修改文件所有者权限cap_dac_override
: 忽略对文件的DAC
访问权限控制cap_fowner
: 忽略文件属主ID
必须与进程用户ID
一致的权限cap_fsetid
: 确保在文件被修改后不修改setuid/setgid
位cap_kill
: 允许对不属于自己的进程发送信号的权限cap_setgid
: 允许普通用户使用setgid
函数cap_setuid
: 允许普通用户使用setuid
函数cap_setpcap
: 允许对子进程进行CAP
授权cap_net_bind_service
: 允许绑定小于1024
端口的权限cap_net_raw
: 允许使用原始套接字的权限cap_sys_chroot
: 允许使用chroot()
系统调用的权限cap_mknod
: 允许使用mknod()
系统调用的权限cap_audit_write
: 允许将记录写入内核审计日志的权限cap_setfcap
: 允许为可执行文件设置CAP
的权限
k8s
下建议关闭所有CAP
,按需添加
基于容器的securityContext
字段进行配置
apiVersion: v1
kind: Pod
metadata:
name: api-server
spec:
containers:
- name: api-server
image: xzxwl/api-server-demo:latest
securityContext:
capabilities:
drop:
- ALL
add:
- CHOWN
对CAP的操作
首先我先了解下如果对进程/可执行文件,设置/撤销CAP
可执行文件添加
CAP
属性
$ setcap cap_fowner=eip /usr/bin/vim
cap_fowner=eip
是将fowner
的能力以cap_effective(e)
,cap_inheritable(i)
,cap_permitted(p)
三种位图的方式授权给vim
.
查看可执行文件的
CAP
属性
$ getcap /usr/bin/vim
/usr/bin/vim = cap_fowner+eip
清空可执行文件
CAP
属性
$ setcap -r /usr/bin/vim
关于容器特权用户下默认的14
条CAP
解析如下:
- cap_chown解析
- cap_dac_override解析
- cap_fowner解析
- cap_fsetid解析
- cap_kill解析
- cap_setgid解析
- cap_setuid解析
- cap_net_bind_service解析
- cap_sys_chroot解析
- cap_mknod解析
- cap_audit_write解析