一、PVE 权限体系概述

Proxmox VE 采用基于角色(Role)和对象路径(Path)的权限管理系统。每条权限策略可以表示为三元组:(路径,用户/组,角色)

简单理解这三个核心概念:

概念说明
用户 (User)登录系统的个体,格式为 用户名@认证域
组 (Group)用户的集合,推荐将权限授予组而非单个用户,更易于维护
角色 (Role)一组权限的集合,权限不能直接分配给用户,必须通过角色授予
路径 (Path)对象在树状结构中的位置,如 /(根)、/vms/storage/local

关键规则:用户权限始终覆盖组权限;NoAccess 角色优先级最高,会覆盖同一路径下的其他权限。上级路径的权限会默认继承到下级路径


二、用户管理

2.1 用户命名与认证域

PVE 用户由两部分组成:<用户ID>@<认证域> 。支持的认证域包括

  • Linux PAM:使用系统本地账户

  • PVE Auth Server:PVE 内置认证(默认)

  • LDAP / Active Directory:企业目录服务

  • OpenID Connect:OIDC 单点登录

用户信息存储在 /etc/pve/user.cfg,密码不在此文件中存储

2.2 创建用户(Web GUI)

  1. 登录 PVE Web 界面

  2. 左侧选择 DatacenterPermissions(权限)选项卡

  3. 点击 AddUser

  4. 填写:

    • User name:用户名

    • Realm:选择认证域

    • Password:设置密码

    • 可选:姓名、邮箱、组、过期时间、启用/禁用

2.3 创建用户(命令行)

bash

pveum useradd testuser@pve -password

系统会提示输入密码

2.4 用户状态说明

用户被禁用、删除或超过过期时间后,将无法登录新会话,但已启动的任务(如终端会话)不会自动终止


三、角色管理

3.1 预定义角色

PVE 预置了多个常用角色

角色说明
Administrator拥有所有权限
NoAccess无任何权限(用于拒绝访问)
PVEAdmin大部分操作权限,但无 Sys.ModifySys.PowerMgmtRealm.Allocate
PVEAuditor只读权限
PVEVMAdmin管理虚拟机
PVEVMUser查看、备份、电源管理、控制台访问虚拟机
PVEDatastoreAdmin创建和分配备份空间及模板
PVEDatastoreUser分配备份空间、查看存储
PVEUserAdmin用户管理
PVETemplateUser查看和克隆模板

3.2 创建自定义角色

Web GUI 方式

  1. Datacenter → Permissions → Roles 选项卡

  2. 点击 Create

  3. 设置角色名称,从权限下拉框中选择所需权限

命令行方式

bash

创建仅含虚拟机电源管理和控制台权限的角色

pveum roleadd PVE_Power-only -privs “VM.PowerMgmt VM.Console”

创建仅含节点电源管理权限的角色

pveum roleadd Sys_Power-only -privs “Sys.PowerMgmt Sys.Console”

3.3 常见权限列表

节点/系统权限

  • Sys.PowerMgmt:节点电源管理(启动/停止/重启)

  • Sys.Console:访问节点控制台

  • Sys.Modify:修改节点网络配置

  • Sys.Audit:查看节点状态/配置

  • User.Modify:创建/修改/删除用户

  • Group.Allocate:创建/修改/删除组

虚拟机权限

  • VM.Allocate:创建/删除虚拟机

  • VM.PowerMgmt:电源管理

  • VM.Console:访问控制台

  • VM.Backup:备份/恢复

  • VM.Clone:克隆虚拟机

  • VM.Config.Disk:管理虚拟硬盘

  • VM.Config.Network:管理虚拟网卡

  • VM.Snapshot:创建/删除快照

存储权限

  • Datastore.Allocate:创建/修改/删除存储

  • Datastore.AllocateSpace:分配存储空间

  • Datastore.AllocateTemplate:上传模板/ISO

  • Datastore.Audit:查看/浏览存储


四、权限分配(ACL)

4.1 Web GUI 分配权限

  1. 左侧选择 Datacenter

  2. 点击 Permissions 选项卡

  3. 点击 AddUser Permission(或 Group Permission)

  4. 填写:

    • Path:对象路径,如 /(根)、/vms/100(特定虚拟机)

    • User/Group:选择用户或组

    • Role:选择角色

4.2 命令行分配权限

bash

为用户在根路径授予 PVEVMAdmin 角色

pveum aclmod / -user testuser@pve -role PVEVMAdmin

为组在特定虚拟机路径授予权限

pveum aclmod /vms/100 -group vm-admins -role PVEVMAdmin


五、进阶功能

5.1 资源池 (Resource Pools)

资源池是虚拟机、容器和存储设备的集合。通过将权限赋予资源池,可以一次性管理多个资源的访问权限,无需逐个设置

5.2 API Token

API Token 允许第三方系统无状态访问 PVE REST API:

  • 可为用户生成 Token,并单独设置权限和过期时间

  • Token 被泄露时可单独吊销,不影响用户本身

  • 两种模式

    • 权限分离(默认):Token 需通过 ACL 单独授权,有效权限 = 用户权限 ∩ Token 权限

    • 完全权限:Token 拥有与用户相同的权限,仅在确实需要时使用

  • Token 值只在创建时显示一次,请务必保存


六、实践案例:创建备份专用用户

生产环境中应遵循最小权限原则,创建专用用户而非使用 root:

  1. 创建用户backupuser@pve

  2. 分配权限(路径设为 /):

    • PVEVMAdmin:虚拟机管理权限(快照和配置访问)

    • PVESDNUser:SDN 配置只读

    • PVEDatastoreAdmin:读取存储内容、分配空间

  3. 如需限制带宽,额外添加 Sys.Modify 权限

测试环境可临时使用 PVEAdminAdministrator 角色简化配置


七、最佳实践总结

  1. 最小权限原则:只授予用户完成工作所需的最少权限

  2. 使用组管理权限:将权限授予组而非单个用户,便于维护

  3. 避免直接使用 root:创建专用管理员账号,通过 sudo 提权

  4. 利用资源池:对同类资源统一授权

  5. 审计与定期检查:定期审查权限配置,移除过期或多余权限