
Docker 安全基准是一个脚本,用于检查在生产环境中部署 Docker 容器时数十种常见最佳实践。测试全部自动化,并基于 CIS Docker 基准 v1.6.0。
我们将其作为开源工具提供,以便 Docker 社区能够轻松地根据该基准对主机和 Docker 容器进行自我评估。
| 版本 | CIS 基准版本 |
|---|---|
| 1.6.0 | 1.6.0 |
| 1.5.0 | 1.5.0 |
| 1.3.6 | 1.4.0 |
| 1.3.5 | 1.2.0 |
| 1.3.3 | 1.1.0 |
| 1.3.0 | 1.13.0 |
你可以直接从基础主机运行此脚本:
git clone https://github.com/docker/docker-bench-security.git
cd docker-bench-security
sudo sh docker-bench-security.sh
注意:
jq是一个可选但推荐的依赖项。
如果你希望自行构建并运行此容器,有两种选择:
git clone https://github.com/docker/docker-bench-security.git
cd docker-bench-security
docker build --no-cache -t docker-bench-security .
然后跟一个合适的 docker run 命令,如下所示。
git clone https://github.com/docker/docker-bench-security.git
cd docker-bench-security
docker-compose run --rm docker-bench-security
请注意,docker/docker-bench-security 镜像已过时,需要手动构建。更多信息请参阅 #405。
注意,此容器以 大量 权限运行——共享主机的文件系统、PID 和网络命名空间,因为基准测试的部分内容适用于正在运行的主机。
docker run --rm --net host --pid host --userns host --cap-add audit_control \
-e DOCKER_CONTENT_TRUST=$DOCKER_CONTENT_TRUST \
-v /etc:/etc:ro \
-v /usr/bin/containerd:/usr/bin/containerd:ro \
-v /usr/bin/runc:/usr/bin/runc:ro \
-v /usr/lib/systemd:/usr/lib/systemd:ro \
-v /var/lib:/var/lib:ro \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
--label docker_bench_security \
docker-bench-security
不要忘记根据你的操作系统调整共享卷。一些示例如下:
docker.service 和 docker.secret 文件默认位于 /lib/systemd/system 文件夹中。docker run --rm --net host --pid host --userns host --cap-add audit_control \
-e DOCKER_CONTENT_TRUST=$DOCKER_CONTENT_TRUST \
-v /etc:/etc:ro \
-v /lib/systemd/system:/lib/systemd/system:ro \
-v /usr/bin/containerd:/usr/bin/containerd:ro \
-v /usr/bin/runc:/usr/bin/runc:ro \
-v /usr/lib/systemd:/usr/lib/systemd:ro \
-v /var/lib:/var/lib:ro \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
--label docker_bench_security \
docker-bench-security
/etc/hostname 文件,因此需要先创建它。此外,macOS 上的 Docker Desktop 没有 /usr/lib/systemd 或上述 Docker 二进制文件。sudo touch /etc/hostname
docker run --rm --net host --pid host --userns host --cap-add audit_control \
-e DOCKER_CONTENT_TRUST=$DOCKER_CONTENT_TRUST \
-v /etc:/etc \
-v /var/lib:/var/lib:ro \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
--label docker_bench_security \
docker-bench-security
Docker 基准需要 Docker 1.13.0 或更高版本才能运行。
请注意,当发行版不包含 auditctl 时,审计测试将检查 /etc/audit/audit.rules 以查看是否存在规则。
-b 可选 不输出颜色
-h 可选 打印此帮助信息
-l FILE 可选 将日志输出到 FILE,如果在 Docker 容器中运行则位于容器内
-u USERS 可选 逗号分隔的受信任 Docker 用户列表
-c CHECK 可选 逗号分隔的特定检查 ID 列表
-e CHECK 可选 逗号分隔的要排除的特定检查 ID 列表
-i INCLUDE 可选 逗号分隔的容器或镜像名称中要检查的模式列表
-x EXCLUDE 可选 逗号分隔的容器或镜像名称中要排除检查的模式列表
-t LABEL 可选 逗号分隔的容器或镜像中要检查的标签列表
-n LIMIT 可选 在 JSON 输出中,当报告项目列表(容器、镜像等)时,将报告的项目数量限制为 LIMIT。默认值 0(无限制)。
-p PRINT 可选 禁用修复措施的打印。默认:打印修复措施。
默认情况下,Docker 安全基准脚本将运行所有可用的 CIS 测试,并在当前目录的日志文件夹中生成日志文件,文件名为 docker-bench-security.log.json 和 docker-bench-security.log。
如果使用 Docker 容器,日志文件将在容器内的 /usr/local/bin/log/ 位置创建。如果希望容器运行后从主机访问它们,则需要挂载一个用于存储它们的卷。
基于 CIS 的检查命名为 check_<section>_<number>,例如 check_2_6,社区贡献的检查命名为 check_c_<number>。
sh docker-bench-security.sh -c check_2_2 将仅运行检查 2.2 确保日志级别设置为 'info'。
sh docker-bench-security.sh -e check_2_2 将运行所有可用检查,但排除 2.2 确保日志级别设置为 'info'。
sh docker-bench-security.sh -e docker_enterprise_configuration 将运行所有可用检查,但排除 docker_enterprise_configuration 组。
sh docker-bench-security.sh -e docker_enterprise_configuration,check_2_2 将运行所有可用检查,但排除 docker_enterprise_configuration 组和 2.2 确保日志级别设置为 'info'。
sh docker-bench-security.sh -c container_images,container_runtime 将仅运行 container_images 和 container_runtime 检查。
sh docker-bench-security.sh -c container_images -e check_4_5 将仅运行 container_images 检查,但排除 4.5 确保 Docker 启用了内容信任。
请注意,提交检查时,请提供为什么它是一个合理的测试的原因,并请包含某种类型的官方文档以验证该信息。