hardening-docker-containers-for-production
对生产环境 Docker 容器进行安全加固,涵盖符合 CIS Docker Benchmark v1.8.0 的安全最佳实践,旨在最小化攻击面、防止权限提升,并在 Docker daemon、镜像、容器和运行时配置中强制执行最小权限原则
Best use case
hardening-docker-containers-for-production is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
对生产环境 Docker 容器进行安全加固,涵盖符合 CIS Docker Benchmark v1.8.0 的安全最佳实践,旨在最小化攻击面、防止权限提升,并在 Docker daemon、镜像、容器和运行时配置中强制执行最小权限原则
Teams using hardening-docker-containers-for-production should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/hardening-docker-containers-for-production/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How hardening-docker-containers-for-production Compares
| Feature / Agent | hardening-docker-containers-for-production | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
对生产环境 Docker 容器进行安全加固,涵盖符合 CIS Docker Benchmark v1.8.0 的安全最佳实践,旨在最小化攻击面、防止权限提升,并在 Docker daemon、镜像、容器和运行时配置中强制执行最小权限原则
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# 生产环境 Docker 容器安全加固
## 概述
对生产环境 Docker 容器进行安全加固,涵盖符合 CIS Docker Benchmark v1.8.0 的安全最佳实践,旨在最小化攻击面、防止权限提升,并在 Docker daemon、镜像、容器和运行时配置中强制执行最小权限原则。
## 前置条件
- 已安装 Docker Engine 24.0+
- Docker Compose v2
- 内核版本 5.10+ 的 Linux 主机
- Docker 宿主机上的 root 或 sudo 权限
- docker-bench-security 工具
- Hadolint,用于 Dockerfile 代码检查
- Dockle,用于镜像代码检查
## 核心概念
### CIS Docker Benchmark 章节
1. **宿主机配置** —— 审计 Docker daemon 文件,限制对 /var/run/docker.sock 的访问
2. **Docker Daemon 配置** —— 启用 TLS,限制容器间通信,配置日志
3. **Docker Daemon 配置文件** —— 设置 daemon.json 的所有权和权限
4. **容器镜像与构建文件** —— 使用可信基础镜像,扫描漏洞,多阶段构建
5. **容器运行时** —— 删除能力(Capability),只读根文件系统,限制系统调用
6. **Docker 安全运营** —— 监控、审计和轮换凭据
### 核心加固原则
- **最小权限**:以非 root 用户运行容器,删除所有非必要能力
- **不可变性**:使用只读根文件系统,对可写目录使用 tmpfs
- **最小化**:使用 distroless 或 Alpine 基础镜像,多阶段构建
- **隔离**:应用 seccomp 配置文件、AppArmor/SELinux 及命名空间限制
- **可审计性**:启用内容信任,记录所有容器活动
## 实施步骤
### 步骤 1:加固 Dockerfile
```dockerfile
# 使用特定摘要以确保可重现性
FROM python:3.12-slim@sha256:abc123... AS builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir --user -r requirements.txt
# 生产阶段——最小镜像
FROM gcr.io/distroless/python3-debian12
# 仅复制必要的工件
COPY --from=builder /root/.local /root/.local
COPY --from=builder /app /app
WORKDIR /app
# 创建非 root 用户
USER 65534:65534
# 设置只读文件系统预期
LABEL org.opencontainers.image.source="https://github.com/org/app"
ENTRYPOINT ["python", "app.py"]
```
### 步骤 2:加固 Docker Daemon 配置
```json
{
"icc": false,
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"live-restore": true,
"userland-proxy": false,
"no-new-privileges": true,
"default-ulimits": {
"nofile": {
"Name": "nofile",
"Hard": 64000,
"Soft": 64000
},
"nproc": {
"Name": "nproc",
"Hard": 1024,
"Soft": 1024
}
},
"seccomp-profile": "/etc/docker/seccomp-default.json",
"tls": true,
"tlscacert": "/etc/docker/tls/ca.pem",
"tlscert": "/etc/docker/tls/server-cert.pem",
"tlskey": "/etc/docker/tls/server-key.pem",
"tlsverify": true
}
```
### 步骤 3:加固容器运行时
```bash
docker run -d \
--name production-app \
--read-only \
--tmpfs /tmp:rw,noexec,nosuid,size=100m \
--tmpfs /var/run:rw,noexec,nosuid,size=10m \
--cap-drop ALL \
--cap-add NET_BIND_SERVICE \
--security-opt no-new-privileges:true \
--security-opt seccomp=/etc/docker/seccomp-default.json \
--security-opt apparmor=docker-default \
--pids-limit 100 \
--memory 512m \
--memory-swap 512m \
--cpus 1.0 \
--user 65534:65534 \
--network custom-bridge \
--restart on-failure:3 \
--health-cmd "curl -f http://localhost:8080/health || exit 1" \
--health-interval 30s \
--health-timeout 10s \
--health-retries 3 \
myapp:latest
```
### 步骤 4:启用 Docker Content Trust
```bash
export DOCKER_CONTENT_TRUST=1
export DOCKER_CONTENT_TRUST_SERVER=https://notary.example.com
# 签名并推送镜像
docker trust sign myregistry.com/myapp:v1.0.0
# 拉取前验证镜像签名
docker trust inspect --pretty myregistry.com/myapp:v1.0.0
```
### 步骤 5:配置宿主机级别审计
```bash
# 为 Docker 文件和目录添加审计规则
cat >> /etc/audit/rules.d/docker.rules << 'EOF'
-w /usr/bin/docker -k docker
-w /var/lib/docker -k docker
-w /etc/docker -k docker
-w /lib/systemd/system/docker.service -k docker
-w /lib/systemd/system/docker.socket -k docker
-w /etc/default/docker -k docker
-w /etc/docker/daemon.json -k docker
-w /usr/bin/containerd -k docker
-w /usr/bin/runc -k docker
EOF
systemctl restart auditd
```
## 验证命令
```bash
# 运行 Docker Bench Security
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 \
docker/docker-bench-security
# 检查 Dockerfile
hadolint Dockerfile
# 检查构建的镜像
dockle myapp:latest
# 验证没有以 root 运行的容器
docker ps -q | xargs docker inspect --format '{{.Id}}: User={{.Config.User}}'
```
## 关键安全控制
| 控制 | 实现方式 | CIS 章节 |
|------|---------|---------|
| 非 root 用户 | Dockerfile 中的 USER 指令 | 4.1 |
| 只读根文件系统 | --read-only 标志 | 5.12 |
| 删除能力 | --cap-drop ALL | 5.3 |
| 资源限制 | --memory、--cpus、--pids-limit | 5.10 |
| 禁止获取新权限 | --security-opt no-new-privileges | 5.25 |
| 内容信任 | DOCKER_CONTENT_TRUST=1 | 4.5 |
| Daemon TLS | daemon.json TLS 配置 | 2.6 |
| 审计日志 | auditd 规则 | 1.1 |
## 参考资料
- [CIS Docker Benchmark](https://www.cisecurity.org/benchmark/docker)
- [Docker Security Best Practices](https://docs.docker.com/engine/security/)
- [Docker Bench Security Tool](https://github.com/docker/docker-bench-security)
- [Hadolint - Dockerfile Linter](https://github.com/hadolint/hadolint)Related Skills
scanning-docker-images-with-trivy
Trivy 是 Aqua Security 开源的综合性漏洞扫描器,用于检测容器镜像中操作系统软件包、语言特定依赖项的漏洞、错误配置、密钥和许可证违规,并集成到 CI/CD 流水线,支持 SARIF、CycloneDX 和 SPDX 等多种输出格式。
scanning-containers-with-trivy-in-cicd
本技能涵盖将 Aqua Security 的 Trivy 扫描器集成到 CI/CD 流水线中,用于全面的容器镜像漏洞检测。包括扫描 Docker 镜像中的操作系统包和应用依赖 CVE、检测 Dockerfile 中的错误配置、扫描文件系统和 Git 仓库,以及建立基于严重性的质量门禁以阻止有漏洞的镜像部署。
performing-docker-bench-security-assessment
Docker Bench for Security 是一个开源脚本,用于检查生产环境中部署 Docker 容器的数十项常见最佳实践。基于 CIS Docker Benchmark,审计宿主机配置,生成包含通过/失败/警告结果的合规报告。
performing-container-image-hardening
本技能涵盖通过最小化攻击面、移除不必要软件包、实施多阶段构建、配置非 root 用户, 以及应用 CIS Docker 基准建议来加固容器镜像,生成安全的生产就绪镜像。
implementing-rbac-hardening-for-kubernetes
通过实施最小权限策略、审计角色绑定、消除 cluster-admin 权限蔓延并集成外部身份提供商,加固 Kubernetes 基于角色的访问控制(RBAC)。
hardening-windows-endpoint-with-cis-benchmark
使用 CIS(互联网安全中心)Benchmark 建议对 Windows 端点进行加固, 以减少攻击面、执行安全基线并满足合规要求。适用于部署新 Windows 工作站或服务器、 修复审计发现或为组织建立全面安全基线的场景。适用于涉及 Windows 加固、 CIS Benchmark、GPO 安全基线或端点配置合规的请求。
hardening-linux-endpoint-with-cis-benchmark
使用 CIS Benchmark 建议对 Ubuntu、RHEL 和 CentOS 的 Linux 端点进行加固, 以减少攻击面、执行安全基线并满足合规要求。适用于部署新 Linux 服务器、修复审计发现 或为 Linux 基础设施建立安全基线的场景。
hardening-docker-daemon-configuration
通过配置 daemon.json 实现用户命名空间重映射、TLS 认证、无根模式(rootless mode)和 CIS Benchmark 控制措施,对 Docker daemon 进行安全加固。
configuring-ldap-security-hardening
加固 LDAP 目录服务以防御常见攻击,包括凭据收集、LDAP 注入、匿名绑定和通道绑定绕过。涵盖 LDAPS 强制执行、通道绑定、LDAP 签名、访问控制列表及 LDAP 攻击监控。
analyzing-docker-container-forensics
通过分析镜像、层、卷、日志和运行时痕迹,调查受损的 Docker 容器,识别恶意活动和证据。
triaging-vulnerabilities-with-ssvc-framework
使用 CISA 的利益相关方特定漏洞分类(SSVC)决策树框架对漏洞进行分类和优先排序,产出可操作的修复优先级:Track、Track*、Attend 或 Act。
triaging-security-incident
使用 NIST SP 800-61r3 和 SANS PICERL 框架对安全事件进行初始分类,确定严重性、范围和所需响应行动。 按类型对事件分类,根据业务影响分配优先级,并路由到相应的响应团队。适用于事件分类、 安全告警分类、严重性评估、事件优先级排序或初始事件分析等请求场景。