【从零造容器】Seccomp-BPF 与 Capabilities:容器安全的两道防线

💡 原文中文,约12900字,阅读约需31分钟。
📝

内容提要

本文讨论了容器安全机制中的两道防线: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 结合使用,形成多层防御机制,分别从权限和系统调用层面保护容器安全。

容器进程如何共享宿主机内核?

容器进程与宿主机共享同一内核,系统调用直接影响宿主机,因此需要额外的安全防线。

➡️

继续阅读