验证docker engine安全性需四步:检查daemon启动参数是否含高风险选项;确认daemon.json启用icc=false、userns-remap等安全配置;实测命名空间隔离、用户映射、cgroups限制是否生效;核查版本无高危cve、二进制签名完整、日志与api访问受控。
验证 docker engine 的安全性与完整性,不能只看“能不能跑”,而要从运行机制可信、配置合规、组件完整、行为受控
检查守护进程启动参数与运行时安全配置
Docker Engine 的安全性首先体现在 daemon 启动方式上。它是否以最小权限运行?是否禁用不安全选项?
- 执行 ps aux | grep dockerd,确认没有出现 --insecure-registry、--host=0.0.0.0:2375 或 --iptables=false 等高风险参数
- 检查 /etc/docker/daemon.json 是否启用基础防护:确保包含 "icc": false(禁用容器间默认通信)、"userns-remap": "default"(启用用户命名空间映射)、"no-new-privileges": true(阻止提权)
- 若使用 systemd,检查 /lib/systemd/system/docker.service 中的 ExecStart 行,确认未绕过安全限制(如硬编码 --privileged)
验证核心安全机制是否实际生效
配置写了不等于起效。需通过实测确认隔离、权限、网络等关键机制真实可用:
- 命名空间隔离测试:启动一个容器 docker run -it --rm alpine sh,在其中执行 ps aux 和 ip addr,确认看不到宿主机进程和网卡
- 用户命名空间映射验证:运行 docker info | grep "Userns",输出应为 Userns: enabled;再进容器执行 id,看到 uid=0 但宿主机上对应的是非 root UID(如 100000+)
- cgroups 限制生效检查:执行 docker run -it --rm --memory=100m --cpus=0.5 alpine free -h,观察内存显示是否被限制在约 100MB 范围内
确认镜像与运行时组件来源可信且未被篡改
Engine 自身及其依赖是否来自官方渠道、签名完整、版本无已知漏洞:
- 运行 docker version --format '{{.Server.Version}}' 获取服务端版本,对照 Docker 官方发布日志 确认该版本无 Critical/High 级 CVE(如 CVE-2024-23651、CVE-2023-45865)
- 检查二进制签名:apt list --installed | grep docker(Ubuntu)或 rpm -V docker-ce(CentOS/RHEL),验证包文件未被修改
- 查看 docker info 输出中的 Security Options 行,确认列出 name=seccomp、name=selinux 或 name=apparmor(取决于系统),说明强制访问控制模块已加载
审计日志与 API 访问控制是否启用
安全不仅是“防住”,更是“看得见”。Engine 必须能记录关键操作并限制未授权调用:
- 确认日志驱动已配置:检查 /etc/docker/daemon.json 是否含 "log-driver": "json-file" 或更安全的 "syslog",并设置 "log-opts": {"max-size": "10m", "max-file": "3"}
- 验证 Docker Socket 权限:ls -l /var/run/docker.sock 应显示属组为 docker,权限为 srw-rw----;普通用户仅在 docker 组内才可访问
- 测试 API 保护:临时关闭 TLS,尝试用 curl 访问 http://localhost:2375/version —— 若返回结果,说明非加密端口仍开放,存在严重风险











