开头语
写在前面:如有问题,以你为准,
目前24年应届生,各位大佬轻喷,部分资料与图片来自网络
内容较长,页面右上角目录方便跳转
最小特权原则 POLP
最小特权原则 (Principle of least privilege,POLP):是一种信息安全概念,即为用户提供执行其工作职责所需的最小权限等级或许可。最小特权原则被广泛认为是网络安全的最佳实践,也是保护高价值数据和资产的特权访问的基本方式。
- 减少网络攻击面:当今,大多数高级攻击都依赖于利用特权凭证。通过限制超级用户和管理员权限,最小权限执行有 助于减少总体网络攻击面。
- 阻止恶意软件的传播:通过在服务器或者在应用系统上执行最小权限,恶意软件攻击(例如SQL注入攻击)将很难 提权来增加访问权限并横向移动破坏其他软件、设备。
- 有助于简化合规性和审核:许多内部政策和法规要求都要求组织对特权帐户实施最小权限原则,以防止对关键业务系 统的恶意破坏。最小权限执行可以帮助组织证明对特权活动的完整审核跟踪的合规性。
- 在所有服务器、业务系统中,审核整个环境以查找特权帐户(例如SS账号、管理后台账号、跳板机账号);
- 减少不必要的管理员权限,并确保所有用户和工具执行工作时所需的权限:
- 定期更改管理员账号密码;
- 监控管理员账号操作行为,告警通知异常活动。
AppArmor
AppArmor (Application Armor) 是一个linux 内核安全模块,可用于限制主机操作系统上运行的进程的功能,每个进程逗可以拥有自己的安全配置文件,安全配置文件用于允许或禁止特定功能,例如网络访问,文件读写执行权限等
linux 发行版内置:Ubuntu,Debian,(centos 不支持)
工作模式
Enforcement (强制模式):在这种模式下,配置文件里列出的限制条件都会得到执行,并且对于违反这些限制条件的程序会进行日志记录。
Complain (投诉模式):在这种模式下,配置文件里的限制条件不会得到执行,Apparmor只是对程序的行为进行记录。一般用于调试。
工作流程
命令
- apparmor status: 查看AppArmor配置文件的当前状态的
- apparmor_parser: 将AppArmor配置文件加载到内核中
- apparmor_parser -r<profile> #重新加载配置
- apparmor parser -R <profile> #删除配置
使用 AppArmor 先决条件
使用ubuntu 搭建的集群是可以使用,centos搭建的集群是用不了的
K8s版本v1.4+,检查是否支持:kubectl describe node | grep AppArmor
Linux内核已启用AppArmor,查看cat/sys/module,/apparmor/parameters/enabled
容器运行时需要支持AppArmor,自前Dockeri已支持
yaml 配置文件
yaml 编写
配置文件位置
配置文件编写
实操(容器文件系统访问限制)
apparmor 配置文件
禁止pod 容器 对 容器中的 /tmp/ 和/data/www/ 目录下的写权限
加载到内核
查看加载
pod yaml编写
测试
Seccomp (未成功)
对于 Linux 来说,用户层一切资源相关操作都需要通过系统调用来完成,系统调用实现技术层次上解耦,内核只关心系统调用API的实现,而不必关心谁调用的
Seccomp (Secure computing mode) 是一个Linux内核安全模块,可用于应用进程允许使用的系统调用。
容器实际上是宿主机上运行的一个进程,共享宿主机内核,如果所有容器都具有任何系统调用的能力,那么容器如果被 入侵,就很轻松绕过容器隔离更改宿主机系统权限或者进入宿主机。
这就可以使用Seccomp机制限制容器系统调用,有效减少攻击面。
系统调用介绍
查看 node
docker info---Security Options:seccompProfile: default---
配置文件
/var/lib/kubelet/seccomp/ 是默认路径(固定)
设置拒绝调用列表时,注意pod启用需要一些必要的权限,否则会导致pod起不来
SCMP_ACT_ALLOW 类似于写黑名单
{"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: v1kind: Podmetadata:creationTimestamp: nulllabels:run: webname: web-seccompnamespace: testspec:nodeName: node1 # 因为只在node上写了配置文件,所以指定pod创建在node1上containers:- image: busybox:1.30name: hellosecurityContext:seccompProfile:type: LocalhostlocalhostProfile: chmod.json
[root@master cks]# kubectl get pod -n testNAME READY STATUS RESTARTS AGEweb-seccomp 1/1 Running 0 30s