首页/云/Docker 容器速查/docker 组成员等效 root 的审计
资源与安全50 条

docker 组成员等效 root 的审计

加入 docker 组等于获得宿主等效权限:组成员可启动特权容器挂载宿主目录;用 getent 定期审计名单,能不用就不用。

Docker 容器速查云更新于 2026-10-13

加入 docker 组等于拿到宿主 root

守护进程通过 /var/run/docker.sock 提供接口,这个套接字通常属于 root,组的权限给到 docker。能访问该套接字的人可以创建一个挂载宿主根目录的特权容器,进而在宿主上以 root 身份操作文件。也就是说,把账号加入 docker 组与直接授予宿主 root 权限没有实质差别。多用户、多人维护的机器上,这份名单需要定期核对。

基本信息

权限模型docker.sock 属主 root、属组 docker,权限 0660
审计命令getent group docker,并与实际需登录的账号清单比对
等效性可创建特权容器并挂载宿主目录,等同宿主 root
替代方案rootless 模式、受控的 sudo 规则、socket 代理

典型使用场景

  • 权限评审:确认成员名单与运维授权记录一致
  • 人员离职清理:把不再需要的账号从组里移除
  • 多用户机器加固:按需授权,避免人人都能控制宿主
  • 合规核查:把组成员清单纳入定期巡检项
  • 替代方案评估:为开发人员提供受限通道而不是直接给组权限

审计与清理

审计与清理
# 查看当前组成员
getent group docker

# 逐个确认成员身份与必要性
for u in $(getent group docker | cut -d: -f4 | tr ',' ' '); do echo "$u: $(id -nG "$u" 2>/dev/null)"; done

# 移除不再需要的成员(需该用户重新登录后生效)
sudo gpasswd -d 用户名 docker

# 查看套接字权限,确认没有放宽
ls -l /var/run/docker.sock

授权方式对照

方式权限范围主要风险
加入 docker 组等效宿主 root成员失陷即整机失陷
受控 sudo 执行 docker按命令粒度审计sudoers 规则需要维护
rootless 模式用户命名空间内运行隔离更强,部分功能受限
socket 代理只放行白名单接口需要额外组件与配置
从组里移除成员后,该用户已登录的会话仍然保留原组身份,需要重新登录才彻底生效。
把开发环境与生产环境分机器部署,是降低这类权限风险最简单有效的做法。

易错点

  • 图省事把开发者直接加组:在多用户机器上等于放弃容器与宿主的边界,优先选 rootless 或代理通道
  • 移除组后不提醒重新登录:旧会话仍持有权限,清理不彻底
  • 只看组成员不看套接字权限:套接字被放宽到人人可读写时,组名单再干净也没有意义
  • 忘记核对服务账号:有的自动化账号在组里长期存在且无人维护,定期清理同样重要

数据来源与参考

  • Docker 官方文档:Docker daemon attack surface(docs.docker.com/engine/security)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌