保障docker守护进程安全的核心是严格控制访问权限、禁用不安全远程方式、强制tls双向认证,并结合selinux、用户命名空间和no-new-privileges等系统级策略加固。

保障 Docker 守护进程管理接口安全,核心是限制谁可以连、怎么连、能做什么。默认的 /var/run/docker.sock 是高权限入口,一旦暴露或配置宽松,等于把宿主机控制权交出去。关键不在“能不能用”,而在“只让该用的人、用该用的方式、做该做的事”。
限制本地套接字访问权限
Docker 守护进程默认通过 UNIX 套接字通信,这是最常用也最容易被忽视风险的通道:
- 将套接字文件属组设为 docker 组,并严格限制权限:
sudo chown root:docker /var/run/docker.sock && sudo chmod 660 /var/run/docker.sock - 确保只有明确需要操作 Docker 的用户加入
docker组,避免泛化授权:sudo usermod -aG docker $USER(执行后需重新登录) - 禁止普通用户直接读写该套接字——不加组、不给权限,就完全无法调用
docker命令
禁用不安全的远程访问方式
除非必要,不要开启裸 TCP 端口(如 -H tcp://0.0.0.0:2375),这等于对外暴露 root 级别 API:
- 检查
/etc/docker/daemon.json中是否含"hosts"字段指向tcp://;如有,立即删除或注释 - 确认 systemd 服务未在启动参数中硬编码
-H tcp://(查看systemctl cat docker) - 若必须远程管理,只启用 TLS 加密的 TCP(
tcp://0.0.0.0:2376),且强制验证客户端证书
启用并强制 TLS 双向认证
TLS 不只是加密传输,更是身份认证手段。单向 TLS(仅服务端证书)仍允许任意客户端连接,必须启用双向验证:
- 在
daemon.json中配置完整 TLS 参数:"tls": true, "tlsverify": true, "tlscacert": "/etc/docker/CA/ca.pem", "tlscert": "/etc/docker/CA/server-cert.pem", "tlskey": "/etc/docker/CA/server-key.pem" - 客户端连接时必须提供有效证书:
docker --tlsverify --tlscacert=ca.pem --cert=client-cert.pem --key=client-key.pem -H tcp://host:2376 info - CA 证书应由私有根签发,不使用公共 CA;客户端证书按角色/人员单独签发,便于吊销
结合系统级访问控制加固
守护进程本身的安全策略需与操作系统层协同:
- 启用 SELinux 或 AppArmor:在
daemon.json中设"selinux-enabled": true,或为容器加载定制 profile(如--security-opt apparmor=docker-restricted) - 启用用户命名空间重映射:
"userns-remap": "default",使容器内 root 映射为宿主机非 root 用户,大幅降低逃逸危害 - 设置
"no-new-privileges": true,阻止容器内进程通过 setuid 等方式提权











