kubernets CKS 3.3 Seccomp 限制容器进程系统调用
时间:2023-10-12 09:07:00
对于 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/"
? 1.19版本
apiVersion: v1 kind: Pod metadata: name: hello-seccomp spec: securityContext: seccompProfile: type: Localhost localhostProfile: > # 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_AT_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
/ #