Skip to content

Docker 命令之 --privileged 参数

Docker 的--privileged 参数用于赋予容器宿主机级别的 root 权限,使容器内进程能够绕过大部分安全限制,直接访问宿主机的硬件设备、内核功能等。以下是其核心要点:

核心作用

  • 权限提升
    • 默认情况下,容器内的 root 用户仅拥有普通用户权限,无法执行系统级操作(如挂载文件系统、访问设备等)。
    • 启用--privileged 后,容器内的 root 用户等同于宿主机的 root,可执行如 mount、修改内核模块等操作。
  • 设备与资源访问
    • 容器可直接访问宿主机的所有设备(如/dev 目录下的设备文件)。
    • 支持在容器内启动嵌套的 Docker 容器(需结合其他配置)。

使用场景

启用特权模式运行 Ubuntu 容器

shell
docker run -it --privileged=true -v /宿主机目录:/容器目录 ubuntu

验证权限:在容器内执行挂载操作(需特权)

shell
mount /dev/sda1 /mnt

访问硬件设备

例如操作 USB 设备、GPU 等,需直接访问宿主机设备文件。

运行需内核权限的服务

如某些网络工具(iptables)、存储服务等,需内核级权限。

安全风险与替代方案

风险提示

  • 容器内恶意进程可能直接影响宿主机,导致系统崩溃或数据泄露。
  • 生产环境应尽量避免使用,仅在绝对必要时启用。

更安全的替代方案

  • 细粒度权限控制:通过--cap-add 添加特定权限(如 SYS_ADMIN)而非完全特权。
    • docker run --cap-add=SYS_ADMIN ...
  • 设备白名单:使用--device 仅授权访问特定设备。
    • docker run --device=/dev/sda ...
  • 用户命名空间隔离:通过--userns=host 限制容器用户权限。

总结建议

优先使用替代方案:避免完全开放特权,按需分配权限。

严格审计:仅在测试或隔离环境中使用--privileged,并监控容器行为。