用于检查部署 Docker 服务的最佳实践,有则改之无则加勉
- 使用
Docker
对应用程序和服务进行容器化可以为您提供一些开箱即用的安全优势,但默认的Docker
安装可能会存在一些与安全相关的配置错误等。为了保护我们安装服务不受安全威胁,我们可以使用Docker
团队发布的一个安全审计工具。该工具使用非常简单,即在Docker
主机上运行此清单并标记找到的所有问题。
1. 安装使用
安装和使用如此简单
- [1] Docker
# 部署之后立即开始检查
# 需要Docker的版本在1.13.0及以上版本
$ docker run -it --net host --pid host --userns host --cap-add audit_control \
-e DOCKER_CONTENT_TRUST=$DOCKER_CONTENT_TRUST \
-v /etc:/etc \
-v /usr/bin/docker-containerd:/usr/bin/docker-containerd \
-v /usr/bin/docker-runc:/usr/bin/docker-runc \
-v /usr/lib/systemd:/usr/lib/systemd \
-v /var/lib:/var/lib \
-v /var/run/docker.sock:/var/run/docker.sock \
--label docker_bench_security \
docker/docker-bench-security
- [2] Compose
# docker-compose.yml
docker-bench-security:
build: .
cap_add:
- audit_control
labels:
- docker_bench_security
net: host
pid: host
stdin_open: true
tty: true
volumes:
- /var/lib:/var/lib
- /var/run/docker.sock:/var/run/docker.sock
- /usr/lib/systemd:/usr/lib/systemd
- /etc:/etc
# 启动服务
$ docker-compose run --rm docker-bench-security
- [3] Building
# 获取代码
$ git clone https://github.com/docker/docker-bench-security.git
$ cd docker-bench-security
# 本地打包
$ docker build --no-cache -t docker-bench-security .
# 跑跑镜像
$ docker run -it --net host --pid host --cap-add audit_control \
-e DOCKER_CONTENT_TRUST=$DOCKER_CONTENT_TRUST \
-v /var/lib:/var/lib \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/lib/systemd:/usr/lib/systemd \
-v /etc:/etc --label docker_bench_security \
docker-bench-security
2. 命令参数
命令参数也非常言简意赅
# 只检查2_2规则并保存检查日志到文件
$ sh docker-bench-security.sh -l /tmp/docker-bench-security.sh.log -c check_2_2
3. 检查项目
检查项目比较全面且必要
[1] 审计的第一部分: 测试主机操作系统的配置
- 确保为容器创建了单独的分区
- 将
Docker
容器和/var/lib/docker
目录使用独立分区来保证适当的隔离
- 将
- 确保容器主机已经加固
- 加固通常包括设置防火墙,锁定各种服务,设置审计和记录以及实施其他安全措施
- 这个测试只是提醒你考虑强化你的主机安全性,如果你确信环境正常可忽略
- 确保 Docker 是最新的
- 通过访问
Docker CE
发行说明来检查哪个版本是当前的稳定版本
- 通过访问
- 确保只有受信任的用户才能控制 Docker 守护进程
- 该测试从
/etc/group
文件输出docker
组的行 - 查看该行并确保只有合适的用户才有权控制
Docker
守护进程 - 要从该组中删除用户可使用
gpasswd -d username docker
- 该测试从
- 确保为各种 Docker 文件配置审计
- 需要安装和配置
auditd
以启用对某些Docker
文件/目录和套接字的审计 - Auditd 是 Linux 访问监控和记帐的子系统,可在内核级别记录值得注意的系统操作
- 需要安装和配置
[2] 审计的第二部分: 更正 Docker 守护程序配置警告
- 确保默认网桥上的容器之间的网络流量受到限制
- 此警告通过配置文件(
daemon.json
)中的"icc": false
来解决
- 此警告通过配置文件(
- 启用用户名称空间支持
- 用户名称空间重新映射允许进程在容器中作为
root
运行,映射到主机上权限较低的用户 - 使用配置文件中的
”userns-remap”: ”defaut”
行来启用用户名称空间重新映射
- 用户名称空间重新映射允许进程在容器中作为
- 确保已启用对 Docker 客户端命令的授权
- 查阅官方
Docker
文档以了解如何安全设置必要的证书和密钥
- 查阅官方
- 确保配置了集中和远程日志记录
- 我们使用
"log-driver": "syslog"
行启用了标准syslog
日志记录
- 我们使用
- 确保遗留注册表(v1)上的操作已禁用
- 此警告已通过守护进程配置文件中的
"disable-legacy-registry": true
行修复 - 这将禁用不安全的传统映像注册表协议
- 此警告已通过守护进程配置文件中的
- 确保活动恢复已启用
- 通过在守护进程配置中指定
"live-restore": true
- 当 Docker 守护进程不在时,我们允许容器继续运行
- 这改进了主机系统更新期间的容器正常运行时间和其他稳定性问题
- 通过在守护进程配置中指定
- 确保容器被限制获取新的权限
- 守护进程配置中的
"no-new-privileges": true
行阻止了容器内的特权升级 - 这确保容器不能使用
setuid
或setgid
二进制文件获得新的权限
- 守护进程配置中的
[3] 启用内容信任
- 内容信任是一种系统,用于在运行它们之前签署
Docker
映像并验证它们的签名 - 可以使用
DOCKER_CONTENT_TRUST
环境变量启用内容信任