# Performing Docker Bench Security Assessment

> Docker Bench for Security 是一个开源脚本，用于检查生产环境中部署 Docker 容器的数十项常见最佳实践。基于 CIS Docker Benchmark，审计宿主机配置，生成包含通过/失败/警告结果的合规报告。

- Skill: `killvxk/performing-docker-bench-security-assessment` (Agent Skill, multi-file: 8 files)
- Install (CLI): `npx skillmds@latest add killvxk/performing-docker-bench-security-assessment`
- Raw SKILL.md: https://api.skillmd.com/api/skills/killvxk/performing-docker-bench-security-assessment/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: DevOps & Infra
- License: Apache-2.0
- Author: killvxk (https://skillmd.com/u/killvxk)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/killvxk/performing-docker-bench-security-assessment

---

# 执行 Docker Bench 安全评估

## 概述

Docker Bench for Security 是一个开源脚本，用于检查生产环境中部署 Docker 容器的数十项常见最佳实践。基于 CIS Docker Benchmark，它审计宿主机配置、Docker daemon 设置、容器镜像、运行时配置和安全运营，生成包含通过/失败/警告结果的合规报告。

## 前置条件

- Docker Engine 已安装并运行
- Docker 宿主机上的 root 或 sudo 访问权限
- Docker Bench Security 脚本或容器镜像

## 实施步骤

### 步骤 1：运行 Docker Bench Security

```bash
# 以容器方式运行（推荐）
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/docker-bench-security

# 以 JSON 格式输出运行
docker run --rm --net host --pid host --userns host --cap-add audit_control \
  -v /etc:/etc:ro \
  -v /var/lib:/var/lib:ro \
  -v /var/run/docker.sock:/var/run/docker.sock:ro \
  docker/docker-bench-security -l /dev/stdout 2>/dev/null | tee docker-bench-results.json

# 仅运行特定部分
docker run --rm --net host --pid host --userns host \
  -v /var/run/docker.sock:/var/run/docker.sock:ro \
  docker/docker-bench-security -c container_images,container_runtime
```

### 步骤 2：解读结果

```
[INFO] 1 - 宿主机配置
[PASS] 1.1.1 - 确保已为容器创建独立分区
[WARN] 1.1.2 - 确保只有受信任的用户可以控制 Docker daemon
[PASS] 1.1.3 - 确保已为 Docker daemon 配置审计

[INFO] 2 - Docker daemon 配置
[FAIL] 2.1 - 以非 root 用户运行 Docker daemon
[PASS] 2.2 - 确保默认网桥上容器间网络流量受限
```

### 步骤 3：修复常见失败项

```bash
# 修复 2.2：限制容器间通信
echo '{"icc": false}' | sudo tee /etc/docker/daemon.json

# 修复 2.17：限制容器获取新权限
echo '{"no-new-privileges": true}' | sudo tee -a /etc/docker/daemon.json

# 修复 5.3：限制 Linux 内核能力
# 在 docker run 命令中使用 --cap-drop ALL

# 修复 5.12：以只读方式挂载容器根文件系统
# 在 docker run 命令中使用 --read-only 参数

# 配置更改后重启 Docker daemon
sudo systemctl restart docker
```

### 步骤 4：自动化定期评估

```yaml
# 定期评估的 docker-compose 配置
version: '3.8'
services:
  bench-security:
    image: docker/docker-bench-security
    network_mode: host
    pid: host
    userns_mode: host
    cap_add:
      - audit_control
    volumes:
      - /etc:/etc:ro
      - /var/lib:/var/lib:ro
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./results:/results
    command: -l /results/bench-$(date +%Y%m%d).log
    deploy:
      restart_policy:
        condition: none
```

## 验证命令

```bash
# 验证修复效果
docker run --rm docker/docker-bench-security 2>&1 | grep -E "(PASS|FAIL|WARN)" | sort | uniq -c

# 按类型统计结果
docker run --rm docker/docker-bench-security 2>&1 | grep -c "PASS"
docker run --rm docker/docker-bench-security 2>&1 | grep -c "FAIL"
docker run --rm docker/docker-bench-security 2>&1 | grep -c "WARN"
```

## 参考资料

- [Docker Bench Security](https://github.com/docker/docker-bench-security)
- [CIS Docker Benchmark](https://www.cisecurity.org/benchmark/docker)
- [Docker 安全最佳实践](https://docs.docker.com/engine/security/)

