github编辑

第十八章 安全

容器安全是生产环境部署的核心考量。本章介绍 Docker 的安全机制和最佳实践。

容器安全的本质

核心问题:容器共享宿主机内核,隔离性弱于虚拟机。如何在便利性和安全性之间取得平衡?

spinner

核心安全机制

本节涵盖了相关内容与详细描述,主要探讨以下几个方面:

1. 命名空间

提供进程、网络、文件系统等资源的隔离:

Namespace
隔离内容
安全作用

PID

进程

容器看不到其他进程

NET

网络

独立网络栈

MNT

文件系统

独立的根目录

USER

用户

容器 root ≠ 宿主机 root

IPC

进程通信

隔离共享内存

UTS

主机名

独立主机名

详见命名空间章节。

2. 控制组

限制容器的资源使用,防止资源耗尽攻击:

3. 能力机制

Linux 将 root 权限拆分为多个细粒度的能力。Docker 默认禁用危险能力:

能力
说明
默认状态

CAP_NET_ADMIN

网络管理

❌ 禁用

CAP_SYS_ADMIN

系统管理

❌ 禁用

CAP_SYS_PTRACE

进程追踪

❌ 禁用

CAP_CHOWN

更改文件所有者

✅ 启用

CAP_NET_BIND_SERVICE

绑定低端口

✅ 启用


镜像安全

本节涵盖了相关内容与详细描述,主要探讨以下几个方面:

使用可信镜像

运行以下命令:

漏洞扫描

扫描镜像中的已知安全漏洞:

镜像签名验证

当前更推荐使用 Sigstore / Notation 体系进行镜像签名。Docker Content Trust (DCT) 已进入退场阶段,不建议作为新项目主方案。

注意:Cosign 默认会把签名写回镜像所在仓库,请使用你有推送权限的镜像地址。


运行时安全

本节涵盖了相关内容与详细描述,主要探讨以下几个方面:

1. 非 root 用户运行

笔者强调:这是最重要的安全实践之一。

或在运行时指定:

2. 只读文件系统

运行以下命令:

3. 禁用特权模式

运行以下命令:

4. 限制资源

运行以下命令:

5. 网络隔离

运行以下命令:


Dockerfile 安全实践

本节涵盖了相关内容与详细描述,主要探讨以下几个方面:

1. 使用精简基础镜像

Dockerfile 内容如下:

2. 多阶段构建

Dockerfile 内容如下:

3. 不存储敏感信息

Dockerfile 内容如下:

4. 固定依赖版本

Dockerfile 内容如下:


安全扫描清单

部署前检查:

检查项
命令/方法

漏洞扫描

docker scout cvestrivy

非 root 运行

检查 Dockerfile 中的 USER

资源限制

检查 -m, --cpus 参数

只读文件系统

检查 --read-only

无特权模式

确认没有 --privileged

最小能力

检查 --cap-drop=all

网络隔离

检查网络配置

敏感信息

确认无硬编码密码


高级安全方案

本节涵盖了相关内容与详细描述,主要探讨以下几个方面:

Seccomp 系统调用过滤

限制容器可以使用的系统调用:

AppArmor / SELinux

使用强制访问控制:

安全容器 (gVisor / Kata)

需要更强隔离时:


软件供应链安全

随着软件供应链攻击日益频繁,仅保障运行时安全已不足够。

1. SBOM (软件物料清单)

SBOM 类似于食品的配料表,列出了容器镜像中包含的所有软件包及其版本。

  • 生成 SBOM:使用 docker buildx build --sbomdocker scout sbom

  • 管理 SBOM:确保持续监控 SBOM 中的组件是否存在新披露的漏洞。

2. 镜像签名 (Sigstore / Notary v2)

确保镜像在构建后未被篡改,且确实来自可信的发布者。

  • Cosign:Sigstore 项目的一部分,用于签署和验证容器镜像。

3. SLSA (Supply-chain Levels for Software Artifacts)

遵循 SLSA 框架,确保构建过程的完整性,例如使用 GitHub Actions 等受控环境进行构建,而非在开发者本地机器上构建发布。


本章小结

相关信息如下表:

安全措施
重要程度
实现方式

非 root 运行

⭐⭐⭐

USER 指令

漏洞扫描

⭐⭐⭐

docker scout, trivy

资源限制

⭐⭐⭐

-m, --cpus

只读文件系统

⭐⭐

--read-only

最小能力

⭐⭐

--cap-drop=all

镜像签名

⭐⭐

cosign / Notation

延伸阅读

最后更新于