特权容器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解析