开头语
写在前面:如有问题,以你为准,
目前24年应届生,各位大佬轻喷,部分资料与图片来自网络
内容较长,页面右上角目录方便跳转
最小特权原则 (Principle of least privilege,POLP):是一种信息安全概念,即为用户提供执行其工作职责所需的最小权限等级或许可。最小特权原则被广泛认为是网络安全的最佳实践,也是保护高价值数据和资产的特权访问的基本方式。
最小特权原则(POLP)重要性:
在团队中实施最小特权原则(POLP):
AppArmor (Application Armor) 是一个linux 内核安全模块,可用于限制主机操作系统上运行的进程的功能,每个进程逗可以拥有自己的安全配置文件,安全配置文件用于允许或禁止特定功能,例如网络访问,文件读写执行权限等
跟SElinux 是同类产品,企业基本不用SElinux
linux 发行版内置:Ubuntu,Debian,(centos 不支持)
Enforcement (强制模式):在这种模式下,配置文件里列出的限制条件都会得到执行,并且对于违反这些限制条件的程序会进行日志记录。
Complain (投诉模式):在这种模式下,配置文件里的限制条件不会得到执行,Apparmor只是对程序的行为进行记录。一般用于调试。
使用ubuntu 搭建的集群是可以使用,centos搭建的集群是用不了的
K8s版本v1.4+,检查是否支持:kubectl describe node | grep AppArmor
Linux内核已启用AppArmor,查看cat/sys/module,/apparmor/parameters/enabled
容器运行时需要支持AppArmor,自前Dockeri已支持
禁止pod 容器 对 容器中的 /tmp/ 和/data/www/ 目录下的写权限
重点:是pod所运行的节点上,而不master
限制容器进程系统调用
对于 Linux 来说,用户层一切资源相关操作都需要通过系统调用来完成,系统调用实现技术层次上解耦,内核只关心系统调用API的实现,而不必关心谁调用的
Seccomp (Secure computing mode) 是一个Linux内核安全模块,可用于应用进程允许使用的系统调用。
容器实际上是宿主机上运行的一个进程,共享宿主机内核,如果所有容器都具有任何系统调用的能力,那么容器如果被 入侵,就很轻松绕过容器隔离更改宿主机系统权限或者进入宿主机。
这就可以使用Seccomp机制限制容器系统调用,有效减少攻击面。
Linux发行版内置:CentOS、Ubuntu
linux 系统调用列表
chmod 777 /etc/issue
其实就是调用系统中 chmod 的 api
docker info
---
Security Options:
seccomp
Profile: default
---
/var/lib/kubelet/seccomp/ 是默认路径(固定)
设置拒绝调用列表时,注意pod启用需要一些必要的权限,否则会导致pod起不来
SCMP_ACT_ALLOW 类似于写黑名单
SCMP_ACT_ERRNO 类似于写白名单
{
"defaultAction": "SCMP_ACT_ERRNO",
"syscalls": [
{
"names": [
"accept",
"chown",
"kill",
"mmap",
...
],
"action": "SCMP_ACT_ALLOW",
"args": [],
"comment": "",
"includes": {},
"excludes": {}
}
]
}
{
"defaultAction":"SCMP_ACT_ALLOW",
"syscalls":[
{
"names":[
"chmod"
],
"action":"SCMP_ACT_ERRNO"
}
]
}
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: web
name: web-seccomp
namespace: test
spec:
nodeName: node1 # 因为只在node上写了配置文件,所以指定pod创建在node1上
containers:
- image: busybox:1.30
name: hello
securityContext:
seccompProfile:
type: Localhost
localhostProfile: chmod.json
[root@master cks]# kubectl get pod -n test
NAME READY STATUS RESTARTS AGE
web-seccomp 1/1 Running 0 30s