数字化技能提升教程,数字化时代生存宝典

Docker Socket安全教程

浏览:117

Docker Socket通常位于:

/var/run/docker.sock

它是Docker客户端与守护进程通信的入口。容器如果能够访问该Socket,往往可以创建高权限容器、挂载宿主机目录,最终获得接近Root级别的控制能力。

一、检查哪些容器挂载了Socket

docker inspect \
  --format '{{.Name}} {{range .Mounts}}{{.Source}}:{{.Destination}} {{end}}' \
  $(docker ps -q)

也应检查Compose文件中是否存在:

volumes:
  - /var/run/docker.sock:/var/run/docker.sock

二、不要把只读挂载当成完整保护

下面的写法仍然存在风险:

- /var/run/docker.sock:/var/run/docker.sock:ro

文件系统只读挂载并不能限制Docker API执行创建容器、挂载目录等管理操作,因此不应把它视为安全隔离。

三、减少Socket暴露

建议采取以下措施:

  • 不需要Docker管理能力的容器不要挂载Socket
  • 为管理工具使用独立主机或受限环境
  • 评估使用Docker Socket Proxy限制API路径
  • 使用Rootless Docker降低守护进程权限
  • 不向网络开放未加密的2375端口
  • 远程API必须使用TLS和访问控制
  • 定期检查拥有docker用户组权限的账号

需要注意,加入docker用户组通常等同于获得较高的宿主机管理权限。

四、发现异常挂载怎么处理

先确认容器用途和依赖关系,再在测试环境移除挂载。不要直接修改生产Compose文件后重建容器,以免监控、反向代理或自动部署功能中断。

相关文章
猜你喜欢