容器安全-Capabilities
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了容器安全-Capabilities相关的知识,希望对你有一定的参考价值。
参考技术A Linux内核中的Capabilities特性用于划分特权集,以便进程可以只分配“执行特定功能”的特权。在引入此特性前,如果进程需要使用网络,则必须使用root来运行,通常是sudo或者添加suid,那么普通用户在使用ping时,ping就可以运行任何特权。引入Capabilities特性后,可以通过给ping应用添加CAP_NET_RAW特权集,使其具有使用网络的特权集,而不具备其他特权集。缺省ping具有cap_net_admin和cap_net_raw特权集
在 Linux 中的 Capabilities 是通过 extended attributes 中的 security 命名空间实现的,selinux也是一样
可以通过查看进程/proc/xxxx/status,来检查进程的特权集,并通过capsh来解码得到具体的特权集。
使用capsh可以翻译出每个BIT的含义,3=0011表示2个bit,f=1111表示4个bit,一共2+4+4+4+4+4+4+4+4+4=38bit,从后先前,每个bit代表一种特权,一共38种特权集.
Docker 也支持 Capabilities ,在运行容器的时候可以通过指定 --privileded 参数来开启容器的所有CAP,可以通过--cap-add 和 --cap-drop 这两个参数来调整.
后台运行一个容器busybox,通过查看进程,可以发现缺省容器只有14种特权集
由于容器缺省不支持cap_sys_nice,所以无法改变nice值
通过--cap-add给容器增加cap_sys_nice特权集
使用--privileged可以获得所有特权集
使用--cap-add=ALL也可以获得所有特权集
如果使用--cap-drop=ALL --cap-add=cap_net_bind_service,则只有cap_net_bind_service 特权集.--cap-drop和--cap-add是在基础的14重特权集的基础上先减后加的
在k8s中使用Capabilities,与container基本一致
docker jetty启动时报错 failed setting default capabilities.
docker 容器中jetty启动fail ,查看/var/log/jetty中的日志发现具体错误信息如下:
failed setting default capabilities.
set_caps(CAPS) failed for user ‘jetty‘
Service exit with a return value of 4
解决方法,
docker run -it --cap-add=all .........
以上是关于容器安全-Capabilities的主要内容,如果未能解决你的问题,请参考以下文章