kubernets CKS 3.3 Seccomp 限制容器进程系统调用

本文介绍了Seccomp在Linux内核中的作用,它用于限制容器内的系统调用,增强安全性。在Kubernetes中,从1.3版本开始引入Seccomp,1.19版本成为GA特性,可以通过配置限制容器的系统调用行为。例如,通过创建一个禁止`chmod`系统调用的策略文件,可以阻止容器内的权限修改操作。Docker也有默认的系统调用限制配置。文中给出了在Kubernetes中配置Seccomp的实例,展示了如何创建和应用策略文件,最终当尝试在受限的容器中执行`chmod`时,会收到Operation not permitted的错误,证明了Seccomp的有效性。

对于 Linux 来说,用户层一切资源相关操作都需要通 过系统调用来完成;系统调用实现技术层次上解耦, 内核只关心系统调用API的实现,而不必关心谁调用的。
在这里插入图片描述

Seccomp(Secure computing mode) 是一个 Linux 内核安全模块,可用于应用进程允许使用的系统调用。
容器实际上是宿主机上运行的一个进程,共享宿主机内核,如果所有容器都具有任何系统调用的能力,那么容器如果被入侵,就很轻松绕过容器隔离更改宿主机系统权限或者进入宿主机。 这就可以使用Seccomp机制限制容器系统调用,有效减少攻击面。
Linux发行版内置:CentOS、Ubuntu

3.3.1 Seccomp在K8S配置

Seccomp在Kubernetes 1.3版本引入,在1.19版本成为GA版本,因此K8s中使用Seccomp可以通过以下两种方式:
• 1.19版本之前

annotations: 
  seccomp.security.alpha.kubernetes.io/pod: "localhost/<profile>" 

• 1.19版本+

apiVersion: v1 
kind: Pod 
metadata: 
  name: hello-seccomp 
spec: 
  securityContext: 
    seccompProfile: 
      type: Localhost 
      localhostProfile: <profile> # Pod所在宿主机上策略文件名,默认目录: /var/lib/kubelet/seccomp 
  containers: 
    ...

示例:禁止容器使用chmod

mkdir /var/lib/kubelet/seccomp
vi /var/lib/kubelet/seccomp/chmod.json
{
  "defaultAction": "SCMP_ACT_ALLOW",
  "syscalls": [
    {
      "names": [
      "chmod"
    ],
    "action": "SCMP_ACT_ERRNO"
    } 
  ] 
}

seccomp基本配置文件包括三个元素:
• defaultAction:在syscalls部分未定义的任何 系统调用默认动作为允许
• syscalls
• names 系统调用名称,可以换行写多个
• SCMP_ACT_ERRNO 阻止系统调用

3.3.2 docker默认容器进程系统调用限制

大多数容器运行时都提供一组允许或不允许的默认系统调用。通过使用 runtime/default 注释 或将
Pod 或容器的安全上下文中的 seccomp 类型设置为 RuntimeDefault,可以轻松地在 Kubernetes
中应用默认值。
Docker默认配置说明:https://docs.docker.com/engine/security/seccomp/

3.3.3 实例

在k8s21-worker01创建目录,并创立chmod.json文件:

[root@k8s21-worker01 ~]# mkdir /var/lib/kubelet/seccomp
[root@k8s21-worker01 ~]# vi /var/lib/kubelet/seccomp/chmod.json   
[root@k8s21-worker01 ~]# cat /var/lib/kubelet/seccomp/chmod.json
{
  "defaultAction": "SCMP_ACT_ALLOW",
  "syscalls": [
    {
      "names": [
      "chmod"
    ],
    "action": "SCMP_ACT_ERRNO"
    } 
  ] 
}

生成一个创建pod的yaml文件

kubectl run busybox0708 --image=busybox:1.28.4 --dry-run="client" -o yaml -- sleep 3600 > seccomp.yaml 

修改配置seccomp.yaml ,强制调度到k8s21-worker01,并配置Seccomp相关配置

[root@k8s21-master01 ~]# cat seccomp.yaml                         
apiVersion: v1
kind: Pod
metadata:
  labels:
    run: busybox0708
  name: busybox0708
spec:
  securityContext: 
    seccompProfile: 
      type: Localhost 
      localhostProfile: chmod.json
  nodeName: k8s21-worker01
  containers:
  - args:
    - sleep
    - "3600"
    image: busybox:1.28.4
    name: busybox0708
  restartPolicy: Always
  [root@k8s21-master01 ~]# kubectl apply -f seccomp.yaml 

进入pod执行chmod, 发现没有权限

[root@k8s21-master01 ~]# kubectl exec -it busybox0708 -- sh
/ # 
/ # 
/ # touch /root/wangjinxiong.txt
/ # chmod 777 /root/wangjinxiong.txt
chmod: /root/wangjinxiong.txt: Operation not permitted
/ # 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值