最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Linux 容器的内核安全:如何应用 Seccomp 与 AppArmor
时间:2026-07-02 10:12:52 编辑:袖梨 来源:一聚教程网
真正起作用的是运行时强制拦截:Seccomp掐断危险系统调用,AppArmor锁死文件、网络和能力访问;两者配合可使被攻破容器无法操作关键资源。
Linux 容器的内核安全不能只靠“不以 root 运行”或“扫镜像漏洞”来应付。真正起作用的是运行时层面的强制拦截:Seccomp 负责掐断危险系统调用,AppArmor 负责锁死文件、网络和能力访问。两者配合,能让即使被攻破的容器也动不了关键资源。
Seccomp:精准过滤系统调用
Seccomp 是内核提供的轻量级过滤机制,通过 BPF 程序在系统调用入口处做判断。默认 Docker 的 seccomp 配置已禁用 init_module、ptrace、mount、umount、keyctl 等高危调用,但生产环境需进一步收紧:
- 把
"defaultAction": "SCMP_ACT_ERRNO"设为默认动作,未明确允许的调用一律返回EPERM - 对
clone(带CLONE_NEWUSER)、mount、chroot等逃逸关键调用,使用"SCMP_ACT_KILL_PROCESS"直接终止整个进程 - 策略文件路径需在 containerd 或 Docker 启动配置中显式指定,例如:
SeccompProfilePath = "/etc/containerd/seccomp/restrictive.json" - 生成策略可借助
docker run --security-opt seccomp=... --rm -it alpine strace -e trace=...观察真实调用,再裁剪 default.json
AppArmor:最小化文件与能力访问
AppArmor 按路径限制进程行为,配置直观但生效依赖严格流程。它不是写完 profile 就自动起效,必须加载、验证、挂载三步到位:
- 配置文件放在
/etc/apparmor.d/下,命名需将二进制路径中的/替换为.(如/usr/bin/containerd→usr.bin.containerd) - 规则必须白名单化:只放真实需要的路径和权限,例如
/var/log/myapp/** rw,;避免/var/**这类宽泛写法 - 显式拒绝敏感路径:
deny /proc/sys/** wklx,、deny /sys/fs/cgroup/** w,、deny /dev/kmsg r, - 不声明
capability sys_admin或capability dac_override,除非绝对必要;网络只开network inet tcp,这类具体协议
在容器运行时中启用并验证
无论是 Docker、containerd 还是 Kubernetes,启用后必须确认策略真正在 enforce 状态下运行:
- Docker 启动容器时加参数:
--security-opt seccomp=/path/to/profile.json --security-opt apparmor=my-profile - Kubernetes Pod 中通过注解挂载:
container.apparmor.security.beta.kubernetes.io/<container-name>: localhost/my-profile - 检查是否生效:
sudo aa-status查 profile 是否在 “profiles in enforce mode” 列表;sudo dmesg | grep -i denied查拦截日志 - 若策略未加载,用
sudo apparmor_parser -r /etc/apparmor.d/my-profile重载;若 containerd 不识别,确认其配置中启用了 AppArmor 支持(enable_apparmor = true)
常见误区与加固要点
很多配置看似启用,实则形同虚设。以下细节决定防护是否真实落地:
- 别用
--security-opt apparmor=unconfined,哪怕调试也不推荐;临时测试可用 complain 模式:sudo aa-complain /path/to/binary - AppArmor profile 名称必须与
--security-opt apparmor=xxx中的xxx完全一致,且不含路径前缀(如localhost/xxx是 Kubernetes 注解格式,profile 文件名仍是xxx) - Seccomp 和 AppArmor 要配合使用——Seccomp 拦 mount,AppArmor 拒绝写
/proc/sys,两者缺一不可 - 容器运行时自身(如
runc、containerd)也应有对应 AppArmor profile,否则攻击者可能绕过容器策略直接攻击运行时
相关文章
- 微博网页版入口在哪 07-10
- 卖座电影如何退票 07-10
- allengaoo/ppt-agent skill 本地安装使用教程 07-10
- 抖音官网电脑版如何访问 07-10
- mypinseeker/consulting-ppt-skill 使用教程:结论标题、品牌色和 QA 审计 07-10
- 抖音网页版在线观看短视频官网-抖音在线观看网页版最新入口地址 07-10