【从零造容器】Seccomp-BPF 与 Capabilities:容器安全的两道防线
内容提要
本文讨论了容器安全机制中的两道防线:Capabilities 和 Seccomp-BPF。Capabilities 将 root 权限拆分,允许容器仅使用必要的特权,防止执行危险操作。Seccomp-BPF 通过过滤系统调用,阻止容器执行关键系统调用,从而增强安全性。Docker 默认配置结合这两种机制,确保容器进程的安全性,防止潜在的宿主机攻击。
关键要点
-
容器进程与宿主机共享同一内核,系统调用直接影响宿主机。
-
Capabilities 将 root 权限拆分,允许容器仅使用必要的特权,防止执行危险操作。
-
Docker 默认配置丢弃了许多危险的 capabilities,如 CAP_SYS_ADMIN 和 CAP_SYS_BOOT。
-
Seccomp-BPF 通过过滤系统调用,增强容器的安全性,阻止关键系统调用。
-
Docker 默认启用的 seccomp profile 阻止了约 44 个系统调用,主要涉及内核管理和文件系统操作。
-
Capabilities 和 Seccomp-BPF 结合使用,形成多层防御机制,确保容器安全。
延伸问答
什么是容器的 Capabilities 机制?
Capabilities 机制将 root 权限拆分,允许容器仅使用必要的特权,防止执行危险操作。
Seccomp-BPF 如何增强容器的安全性?
Seccomp-BPF 通过过滤系统调用,阻止容器执行关键系统调用,从而增强安全性。
Docker 默认配置中丢弃了哪些危险的 capabilities?
Docker 默认配置丢弃了 CAP_SYS_ADMIN、CAP_NET_ADMIN、CAP_SYS_BOOT 等多个危险的 capabilities。
如何自定义 Docker 的 seccomp profile?
可以使用自定义 JSON profile,通过 --security-opt seccomp=my-profile.json 来运行 Docker 容器。
Capabilities 和 Seccomp-BPF 之间有什么关系?
Capabilities 和 Seccomp-BPF 结合使用,形成多层防御机制,分别从权限和系统调用层面保护容器安全。
容器进程如何共享宿主机内核?
容器进程与宿主机共享同一内核,系统调用直接影响宿主机,因此需要额外的安全防线。