hardening-docker-daemon-configuration

通过配置 daemon.json 实现用户命名空间重映射、TLS 认证、无根模式(rootless mode)和 CIS Benchmark 控制措施,对 Docker daemon 进行安全加固。

9 stars

Best use case

hardening-docker-daemon-configuration is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

通过配置 daemon.json 实现用户命名空间重映射、TLS 认证、无根模式(rootless mode)和 CIS Benchmark 控制措施,对 Docker daemon 进行安全加固。

Teams using hardening-docker-daemon-configuration 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

$curl -o ~/.claude/skills/hardening-docker-daemon-configuration/SKILL.md --create-dirs "https://raw.githubusercontent.com/killvxk/cybersecurity-skills-zh/main/skills/hardening-docker-daemon-configuration/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/hardening-docker-daemon-configuration/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How hardening-docker-daemon-configuration Compares

Feature / Agenthardening-docker-daemon-configurationStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

通过配置 daemon.json 实现用户命名空间重映射、TLS 认证、无根模式(rootless mode)和 CIS Benchmark 控制措施,对 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 Daemon 配置安全加固

## 概述

Docker daemon(`dockerd`)以 root 权限运行并控制所有容器操作。通过 `/etc/docker/daemon.json`、TLS 证书、用户命名空间重映射和网络限制对其配置进行加固,对于防止权限提升、横向移动和容器逃逸攻击至关重要。

## 前置条件

- 已安装 Docker Engine 24.0+
- Docker 宿主机上的 root 或 sudo 权限
- OpenSSL,用于生成 TLS 证书
- 了解 Linux 命名空间和 cgroups

## 核心加固 daemon.json

```json
{
  "icc": false,
  "userns-remap": "default",
  "no-new-privileges": true,
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "5"
  },
  "storage-driver": "overlay2",
  "live-restore": true,
  "userland-proxy": false,
  "default-ulimits": {
    "nofile": {
      "Name": "nofile",
      "Hard": 65536,
      "Soft": 32768
    },
    "nproc": {
      "Name": "nproc",
      "Hard": 4096,
      "Soft": 2048
    }
  },
  "seccomp-profile": "/etc/docker/seccomp/default.json",
  "default-address-pools": [
    {
      "base": "172.17.0.0/16",
      "size": 24
    }
  ],
  "iptables": true,
  "ip-forward": true,
  "ip-masq": true,
  "experimental": false,
  "metrics-addr": "127.0.0.1:9323",
  "max-concurrent-downloads": 3,
  "max-concurrent-uploads": 5,
  "default-runtime": "runc",
  "runtimes": {
    "runsc": {
      "path": "/usr/local/bin/runsc",
      "runtimeArgs": ["--platform=ptrace"]
    }
  }
}
```

## 各配置项说明

### 禁用容器间通信(ICC)

```json
{
  "icc": false
}
```

防止默认桥接网络上的容器相互通信。每个容器必须使用显式的 `--link` 或带有发布端口的用户自定义网络。

### 启用用户命名空间重映射

```json
{
  "userns-remap": "default"
}
```

将容器 root(UID 0)映射到宿主机上的高位非特权 UID。这可防止容器逃逸后在宿主机上获得 root 权限。

```bash
# 验证 userns-remap 已激活
cat /etc/subuid
# 输出:dockremap:100000:65536

cat /etc/subgid
# 输出:dockremap:100000:65536

# 验证容器 UID 映射
docker run --rm alpine id
# uid=0(root) gid=0(root) —— 但宿主机 UID 为 100000+
```

### 禁用新权限提升

```json
{
  "no-new-privileges": true
}
```

防止容器进程通过 setuid/setgid 二进制文件或能力提升获取额外权限。

### 启用在线恢复

```json
{
  "live-restore": true
}
```

在 daemon 停机期间保持容器运行,支持在不重启容器的情况下升级 daemon。

### 禁用用户态代理

```json
{
  "userland-proxy": false
}
```

使用 iptables 规则而非 docker-proxy 进行端口转发,减少攻击面并提升性能。

## 远程 Docker API 的 TLS 配置

### 生成 CA 和服务器证书

```bash
# 创建 CA
openssl genrsa -aes256 -out ca-key.pem 4096
openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem \
  -subj "/CN=Docker CA"

# 创建服务器密钥和 CSR
openssl genrsa -out server-key.pem 4096
openssl req -subj "/CN=docker-host" -sha256 -new -key server-key.pem -out server.csr

# 创建含 SAN 的 extfile
echo "subjectAltName = DNS:docker-host,IP:10.0.0.5,IP:127.0.0.1" > extfile.cnf
echo "extendedKeyUsage = serverAuth" >> extfile.cnf

# 签署服务器证书
openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem \
  -CAcreateserial -out server-cert.pem -extfile extfile.cnf

# 创建客户端密钥和证书
openssl genrsa -out key.pem 4096
openssl req -subj "/CN=client" -new -key key.pem -out client.csr
echo "extendedKeyUsage = clientAuth" > extfile-client.cnf
openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem \
  -CAcreateserial -out cert.pem -extfile extfile-client.cnf

# 设置权限
chmod 0400 ca-key.pem key.pem server-key.pem
chmod 0444 ca.pem server-cert.pem cert.pem

# 移至 Docker TLS 目录
sudo mkdir -p /etc/docker/tls
sudo cp ca.pem server-cert.pem server-key.pem /etc/docker/tls/
```

### 为 daemon.json 配置 TLS

```json
{
  "tls": true,
  "tlsverify": true,
  "tlscacert": "/etc/docker/tls/ca.pem",
  "tlscert": "/etc/docker/tls/server-cert.pem",
  "tlskey": "/etc/docker/tls/server-key.pem",
  "hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2376"]
}
```

### 客户端连接

```bash
docker --tlsverify \
  --tlscacert=ca.pem \
  --tlscert=cert.pem \
  --tlskey=key.pem \
  -H=tcp://docker-host:2376 version
```

## Docker Socket 保护

```bash
# 限制 socket 所有权
sudo chown root:docker /var/run/docker.sock
sudo chmod 660 /var/run/docker.sock

# 审计 Docker socket 访问
sudo auditctl -w /var/run/docker.sock -k docker-socket

# 永远不要将 Docker socket 挂载到容器中
# 错误示例:docker run -v /var/run/docker.sock:/var/run/docker.sock ...
```

## 无根模式 Docker

```bash
# 安装无根模式 Docker
curl -fsSL https://get.docker.com/rootless | sh

# 配置环境
export PATH=$HOME/bin:$PATH
export DOCKER_HOST=unix://$XDG_RUNTIME_DIR/docker.sock

# 启动无根模式 daemon
systemctl --user start docker
systemctl --user enable docker

# 验证无根模式
docker info | grep -i rootless
# Rootless: true
```

## 内容信任(镜像签名)

```bash
# 启用 Docker Content Trust
export DOCKER_CONTENT_TRUST=1

# 仅拉取已签名的镜像
docker pull library/alpine:3.18
# 若镜像未签名则失败

# 签名并推送镜像
docker trust sign myregistry/myapp:1.0
```

## Seccomp 配置文件

```bash
# 查看默认 seccomp 配置文件
docker info --format '{{.SecurityOptions}}'

# 使用自定义 seccomp 配置文件
docker run --security-opt seccomp=/etc/docker/seccomp/custom.json alpine

# 验证 seccomp 已启用
docker inspect --format='{{.HostConfig.SecurityOpt}}' container_name
```

## AppArmor 配置文件

```bash
# 检查 AppArmor 状态
sudo aa-status

# 使用自定义 AppArmor 配置文件
docker run --security-opt apparmor=docker-custom alpine

# 加载自定义配置文件
sudo apparmor_parser -r /etc/apparmor.d/docker-custom
```

## 验证命令

```bash
# 检查 daemon 配置
docker info

# 验证 userns-remap
docker info --format '{{.SecurityOptions}}'

# 检查 ICC 设置
docker network inspect bridge --format '{{.Options}}'

# 使用 Docker Bench 审计
docker run --rm --net host --pid host \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /etc:/etc:ro \
  docker/docker-bench-security
```

## 最佳实践

1. **永远不要在没有 TLS 的情况下暴露 Docker daemon** —— 远程访问始终使用 `--tlsverify`
2. **启用用户命名空间重映射** —— 将容器 root 映射到非特权宿主机 UID
3. **禁用 ICC** —— 防止默认桥接网络上的容器间通信
4. **使用无根模式** —— 尽量以非 root 用户运行 Docker daemon
5. **启用内容信任** —— 仅拉取已签名的镜像
6. **配置日志轮换** —— 防止日志文件填满磁盘
7. **使用 seccomp 配置文件** —— 限制容器可用的系统调用
8. **审计 Docker socket** —— 监控对 /var/run/docker.sock 的访问
9. **定期运行 Docker Bench** —— 自动化 CIS Benchmark 检查
10. **保持 Docker 更新** —— 及时应用安全补丁

Related Skills

testing-cors-misconfiguration

9
from killvxk/cybersecurity-skills-zh

在安全评估期间,识别和利用跨源资源共享(CORS)错误配置,这些配置允许未经授权的跨域数据访问和凭证窃取。

scanning-docker-images-with-trivy

9
from killvxk/cybersecurity-skills-zh

Trivy 是 Aqua Security 开源的综合性漏洞扫描器,用于检测容器镜像中操作系统软件包、语言特定依赖项的漏洞、错误配置、密钥和许可证违规,并集成到 CI/CD 流水线,支持 SARIF、CycloneDX 和 SPDX 等多种输出格式。

remediating-s3-bucket-misconfiguration

9
from killvxk/cybersecurity-skills-zh

本技能提供识别和修复 Amazon S3 存储桶错误配置(这些错误配置会将敏感数据暴露给未授权访问)的分步操作流程。涵盖在账户和存储桶级别启用 S3 阻止公开访问(Block Public Access)、审计存储桶策略和 ACL、强制加密、配置访问日志记录,以及使用 AWS Config 和 Lambda 部署自动化修复措施。

performing-ssl-tls-inspection-configuration

9
from killvxk/cybersecurity-skills-zh

在网络安全设备上配置 SSL/TLS 检查,对 HTTPS 流量进行解密、检查和重加密以用于威胁检测,同时管理证书、豁免项和隐私合规要求。

performing-docker-bench-security-assessment

9
from killvxk/cybersecurity-skills-zh

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

performing-container-image-hardening

9
from killvxk/cybersecurity-skills-zh

本技能涵盖通过最小化攻击面、移除不必要软件包、实施多阶段构建、配置非 root 用户, 以及应用 CIS Docker 基准建议来加固容器镜像,生成安全的生产就绪镜像。

implementing-rbac-hardening-for-kubernetes

9
from killvxk/cybersecurity-skills-zh

通过实施最小权限策略、审计角色绑定、消除 cluster-admin 权限蔓延并集成外部身份提供商,加固 Kubernetes 基于角色的访问控制(RBAC)。

implementing-google-workspace-sso-configuration

9
from killvxk/cybersecurity-skills-zh

为 Google Workspace 配置基于 SAML 2.0 的单点登录(SSO),与第三方身份提供商集成,实现集中认证并强制执行全组织范围的访问策略。

hardening-windows-endpoint-with-cis-benchmark

9
from killvxk/cybersecurity-skills-zh

使用 CIS(互联网安全中心)Benchmark 建议对 Windows 端点进行加固, 以减少攻击面、执行安全基线并满足合规要求。适用于部署新 Windows 工作站或服务器、 修复审计发现或为组织建立全面安全基线的场景。适用于涉及 Windows 加固、 CIS Benchmark、GPO 安全基线或端点配置合规的请求。

hardening-linux-endpoint-with-cis-benchmark

9
from killvxk/cybersecurity-skills-zh

使用 CIS Benchmark 建议对 Ubuntu、RHEL 和 CentOS 的 Linux 端点进行加固, 以减少攻击面、执行安全基线并满足合规要求。适用于部署新 Linux 服务器、修复审计发现 或为 Linux 基础设施建立安全基线的场景。

hardening-docker-containers-for-production

9
from killvxk/cybersecurity-skills-zh

对生产环境 Docker 容器进行安全加固,涵盖符合 CIS Docker Benchmark v1.8.0 的安全最佳实践,旨在最小化攻击面、防止权限提升,并在 Docker daemon、镜像、容器和运行时配置中强制执行最小权限原则

exploiting-oauth-misconfiguration

9
from killvxk/cybersecurity-skills-zh

在安全评估期间识别并利用 OAuth 2.0 和 OpenID Connect 错误配置,包括重定向 URI 操纵、令牌泄漏和授权码窃取。