温馨提示×

ubuntu docker怎么权限管理

小樊
43
2026-09-19 11:54:48
栏目: 智能运维

在 Ubuntu 上使用 Docker 时,权限管理主要涉及 Linux 用户权限、Docker 守护进程权限、容器内部权限、以及安全加固 几个方面。下面系统地讲一下。


一、Docker 默认权限模型(最重要)

1. Docker 守护进程拥有 root 权限

Docker daemon(dockerd默认以 root 运行
能执行 docker 命令的人 = 拥有 root 权限

sudo docker run hello-world

⚠️ 把用户加入 docker 组,等于给该用户 root 权限


二、用户级权限管理(最常见)

1. 把用户加入 docker 组(免 sudo)

sudo usermod -aG docker $USER
newgrp docker

验证:

docker ps

⚠️ 风险:

  • docker 组用户可挂载 //etc
  • 可提权为 root

✅ 适合:

  • 个人开发机
  • 可信用户

❌ 不适合:

  • 多用户服务器

三、限制 Docker 权限(生产推荐)

方案 1:rootless Docker(推荐)

Docker 以普通用户运行,不使用 root

dockerd-rootless-setuptool.sh install

特点:

  • 无 root 权限
  • 安全性高
  • 适合云服务器

限制:

  • 部分网络、存储驱动不支持

方案 2:限制 docker 命令权限(sudoers)

只允许特定命令:

sudo visudo
devuser ALL=(root) NOPASSWD: /usr/bin/docker ps
devuser ALL=(root) NOPASSWD: /usr/bin/docker logs *

四、容器内部权限管理

1. 不要用 root 运行容器

docker run -u 1000:1000 nginx

或 Dockerfile:

USER appuser

2. 只读根文件系统

docker run --read-only nginx

3. 限制能力(capabilities)

docker run --cap-drop ALL --cap-add NET_BIND_SERVICE nginx

4. 禁止特权模式

❌ 危险:

docker run --privileged

✅ 生产禁止


五、文件系统与挂载权限

1. 挂载宿主机目录注意权限

docker run -v /data:/data ubuntu

容器内用户 UID 需匹配宿主机:

ls -n /data

2. 避免挂载敏感目录

❌ 禁止:

-v /:/host
-v /etc:/etc

六、Docker Compose 权限管理

services:
  app:
    user: "1000:1000"
    read_only: true
    cap_drop:
      - ALL
    security_opt:
      - no-new-privileges:true

七、企业级权限方案(进阶)

方案 说明
Docker + sudo 简单
Rootless Docker 安全
Podman 无 daemon,天然非 root
Kubernetes RBAC 集群级权限
SELinux / AppArmor 系统级隔离

八、安全检查清单 ✅

  • [ ] 不使用 --privileged
  • [ ] 不用 root 运行容器
  • [ ] 限制 docker 组用户
  • [ ] 生产用 rootless 或 K8s
  • [ ] 定期更新 Docker

如果你愿意,可以告诉我:

  • 个人开发 / 服务器 / 生产环境
  • 是否 多用户
  • 是否使用 Docker Compose / K8s

我可以给你一套最适合你的权限方案

0