Proxmox VE 支持多种身份验证源,例如 Linux PAM、集成的 Proxmox VE 身份验证服务器、LDAP、Microsoft Active Directory 和 OpenID Connect。
通过对所有对象(VM、存储、节点等)使用基于角色的用户和权限管理,可以定义粒度访问。
目录
Toggle14.1. 用户
Proxmox VE 将用户属性存储在/etc/pve/user.cfg中。密码不存储在这里;相反,用户与下面描述的身份验证领域相关联 。因此,用户通常在内部通过其用户名和领域进行标识,格式为<userid>@<realm>。
该文件中的每个用户条目包含以下信息:
-
名
-
姓
-
电子邮件地址
-
团体会员资格
-
可选的到期日期
-
关于该用户的评论或注释
-
该用户是启用还是禁用
-
可选的双因素身份验证密钥
当您禁用或删除用户时,或者如果设置的到期日期已过去,则该用户将无法登录新会话或启动新任务。该用户已启动的所有任务(例如,终端会话)不会因任何此类事件而自动终止。 |
14.1.1. 系统管理员
系统的 root 用户始终可以通过 Linux PAM 领域登录,并且是不受限制的管理员。该用户无法删除,但属性仍然可以更改。系统邮件将发送到分配给该用户的电子邮件地址。
14.2. 团体
每个用户可以是多个组的成员。组是组织访问权限的首选方式。您应该始终向组而不是单个用户授予权限。这样您将获得更易于维护的访问控制列表。
14.3。API令牌
API 令牌允许从另一个系统、软件或 API 客户端对 REST API 的大部分部分进行无状态访问。可以为个人用户生成令牌,并可以授予单独的权限和到期日期,以限制访问的范围和持续时间。如果 API 令牌遭到泄露,可以将其撤销,而无需禁用用户本身。
API 令牌有两种基本类型:
-
分离的权限:需要使用 ACL 为令牌授予显式访问权限。其有效权限是通过用户和令牌权限相交来计算的。
-
完全权限:令牌的权限与关联用户的权限相同。
令牌值仅在令牌生成时显示/返回一次。以后无法通过 API 再次检索它! |
要使用 API 令牌,请在发出 API 请求时将 HTTP 标头授权设置为PVEAPIToken=USER@REALM!TOKENID=UUID形式的显示值,或参阅 API 客户端文档。
14.4. 资源池
14.5。身份验证领域
由于 Proxmox VE 用户只是某些外部领域中现有用户的对应用户,因此必须在/etc/pve/domains.cfg中配置这些领域。以下领域(身份验证方法)可用:
- Linux PAM 标准身份验证
-
Linux PAM 是一个用于系统范围用户身份验证的框架。这些用户是使用adduser等命令在主机系统上创建的。如果 Proxmox VE 主机系统上存在 PAM 用户,则可以将相应的条目添加到 Proxmox VE,以允许这些用户通过其系统用户名和密码登录。
- Proxmox VE 身份验证服务器
-
这是一个类似 Unix 的密码存储,它将散列密码存储在 /etc/pve/priv/shadow.cfg中。密码使用 SHA-256 哈希算法进行哈希处理。对于小规模(甚至中型)安装来说,这是最方便的领域,用户不需要访问 Proxmox VE 之外的任何内容。在这种情况下,用户完全由 Proxmox VE 管理,并且能够通过 GUI 更改自己的密码。
- LDAP
-
LDAP(轻量级目录访问协议)是一种开放的跨平台协议,用于使用目录服务进行身份验证。OpenLDAP 是 LDAP 协议的流行开源实现。
- 微软活动目录(AD)
-
Microsoft Active Directory (AD) 是 Windows 域网络的目录服务,并支持作为 Proxmox VE 的身份验证领域。它支持 LDAP 作为身份验证协议。
- OpenID 连接
-
OpenID Connect 作为 OATH 2.0 协议之上的身份层实现。它允许客户端根据外部授权服务器执行的身份验证来验证用户的身份。
14.5.1。Linux PAM 标准身份验证
由于Linux PAM对应主机系统用户,因此每个允许登录的节点上都必须存在一个系统用户。用户使用其常用的系统密码进行身份验证。该领域是默认添加的且无法删除。在可配置性方面,管理员可以选择要求从领域登录进行双因素身份验证,并将领域设置为默认身份验证领域。
14.5.2. Proxmox VE 身份验证服务器
Proxmox VE 身份验证服务器领域是一个简单的类 Unix 密码存储。该领域是默认创建的,与 Linux PAM 一样,唯一可用的配置项是能够要求该领域的用户进行两步身份验证,并将其设置为默认登录领域。
与其他 Proxmox VE 领域类型不同,用户完全通过 Proxmox VE 创建和身份验证,而不是针对另一个系统进行身份验证。因此,您需要在创建此类用户时设置密码。
14.5.3。LDAP
您还可以使用外部 LDAP 服务器进行用户身份验证(例如 OpenLDAP)。在此领域类型中,将使用用户属性名称 ( user_attr ) 字段中指定的用户名属性在基本域名 ( base_dn )下搜索用户。
可以配置服务器和可选的后备服务器,并且可以通过 SSL 对连接进行加密。此外,还可以为目录和组配置过滤器。过滤器允许您进一步限制领域的范围。
例如,如果用户通过以下 LDIF 数据集表示:
# ldap-test.com 人员的 user1 dn: uid=user1,ou=People,dc=ldap-test,dc=com 对象类别:顶部 对象类:人 对象类:organizationalPerson 对象类:inetOrgPerson 用户ID:用户1 cn:测试用户1 sn:测试人员 描述:这是第一个测试用户。
基本域名将为ou=People,dc=ldap-test,dc=com,用户属性将为uid。
如果 Proxmox VE 在能够查询和验证用户之前需要验证(绑定)到 LDAP 服务器,则可以通过/etc/pve/domains.cfg中的bind_dn属性配置绑定域名。然后,其密码必须存储在/etc/pve/priv/ldap/<realmname>.pw中 (例如/etc/pve/priv/ldap/my-ldap.pw)。该文件应包含一行原始密码。
要验证证书,您需要设置capath。您可以将其直接设置为 LDAP 服务器的 CA 证书,也可以设置为包含所有受信任 CA 证书的系统路径 ( /etc/ssl/certs )。此外,您还需要设置验证选项,这也可以通过 Web 界面完成。
LDAP 服务器领域的主要配置选项如下:
-
领域( realm ):Proxmox VE 用户的领域标识符
-
基本域名(base_dn):搜索用户的目录
-
用户属性名称( user_attr ):包含用户登录时使用的用户名的 LDAP 属性
-
服务器( server1 ):托管 LDAP 目录的服务器
-
备用服务器( server2 ):可选的备用服务器地址,以防主服务器无法访问
-
端口(port):LDAP服务器监听的端口
为了允许特定用户使用 LDAP 服务器进行身份验证,您还必须从 Proxmox VE 服务器将他们添加为该领域的用户。这可以通过同步自动执行。 |
14.5.4。微软活动目录(AD)
要将 Microsoft AD 设置为领域,需要指定服务器地址和身份验证域。Active Directory 支持大多数与 LDAP 相同的属性,例如可选的后备服务器、端口和 SSL 加密。此外,配置后,用户可以通过同步操作自动添加到 Proxmox VE 。
与 LDAP 一样,如果 Proxmox VE 在绑定到 AD 服务器之前需要进行身份验证,则必须配置绑定用户( bind_dn ) 属性。默认情况下,Microsoft AD 通常需要此属性。
Microsoft Active Directory 的主要配置设置是:
-
领域( realm ):Proxmox VE 用户的领域标识符
-
域(domain):服务器的AD域
-
服务器( server1 ):服务器的 FQDN 或 IP 地址
-
备用服务器( server2 ):可选的备用服务器地址,以防主服务器无法访问
-
端口(port):Microsoft AD服务器监听的端口
Microsoft AD 通常检查用户名等值,不区分大小写。要使 Proxmox VE 执行相同操作,您可以 通过在 Web UI 中编辑领域或使用 CLI(使用领域 ID更改 ID)来禁用默认区分大小写选项: pveum 领域修改 ID –case-sensitive 0 |
14.5.5。同步基于 LDAP 的领域
可以自动同步基于 LDAP 的领域(LDAP 和 Microsoft Active Directory)的用户和组,而不必手动将它们添加到 Proxmox VE。您可以从 Web 界面的身份验证面板的“添加/编辑”窗口或通过pveum 领域添加/修改命令访问同步选项 。然后,您可以从 GUI 的身份验证面板或使用以下命令执行同步操作:
pveum 领域同步 <领域>
用户和组同步到集群范围的配置文件 /etc/pve/user.cfg。
属性到属性
如果同步响应包含用户属性,它们将被同步到user.cfg中匹配的用户属性中。例如:名字或 姓氏。
如果属性名称与 Proxmox VE 属性不匹配,您可以使用sync_attributes 选项在配置中设置自定义字段到字段映射。
如果任何内容消失,如何处理这些属性可以通过同步选项进行控制,请参见下文。
同步配置
用于同步基于 LDAP 的领域的配置选项可以在“添加/编辑”窗口的“同步选项”选项卡中找到 。
配置选项如下:
-
绑定用户(bind_dn):指用于查询用户和组的LDAP帐户。该帐户需要访问所有所需的条目。如果设置了,则通过绑定的方式进行搜索;否则,搜索将以匿名方式进行。用户必须是完整的 LDAP 格式的专有名称 (DN),例如cn=admin,dc=example,dc=com。
-
组名属性 (group_name_attr):代表用户的组。仅同步符合user.cfg通常字符限制的条目。组与附加到名称的-$realm进行同步,以避免命名冲突。请确保同步不会覆盖手动创建的组。
-
用户类别( user_classes ):与用户关联的对象类别。
-
组类( group_classes ):与组关联的对象类。
-
电子邮件属性:如果基于 LDAP 的服务器指定了用户电子邮件地址,则也可以通过在此处设置关联属性将这些地址包含在同步中。在命令行中,这可以通过 –sync_attributes参数来实现。
-
用户过滤器( filter ):用于针对特定用户的进一步过滤选项。
-
组过滤器( group_filter ):用于针对特定组的进一步过滤选项。
过滤器允许您创建一组附加匹配条件,以缩小同步范围。有关可用 LDAP 过滤器类型及其用法的信息,请访问ldap.com。 |
同步选项
这些选项可以在同步之前设置为参数,也可以通过领域选项sync-defaults-options设置为默认值。
同步的主要选项有:
-
范围( scope ):要同步的范围。它可以是用户、 组或两者。
-
启用新用户( enable-new ):如果设置,新同步的用户将被启用并可以登录。默认值为true。
-
删除消失(remove-vanished):这是一个选项列表,激活后,确定它们未从同步响应返回时是否被删除。选项有:
-
ACL ( acl):删除同步响应中未返回的用户和组的 ACL。这通常与Entry一起有意义 。
-
条目( entry ):当同步响应中未返回条目(即用户和组)时,将其删除。
-
属性( properties ):删除同步响应中的用户不包含这些属性的条目的属性。这包括所有属性,甚至是那些从未由同步设置的属性。令牌和启用标志除外,即使启用此选项,它们也会保留。
-
-
预览(试运行):没有数据写入配置。如果您想查看哪些用户和组将同步到 user.cfg ,这非常有用。
保留字符
某些字符是保留的(请参阅RFC2253),如果不正确转义,则不能轻易地在 DN 中的属性值中使用它们。
以下字符需要转义:
-
开头或结尾处有空格 ( )
-
开头的 数字符号 ( # )
-
逗号 ( , )
-
加号 ( + )
-
双引号 ( “ )
-
正斜杠 ( / )
-
尖括号 ( <> )
-
分号 ( ; )
-
等号 ( = )
要在 DN 中使用此类字符,请将属性值用双引号引起来。例如,要与具有 CN(通用名称)示例 User 的用户绑定,请使用 CN=”Example, User”,OU=people,DC=example,DC=com作为bind_dn的值。
这适用于base_dn、bind_dn和group_dn属性。
带有冒号和正斜杠的用户无法同步,因为这些是用户名中的保留字符。 |
14.5.6。OpenID 连接
主要的 OpenID Connect 配置选项有:
-
颁发者 URL ( Issuer-url ):这是授权服务器的 URL。Proxmox 使用 OpenID Connect Discovery 协议自动配置更多详细信息。
虽然可以使用未加密的http:// URL,但我们强烈建议使用加密的https://连接。
-
领域( realm ):Proxmox VE 用户的领域标识符
-
客户端 ID ( client-id ):OpenID 客户端 ID。
-
客户端密钥( client-key ):可选的 OpenID 客户端密钥。
-
自动创建用户( autocreate ):如果用户不存在,则自动创建用户。虽然身份验证是在 OpenID 服务器上完成的,但所有用户仍然需要 Proxmox VE 用户配置中的条目。您可以手动添加它们,也可以使用自动创建选项自动添加新用户。
-
用户名声明( username-claim ):用于生成唯一用户名(主题、用户名或电子邮件)的 OpenID 声明。
用户名映射
OpenID Connect 规范定义了一个名为subject的唯一属性( OpenID 术语中的声明) 。默认情况下,我们使用此属性的值来生成 Proxmox VE 用户名,只需添加 @和领域名称:${subject}@${realm}。
不幸的是,大多数 OpenID 服务器使用随机字符串作为subject,例如 DGH76OKH34BNG3245SB,因此典型的用户名看起来像 DGH76OKH34BNG3245SB@yourrealm。虽然独特,但人类很难记住这种随机字符串,因此几乎不可能将真实用户与此联系起来。
用户名声明设置允许您使用其他属性进行用户名映射。如果 OpenID Connect 服务器提供该属性并保证其唯一性,则首选将其设置为用户名。
另一种选择是使用email,它也会产生人类可读的用户名。同样,仅当服务器保证此属性的唯一性时才使用此设置。
例子
以下是使用 Google 创建 OpenID 领域的示例。您需要将–client-id和–client-key替换为 Google OpenID 设置中的值。
pveum 领域添加 myrealm1 --type openid --issuer-url https://accounts.google.com --client-id XXXX --client-key YYYY --username-claim email
上述命令使用–username-claim email,以便 Proxmox VE 端的用户名看起来像[email protected]@myrealm1。
Keycloak ( https://www.keycloak.org/ ) 是一种流行的开源身份和访问管理工具,支持 OpenID Connect。在以下示例中,您需要将–issuer-url和–client-id替换为您的信息:
pveum 领域添加 myrealm2 --type openid --issuer-url https://your.server:8080/realms/your-realm --client-id XXX --username-claim 用户名
使用–username-claim username可以在 Proxmox VE 端启用简单的用户名,例如example.user@myrealm2。
您需要确保不允许用户自己编辑用户名设置(在 Keycloak 服务器上)。 |
14.6。双因素身份验证
有两种使用双因素身份验证的方法:
身份验证领域可以通过TOTP (基于时间的一次性密码)或YubiKey OTP要求它。在这种情况下,新创建的用户需要立即添加其密钥,因为没有第二个因素就无法登录。对于TOTP,用户也可以稍后更改TOTP,前提是他们可以先登录。
或者,用户可以选择稍后选择双因素身份验证,即使领域不强制执行也是如此。
14.6.1。可用的第二因素
您可以设置多个第二因素,以避免丢失智能手机或安全密钥而导致您永久无法登录帐户的情况。
除了领域强制 TOTP 和 YubiKey OTP 之外,还可以使用以下两因素身份验证方法:
-
用户配置的 TOTP(基于时间的一次性密码)。源自共享秘密和当前时间的短代码,每 30 秒更改一次。
-
WebAuthn(网络身份验证)。身份验证的通用标准。它由各种安全设备实现,例如计算机或智能手机的硬件密钥或可信平台模块 (TPM)。
-
一次性恢复密钥。应该打印出来并锁定在安全位置或以数字方式保存在电子保险库中的密钥列表。每个钥匙只能使用一次。这些非常适合确保您不会被锁定,即使您所有其他第二个因素都丢失或损坏。
在支持 WebAuthn 之前,U2F 可以由用户设置。现有的 U2F 因素仍然可以使用,但建议在服务器上配置后切换到 WebAuthn。
14.6.2。Realm 强制双因素身份验证
这可以通过在添加或编辑身份验证领域时通过TFA下拉框选择可用方法之一来完成 。当领域启用了 TFA 时,它就成为一项要求,并且只有配置了 TFA 的用户才能登录。
目前有两种方法可用:
- 基于时间的誓言 (TOTP)
-
这使用标准 HMAC-SHA1 算法,其中当前时间使用用户配置的密钥进行哈希处理。时间步长和密码长度参数是可配置的。
用户可以配置多个密钥(用空格分隔),并且可以以 Base32 (RFC3548) 或十六进制表示法指定密钥。
Proxmox VE 提供了一个密钥生成工具 ( oathkeygen ),它以 Base32 表示法打印出随机密钥,可以直接与各种 OTP 工具一起使用,例如 oathtool命令行工具,或在 Android Google Authenticator、FreeOTP 和 OTP 或类似应用程序上使用。
- YubiKey OTP
-
要通过 YubiKey 进行身份验证,必须配置 Yubico API ID、API KEY 和验证服务器 URL,并且用户必须拥有可用的 YubiKey。为了从 YubiKey 获取密钥 ID,您可以在通过 USB 连接后触发一次 YubiKey,并将输入的密码的前 12 个字符复制到用户的密钥 ID字段中。
请参阅YubiKey OTP 文档,了解如何使用 YubiCloud或 托管您自己的验证服务器。
14.6.3。双因素身份验证的限制和锁定
第二个因素是为了在用户的密码因某种原因泄露或被猜测时保护用户。然而,有些因素仍然可以通过暴力破解。因此,第二因素登录尝试失败次数过多后,用户将被锁定。
对于 TOTP,8 次失败尝试将禁用用户的 TOTP 因素。使用恢复密钥登录时它们会被解锁。如果 TOTP 是唯一可用的因素,则需要管理员干预,并且强烈建议要求用户立即更改密码。
由于 FIDO2/Webauthn 和恢复密钥不易受到暴力攻击,因此限制较高(100 次尝试),但超出时所有第二个因素都会被阻止一小时。
管理员可以随时通过 UI 中的用户列表或命令行解锁用户的双因素身份验证:
pveum 用户 tfa 解锁 joe@pve
14.6.4。用户配置的 TOTP 身份验证
用户可以通过用户列表中的TFA按钮选择启用TOTP或WebAuthn作为登录的第二个因素(除非领域强制执行YubiKey OTP)。
用户可以随时添加和使用一次性恢复密钥。
打开TFA窗口后,将向用户显示一个设置 TOTP身份验证的对话框。Secret字段包含密钥,可以通过Randomize按钮随机生成。可以添加可选的颁发者名称,以向TOTP应用程序提供有关密钥所属信息的信息。大多数TOTP应用程序将显示发行者名称以及相应的 OTP值。用户名也包含在TOTP应用程序的二维码中。
生成密钥后,将显示一个二维码,该二维码可与大多数 OTP 应用程序(例如 FreeOTP)一起使用。然后,用户需要通过在“验证码” 字段中输入当前OTP值并按“应用”按钮来验证当前用户密码(除非以root身份登录)以及正确使用TOTP密钥的能力。
14.6.5。托普
无需设置服务器。只需在您的智能手机上安装 TOTP 应用程序(例如FreeOTP)并使用 Proxmox 备份服务器 Web 界面添加 TOTP 因素。
14.6.6。网络认证
要使 WebAuthn 正常工作,您需要满足两件事:
-
受信任的 HTTPS 证书(例如,通过使用 Let’s Encrypt)。虽然它可能适用于不受信任的证书,但如果它不受信任,某些浏览器可能会发出警告或拒绝 WebAuthn 操作。
-
设置 WebAuthn 配置(请参阅Proxmox VE Web 界面中的数据中心 → 选项 → WebAuthn 设置)。这可以在大多数设置中自动填充。
满足这两个要求后,您可以在Datacenter → Permissions → Two Factor下的Two Factor面板中添加 WebAuthn 配置。
14.6.7。恢复密钥
每个用户在任何时候只能有一组一次性恢复密钥。 |
14.6.8。服务器端 Webauthn 配置
更改WebAuthn配置可能会导致所有现有的WebAuthn 注册不可用! |
这是通过/etc/pve/datacenter.cfg完成的。例如:
webauthn: rp=mypve.example.com,origin=https://mypve.example.com:8006,id=mypve.example.com
14.6.9。服务器端 U2F 配置
建议使用 WebAuthn 代替。 |
要允许用户使用U2F身份验证,可能需要使用具有有效 SSL 证书的有效域,否则,某些浏览器可能会打印警告或完全拒绝 U2F 使用。最初, 需要配置AppId [ 53 ] 。
更改AppId将使所有现有的U2F注册无法使用! |
这是通过/etc/pve/datacenter.cfg完成的。例如:
u2f: appid=https://mypve.example.com:8006
对于单个节点,AppId可以简单地是 Web 界面的地址,与浏览器中使用的完全相同,包括https://和端口,如上所示。请注意,某些浏览器在匹配AppId时可能比其他浏览器更严格。
当使用多个节点时,最好有一个单独的https服务器提供appid.json [ 54 ] 文件,因为它似乎与大多数浏览器兼容。如果所有节点都使用同一顶级域的子域,则使用 TLD 作为AppId可能就足够了。但应该注意的是,某些浏览器可能不接受这一点。
错误的AppId通常会产生错误,但我们也遇到过这种情况不会发生的情况,特别是当对通过 Chromium 中的子域访问的节点使用顶级域 AppId时。因此,建议使用多个浏览器测试配置,因为稍后更改 AppId将使现有的U2F注册无法使用。 |
14.6.10。以用户身份激活 U2F
要启用U2F身份验证,请打开TFA窗口的U2F选项卡,输入当前密码(除非以 root 身份登录),然后按“注册”按钮。如果服务器设置正确并且浏览器接受服务器提供的 AppId,则会出现一条消息,提示用户按下 U2F设备上的按钮(如果是YubiKey,按钮灯应该稳定地亮起和熄灭,大致情况如下)每秒两次)。
Firefox 用户可能需要通过about:config启用security.webauth.u2f ,然后才能使用U2F令牌。
14.7。权限管理
为了让用户执行操作(例如列出、修改或删除 VM 配置的一部分),用户需要拥有适当的权限。
Proxmox VE 使用基于角色和路径的权限管理系统。权限表中的条目允许用户、组或令牌在访问对象或路径时承担特定角色。这意味着这样的访问规则可以表示为(path, user, role)、(path, group, role)或(path, token, role)的三元组,其中角色包含一组允许的操作,并且表示这些操作的目标的路径。
14.7.1。角色
角色只是一个权限列表。Proxmox VE 附带了许多预定义的角色,可以满足大多数要求。
-
管理员:拥有全部权限
-
NoAccess:没有权限(用于禁止访问)
-
PVEAdmin:可以执行大多数任务,但无权修改系统设置(Sys.PowerMgmt、Sys.Modify、Realm.Allocate)或权限(Permissions.Modify)
-
PVEAuditor:具有只读访问权限
-
PVEDatastoreAdmin:创建和分配备份空间和模板
-
PVEDatastoreUser:分配备份空间并查看存储
-
PVEMappingAdmin:管理资源映射
-
PVEMappingUser:查看和使用资源映射
-
PVEPoolAdmin:分配池
-
PVEPoolUser:查看池
-
PVESDNAdmin:管理 SDN 配置
-
PVESDNUser:访问网桥/vnet
-
PVESysAdmin:审计、系统控制台和系统日志
-
PVETemplateUser:查看和克隆模板
-
PVEUserAdmin:管理用户
-
PVEVMAdmin:完全管理虚拟机
-
PVEVMUser:查看、备份、配置CD-ROM、VM控制台、VM电源管理
您可以在 GUI 中看到整套预定义角色。
您可以通过 GUI 或命令行添加新角色。
要通过命令行添加角色,可以使用pveum CLI工具,例如:
pveum 角色添加 VM_Power-only --privs “VM.PowerMgmt VM.Console” pveum 角色添加 Sys_Power-only --privs “Sys.PowerMgmt Sys.Console”
以PVE开头的角色始终是内置的,不允许自定义角色使用此保留前缀。 |
14.7.2. 特权
特权是执行特定操作的权利。为了简化管理,权限列表被分组为角色,然后可以在权限表中使用。请注意,如果不属于角色,则无法将权限直接分配给用户和路径。
我们目前支持以下权限:
- 节点/系统相关权限
-
-
Group.Allocate:创建/修改/删除组
-
Mapping.Audit:查看资源映射
-
Mapping.Modify:管理资源映射
-
Mapping.Use:使用资源映射
-
Permissions.Modify:修改访问权限
-
Pool.Allocate:创建/修改/删除池
-
Pool.Audit:查看池
-
Realm.AllocateUser:将用户分配到领域
-
Realm.Allocate:创建/修改/删除身份验证领域
-
SDN.Allocate:管理SDN配置
-
SDN.Audit:查看SDN配置
-
Sys.Audit:查看节点状态/配置、Corosync 集群配置和 HA 配置
-
Sys.Console:控制台访问节点
-
Sys.Incoming:允许来自其他集群的传入数据流(实验)
-
Sys.Modify:创建/修改/删除节点网络参数
-
Sys.PowerMgmt:节点电源管理(启动、停止、重置、关闭等)
-
Sys.Syslog:查看系统日志
-
User.Modify:创建/修改/删除用户访问权限和详细信息。
-
- 虚拟机相关权限
-
-
SDN.Use:访问SDN vnet和本地网桥
-
VM.Allocate:在服务器上创建/删除VM
-
VM.Audit:查看虚拟机配置
-
VM.Backup:备份/恢复虚拟机
-
VM.Clone:克隆/复制虚拟机
-
VM.Config.CDROM : 弹出/更换 CD-ROM
-
VM.Config.CPU:修改CPU设置
-
VM.Config.Cloudinit:修改Cloud-init参数
-
VM.Config.Disk:添加/修改/删除磁盘
-
VM.Config.HWType:修改模拟硬件类型
-
VM.Config.Memory:修改内存设置
-
VM.Config.Network:添加/修改/删除网络设备
-
VM.Config.Options:修改任何其他VM配置
-
VM.Console:对虚拟机的控制台访问
-
VM.Migrate:将虚拟机迁移到集群上的备用服务器
-
VM.Monitor:访问虚拟机监视器(kvm)
-
VM.PowerMgmt:电源管理(启动、停止、重置、关闭……)
-
VM.Snapshot.Rollback:将虚拟机回滚到其快照之一
-
VM.Snapshot:创建/删除虚拟机快照
-
- 存储相关权限
-
-
Datastore.Allocate:创建/修改/删除数据存储并删除卷
-
Datastore.AllocateSpace:在数据存储上分配空间
-
Datastore.AllocateTemplate:分配/上传模板和 ISO 映像
-
Datastore.Audit:查看/浏览数据存储
-
Permissions.Modify和Sys.Modify都应小心处理,因为它们允许修改系统及其配置的危险或敏感方面。 |
请仔细阅读下面有关继承的部分,以了解分配的角色(及其权限)如何沿着 ACL 树传播。 |
14.7.3。对象和路径
访问权限分配给对象,例如虚拟机、存储或资源池。我们使用类似路径的文件系统来寻址这些对象。这些路径形成一棵自然树,并且可以选择在该层次结构中向下传播更高级别(较短路径)的权限。
路径可以模板化。当 API 调用需要模板化路径的权限时,该路径可能包含对 API 调用的参数的引用。这些引用在花括号中指定。某些参数是从 API 调用的 URI 中隐式获取的。例如, 调用/nodes/mynode/status 时的权限路径 /nodes /{node}需要 /nodes/mynode的权限,而对/access/acl 的PUT 请求中的路径{path} 引用方法的路径参数。
一些例子是:
-
/nodes/{node}:访问 Proxmox VE 服务器计算机
-
/vms:覆盖所有虚拟机
-
/vms/{vmid}:访问特定虚拟机
-
/storage/{storeid}:访问特定存储
-
/pool/{poolname}:访问特定池中包含的资源
-
/access/groups : 组管理
-
/access/realms/{realmid}:对领域的管理访问
遗产
如前所述,对象路径形成像树一样的文件系统,并且权限可以由该树下的对象继承(默认情况下设置传播标志)。我们使用以下继承规则:
-
个人用户的权限始终取代组权限。
-
当用户是该组的成员时,组的权限适用。
-
更深层次的权限取代了从上层继承的权限。
-
NoAccess取消给定路径上的所有其他角色。
此外,权限分隔的令牌永远不会拥有其关联用户所没有的任何给定路径的权限。
14.7.4。泳池
池可用于对一组虚拟机和数据存储进行分组。然后,您可以简单地设置池 ( /pool/{poolid} ) 的权限,这些权限由所有池成员继承。这是简化访问控制的好方法。
14.7.5。我需要哪些权限?
每个方法所需的 API 权限都有记录,可以在https://pve.proxmox.com/pve-docs/api-viewer/找到。
权限被指定为一个列表,它可以解释为逻辑和访问检查函数的树:
- [“和”,<子测试> …]和[“或”,<子测试> …]
-
当前列表中的 每个(和)或任何(或)其他元素都必须为真。
- [“烫发”,<路径>,[<权限>…],<选项>…]
-
路径是一个模板化参数(请参阅 对象和路径)。 指定路径上必须允许所有(或者,如果使用了any选项,则为任何)列出的权限。如果指定了require-param 选项,则即使 API 调用的架构将其指定为可选参数,它的指定参数也是必需的。
- [“用户 ID 组”,[ <权限>…],<选项>…]
-
调用者必须具有/access/groups 上列出的任何权限。此外,还有两种可能的检查,具体取决于是否 设置了 groups_param选项:
-
groups_param已设置:API 调用具有非可选组参数,并且调用者必须对所有列出的组具有任何列出的权限。
-
groups_param未设置:通过userid参数传递的用户必须存在并且属于调用者具有任何列出的权限的组的一部分(通过/access/groups/<group>路径)。
-
- [“userid-param”,“self”]
-
为 API 调用的userid参数提供的值必须引用执行操作的用户(通常与或结合使用,以允许用户对自己执行操作,即使他们没有提升的权限)。
- [“userid-param”,“Realm.AllocateUser”]
-
用户需要Realm.AllocateUser访问/access/realm/<realm>,其中 <realm>指的是通过userid参数传递的用户领域 。请注意,用户不需要存在即可与领域关联,因为用户 ID 以 <username>@<realm>的形式传递。
- [“永久修改”,<路径>]
-
路径是一个模板化参数(请参阅 对象和路径)。用户需要 Permissions.Modify权限,或者根据路径,需要以下权限作为可能的替代:
-
/storage/…:需要“Datastore.Allocate”
-
/vms/…:需要“VM.Allocate”
-
/pool/…:需要 ‘Pool.Allocate`
如果路径为空,则需要对/access进行Permissions.Modify 。
如果用户没有Permissions.Modify权限,他们只能在给定路径上委派自己权限的子集(例如,具有 PVEVMAdmin的用户可以分配PVEVMUser,但不能分配PVEAdmin)。
-
14.8。命令行工具
大多数用户将简单地使用 GUI 来管理用户。但还有一个功能齐全的命令行工具,称为pveum(“Proxmox VE U ser Manager ”的缩写)。请注意,所有 Proxmox VE 命令行工具都是 API 的包装器,因此您还可以通过 REST API 访问这些功能。
以下是一些简单的使用示例。要显示帮助,请键入:
皮韦姆
或(显示有关特定命令的详细帮助)
pveum帮助用户添加
创建一个新用户:
pveum 用户添加 testuser@pve -comment “只是一个测试”
设置或更改密码(并非所有领域都支持此操作):
pveum passwd testuser@pve
禁用用户:
pveum用户修改testuser@pve -enable 0
创建一个新组:
pveum组添加测试组
创建一个新角色:
pveum 角色添加 PVE_Power-only -privs “VM.PowerMgmt VM.Console”
14.9。现实世界的例子
14.9.1。管理员组
管理员可能希望创建一组具有完全管理员权限的用户(不使用 root 帐户)。
为此,首先定义组:
pveum group add admin -comment “系统管理员”
然后分配角色:
pveum acl修改/ -group admin -role管理员
最后,您可以将用户添加到新的管理员组中:
pveum用户修改testuser@pve -group admin
14.9.2。审核员
您可以通过将PVEAuditor角色分配给用户或组来向用户授予只读访问权限 。
示例 1:允许用户joe@pve查看所有内容
pveum acl 修改/ -user joe@pve -role PVEAuditor
示例 2:允许用户joe@pve查看所有虚拟机
pveum acl 修改 /vms -user joe@pve -role PVEAuditor
14.9.3。委托用户管理
如果您想将用户管理委托给用户joe@pve,您可以这样做:
pveum acl修改/access -user joe@pve -role PVEUserAdmin
用户joe@pve现在可以添加和删除用户,以及更改其他用户属性,例如密码。这是一个非常强大的角色,您很可能希望将其限制在选定的领域和组中。以下示例允许joe@pve修改领域pve内的用户(如果他们是组customers的成员):
pveum acl 修改 /access/realm/pve -user joe@pve -role PVEUserAdmin pveum acl 修改 /access/groups/customers -user joe@pve -role PVEUserAdmin
用户可以添加其他用户,但前提是这些用户是customer组的成员并且位于pve领域内。 |
14.9.4。用于监控的有限 API 令牌
API 令牌的权限始终是其相应用户的权限的子集,这意味着 API 令牌不能用于执行支持用户无权执行的任务。本节将演示如何使用具有单独权限的 API 令牌来进一步限制令牌所有者的权限。
在所有虚拟机上为用户joe@pve授予PVEVMAdmin 角色:
pveum acl 修改 /vms -user joe@pve -role PVEVMAdmin
添加具有单独权限的新 API 令牌,仅允许查看 VM 信息(例如,用于监控目的):
pveum 用户令牌添加 joe@pve 监控 -privsep 1 pveum acl 修改 /vms -token 'joe@pve!monitoring' -role PVEAuditor
验证用户和token的权限:
pveum 用户权限 joe@pve pveum 用户令牌权限 joe@pve 监控
14.9.5。资源池
企业通常由多个较小的部门组成,您通常希望向每个部门分配资源和委派管理任务。假设您要为软件开发部门建立一个池。首先,创建一个组:
pveum 组添加开发人员 - 评论“我们的软件开发人员”
现在我们创建一个新用户,它是该组的成员:
pveum用户添加developer1@pve -group开发者-密码
“-password”参数将提示您输入密码 |
然后我们创建一个资源池供我们开发部门使用:
pveum pool add dev-pool --comment "IT 开发池"
最后,我们可以为该池分配权限:
pveum acl修改/pool/dev-pool / -group开发人员-role PVEAdmin
我们的软件开发人员现在可以管理分配给该池的资源。