docker client与daemon通信必须启用tls双向认证并禁用明文tcp接口。需生成独立ca证书签发服务端和客户端证书,配置daemon.json仅监听unix:///var/run/docker.sock,限制docker组成员,配合opa插件实现细粒度鉴权与siem日志审计。

默认情况下,Docker Client 与 Daemon 之间使用 Unix socket(/var/run/docker.sock)或未加密的 TCP 连接通信,这种明文通道极易被本地提权攻击者劫持、嗅探甚至伪造指令,直接获得宿主机容器控制权。构建企业级防御屏障,核心是将通信链路从“裸奔”升级为“端到端可信加密通道”,并辅以身份强认证与访问最小化控制。
启用 TLS 双向认证,切断中间人攻击路径
仅开启 TLS 加密(单向)不足以抵御恶意客户端接入;必须强制启用双向证书认证(mTLS),确保 Client 和 Daemon 互相验证身份。
- 生成独立 CA 根证书,并用其分别签发 Server 端(Daemon)和 Client 端证书,严禁复用同一证书
- Daemon 配置中设置
"tlsverify": true、"tlscacert"(CA 公钥)、"tlscert"(Server 证书)、"tlskey"(Server 私钥) - Client 端需配置环境变量
DOCKER_TLS_VERIFY=1、DOCKER_CERT_PATH指向含ca.pem、cert.pem、key.pem的目录 - 禁止使用
--tls=false或跳过证书校验的临时绕过方式
关闭不安全监听接口,收缩暴露面
Docker Daemon 默认只监听本地 Unix socket,但若配置了 -H tcp://0.0.0.0:2375 等非加密 TCP 接口,等于将容器管理权直接暴露在网段中。
使用 Python 脚本下载 Docker 镜像并打包为 tar 文件。用户说“下载镜像”“拉取镜像”“pull xxx”“帮我下载 nginx 镜像”等时触发。支持 SOCKS5 代理直连(推荐)和国内镜像站加速两种模式。
- 检查
/etc/docker/daemon.json,确认"hosts"字段仅保留"unix:///var/run/docker.sock" - 如确需远程管理,必须配合 TLS,并绑定到内网特定 IP(如
"tcp://10.10.20.5:2376"),禁用 0.0.0.0 - 配合防火墙(如
iptables或nftables)限制 2376 端口仅允许可信运维终端 IP 访问
实施细粒度访问控制与审计闭环
即使通信加密,也需防止合法证书被滥用。应叠加权限管控与行为留痕机制。
- 为不同角色(如 CI/CD 系统、运维平台、开发调试)签发独立 Client 证书,并在 CA 签名时嵌入
OU=ci、OU=ops等组织单元字段,便于后续策略识别 - 通过 Docker 的
authz-plugin(如 OPA-Docker 插件)实现动态鉴权,例如:禁止非 prod 环境证书执行docker exec -it或挂载敏感路径 - 开启 Daemon 日志级别为
debug,并将日志统一接入 SIEM 系统,重点审计POST /containers/create、POST /exec、PUT /containers/*/start等高危操作
加固宿主机 socket 文件权限,防本地越权
Unix socket 是最常用通信方式,其文件权限不当会直接导致低权限用户接管 Docker 控制权。
- 确认
/var/run/docker.sock所属组为docker,权限为srw-rw----(即 660) - 严格管控
docker用户组成员:仅加入必要运维账号,禁止开发账号、CI 服务账号加入该组 - 在 SELinux 启用环境中,确保 socket 上下文为
container_runtime_t,防止类型混淆绕过 - 考虑使用
userns-remap配合 socket 权限,进一步隔离 UID 映射边界










