容器安全-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的主要内容,如果未能解决你的问题,请参考以下文章

让你快速入门docker的30个命令行

Docker&Kubernetes ❀ Docker Capabilities 容器进程能力权限与执行文件能力权限设置

为容器安全苦恼?这份清单列举了27种容器安全工具

Java线程安全容器

常见的容器安全威胁都有哪些?

云原生应用安全落地,你需要了解的容器安全体系