XenServer

管理用户

定义用户、组、角色和权限可让您控制谁有权访问您的 XenServer® 主机和池以及他们可以执行哪些操作。

首次安装 XenServer 时,会自动向 XenServer 添加一个用户帐户。此帐户是本地超级用户 (LSU) 或 root,XenServer 会在本地对其进行身份验证。

LSU(即 root)是一个特殊的用户帐户,用于系统管理并拥有所有权限。在 XenServer 中,LSU 是安装时的默认帐户。XenServer 会对 LSU 帐户进行身份验证。LSU 不需要任何外部身份验证服务。如果外部身份验证服务失败,LSU 仍可以登录并管理系统。LSU 始终可以通过 SSH 访问 XenServer 物理服务器。

您可以通过 XenCenter 的“用户”选项卡或 xe CLI 添加 Active Directory 帐户来创建更多用户。如果您的环境不使用 Active Directory,则只能使用 LSU 帐户。

注意:

创建用户时,XenServer 不会自动为新创建的用户帐户分配 RBAC 角色。因此,在您为其分配角色之前,这些帐户无权访问 XenServer 池。

这些权限通过角色授予,如 使用 Active Directory (AD) 验证用户 部分所述。

使用 Active Directory (AD) 验证用户

如果您希望在主机或池上拥有多个用户帐户,则必须使用 Active Directory 用户帐户进行身份验证。AD 帐户允许 XenServer 用户使用其 Windows 域凭据登录到池。

注意:

您可以在 AD 域控制器上启用 LDAP 通道绑定和 LDAP 签名。有关详细信息,请参阅 Microsoft 安全公告 ADV190023

您可以通过启用 Active Directory 身份验证、添加用户帐户以及为这些帐户分配角色来为特定用户配置不同级别的访问权限。

Active Directory 用户可以使用 xe CLI(传递适当的 -u-pw 参数)并使用 XenCenter 连接到主机。身份验证是按资源池进行的。

主体控制对用户帐户的访问。XenServer 中的主体映射到 Active Directory 服务器上的实体(可以是用户或组)。启用外部身份验证时,XenServer 会根据本地 root 凭据,然后根据主体列表检查用于创建会话的凭据。要允许访问,请为您要授予访问权限的人员或组创建主体条目。您可以使用 XenCenter 或 xe CLI 创建主体条目。

如果您熟悉 XenCenter,请注意 xe CLI 使用略有不同的术语来指代 Active Directory 和用户帐户功能:

XenCenter 术语 xe CLI 术语
用户,添加用户 主体,添加主体

尽管 XenServer 基于 Linux,但 XenServer 允许您将 Active Directory 帐户用于 XenServer 用户帐户。为此,它会将 Active Directory 凭据传递给 Active Directory 域控制器。

当您将 Active Directory 添加到 XenServer 时,Active Directory 用户和组将成为 XenServer 主体。在 XenCenter 中,这些主体被称为用户。当您向 XenServer 注册主体时,用户/组会在登录时通过 Active Directory 进行身份验证。用户和组无需使用域名来限定其用户名。

要登录到 XenServer 主机,Active Directory 用户必须在域级别具有登录到托管 XenServer 计算机帐户的计算机的权限。默认情况下,在 Windows Server 2019 域中,所有用户都被允许登录到域中的任何计算机。但是,如果您更改了此设置,请确保您希望访问 XenServer 主机的用户被允许在域级别登录。

要限定用户名,您必须以 Down-Level 登录名格式键入用户名,例如 mydomain\myuser

注意:

默认情况下,如果您未限定用户名,XenCenter 会尝试使用其加入的域将用户登录到 AD 身份验证服务器。此规则的例外是 LSU 帐户,XenCenter 始终首先在本地(即在 XenServer 上)对其进行身份验证。

外部身份验证过程如下所示:

  1. 连接到主机时提供的凭据将传递给 Active Directory 域控制器进行身份验证。

  2. 域控制器检查凭据。如果凭据无效,身份验证将立即失败。

  3. 如果凭据有效,则会查询 Active Directory 控制器以获取与凭据关联的主体标识符和组成员身份。

  4. 如果主体标识符与 XenServer 中存储的标识符匹配,则身份验证成功。

当您加入域时,您将为池启用 Active Directory 身份验证。但是,当池加入域时,只有该域中的用户(或与其具有信任关系的域中的用户)才能连接到池。

注意:

手动更新 DHCP 配置的网络 PIF 的 DNS 配置是不受支持的,并且可能导致 AD 集成(以及用户身份验证)失败或停止工作。

配置 Active Directory 身份验证

XenServer 支持运行 Windows Server 2016 或更高版本的 Active Directory 服务器。为了保护与域控制器的连接,您可以配置 LDAPS,如安全 LDAP (LDAPS) 中所述。

注意:

XenServer 9 不支持旧版 AD 密码套件,例如 RC4_HMAC_MD5、DES_CBC_MD5 和 DES_CBC_CRC。您应确保您的 AD 服务器至少支持 AES128_HMAC_SHA1 或 AES256_HMAC_SHA1 中的一种。

要对 XenServer 主机进行 Active Directory 身份验证,您必须为 Active Directory 服务器(配置为允许互操作性)和 XenServer 主机使用相同的 DNS 服务器。 在某些配置中,Active Directory 服务器可以自行提供 DNS。这可以通过使用 DHCP 为 XenServer 主机提供 IP 地址和 DNS 服务器列表来实现。或者,您可以在 PIF 对象中设置值,或者在使用手动静态配置时使用安装程序。

我们建议启用 DHCP 来分配主机名。请勿将主机名 localhostlinux 分配给主机。

警告:

XenServer 主机名在整个 XenServer 部署中必须是唯一的。

请注意以下事项:

  • XenServer 使用其主机名在 AD 数据库上标记其 AD 条目。如果两个具有相同主机名的 XenServer 主机加入同一个 AD 域,则第二个 XenServer 会覆盖第一个 XenServer 的 AD 条目。无论主机属于相同还是不同的池,都会发生覆盖。这可能导致第一个 XenServer 上的 AD 身份验证停止工作。

    您可以在两个 XenServer 主机中使用相同的主机名,只要它们加入不同的 AD 域。

  • XenServer 主机可以位于不同的时区,因为比较的是 UTC 时间。为确保同步正确,您可以为 XenServer 池和 Active Directory 服务器使用相同的 NTP 服务器。

  • 不支持混合身份验证池。您不能拥有一个池,其中某些主机配置为使用 Active Directory 而另一些则不使用。

  • XenServer Active Directory 集成使用 Kerberos 协议与 Active Directory 服务器通信。因此,XenServer 不支持与不使用 Kerberos 的 Active Directory 服务器通信。

  • 要使使用 Active Directory 的外部身份验证成功,XenServer 主机上的时钟必须与 Active Directory 服务器上的时钟同步。当 XenServer 加入 Active Directory 域时,会检查同步情况,如果服务器之间存在过大的偏差,身份验证将失败。

警告:

主机名不能是纯数字。由于 XenServer 使用主机的 NetBIOS 名称在 Active Directory 中注册,因此主机名不应超过 15 个字符(字母数字字符和连字符,不能以连字符开头或结尾)。

最近的 SSH 客户端存在一个限制,这意味着 SSH 不适用于包含以下任何字符的用户名:{}[]|&。请确保您的用户名和 Active Directory 服务器名称不包含任何这些字符。

在启用 Active Directory 身份验证后将主机添加到池中时,系统会提示您在加入池的主机上配置 Active Directory。当系统提示您在加入主机上输入凭据时,请输入具有足够权限将主机添加到该域的 Active Directory 凭据。

活动目录集成

确保从 XenServer 到 Active Directory 域控制器的出站连接已打开以下端口。

端口 协议 用途
53 UDP/TCP DNS
88 UDP/TCP Kerberos 5 协议
123 UDP NTP
135 TCP RPC 终结点映射器
137 UDP NetBIOS 名称服务
139 TCP NetBIOS 会话 (SMB)
389 UDP/TCP LDAP
445 TCP 基于 TCP 的 SMB
464 UDP/TCP 计算机密码更改
636 UDP/TCP 基于 SSL 的 LDAP
3268 TCP 全局编录搜索
49152-65535 TCP RPC 动态连接

有关详细信息,请参阅 XenServer 使用的通信端口

注意:

如果来自受信任域的用户需要登录到 XenServer,请确保上述端口也已打开,以便 XenServer 可以出站连接到受信任域的域控制器。

Winbind 集成

XenServer 使用 Winbind 对 Active Directory (AD) 用户进行身份验证,并与 AD 服务器进行加密通信。

Winbind 不支持以下情况:

  • 域用户或域组名称开头或结尾处的空格。
  • 包含 64 个或更多字符的域用户名。
  • 包含任何特殊字符 +<>”=/%@:,;\` 的域用户名。
  • 包含任何特殊字符 ,;\` 的域组名称。

配置 Winbind

使用以下配置选项配置 Winbind 行为,这些选项可以包含在 /etc/xapi.conf 文件中:

  • winbind_machine_pwd_timeout:此选项的值定义了此 XenServer 主机轮换机器密码的频率(以秒为单位)。将值定义为整数。

    默认值为 1209600 秒(14 天)。我们建议您保留默认值,或者不要将值降低到默认值以下,以确保有足够的时间在域控制器之间同步新密码。

  • winbind_kerberos_encryption_type:此选项的值为 stronglegacyall。默认值为 strong

    • all 允许以下密码套件:aes256-cts-hmac-sha1-96aes128-cts-hmac-sha1-96arcfour-hmac-md5

    • strong 允许以下密码套件:aes256-cts-hmac-sha1-96aes128-cts-hmac-sha1-96

    • legacy 允许以下密码套件:arcfour-hmac-md5

      旧版选项不安全,我们建议您仅将其用于调试问题。

    为了提高安全性,我们建议您强制执行 AES 加密。为此,请执行以下操作:

    1. 确保域控制器支持 aes256-cts-hmac-sha1-96aes128-cts-hmacsha1-96
    2. 配置域控制器以在域信任中启用 其他域支持 Kerberos AES 加密

      有关详细信息,请参阅 方法 3:配置信任以支持 AES128 和 AES 256 加密而不是 RC4 加密(在 Microsoft 文档中)

    3. winbind_kerberos_encryption_type 选项更新为使用值 strong
    4. 重新启动工具栈。

      在启用 HA 时,请勿重新启动工具栈。如果可能,请在重新启动工具栈之前暂时禁用 HA。

    注意:

    在 Windows Server 2016 上,msDS-SupportedEncryptionTypes 属性默认为仅 RC4。在所有现有用户上设置 AES 加密类型并重置其密码,以便域控制器重新生成 Kerberos AES 密钥。

  • winbind_set_machine_account_kerberos_encryption_type:此选项的值为 truefalse。默认值为 false

    • truemsDS-SupportedEncryptionTypes 设置为 strong 在 XenServer 主机的 Active Directory 计算机对象上。

    • false 不会配置 msDS-SupportedEncryptionTypes 在 XenServer 主机的 Active Directory 计算机对象上。

  • winbind_cache_time:Winbind 在本地缓存一些域信息。此选项的值定义了每次缓存刷新之间的时间间隔(秒)。默认值为 60 秒。

更新任何这些配置选项后,重新启动 toolstack。

XenServer 如何管理用于 AD 集成的计算机帐户密码?

与 Windows 客户端计算机类似,Winbind 会自动更新计算机帐户密码。Winbind 每 14 天或根据配置选项 winbind_machine_pwd_timeout 的指定自动更新计算机帐户密码。

在池上启用外部身份验证

可以使用 XenCenter 或 CLI 通过以下命令配置 Active Directory 外部身份验证。

xe pool-enable-external-auth auth-type=AD \
  service-name=fully-qualified-domain \
  config:user=username \
  config:pass=password
<!--NeedCopy-->

指定的用户必须具有 Add/remove computer objects or workstations 权限,这是域管理员的默认权限。

如果您在 Active Directory 和 XenServer 主机使用的网络上不使用 DHCP,请使用以下方法设置 DNS:

  1. 设置域 DNS 后缀搜索顺序以解析非 FQDN 条目:

    xe pif-param-set uuid=pif_uuid_in_the_dns_subnetwork \
       "other-config:domain=suffix1.com suffix2.com suffix3.com"
    <!--NeedCopy-->
    
  2. 配置要在 XenServer 主机上使用的 DNS 服务器:

    xe pif-reconfigure-ip mode=static dns=dnshost ip=ip \
      gateway=gateway netmask=netmask uuid=uuid
    <!--NeedCopy-->
    
  3. 手动设置管理接口以使用与您的 DNS 服务器位于同一网络的 PIF:

    xe host-management-reconfigure pif-uuid=pif_in_the_dns_subnetwork
    <!--NeedCopy-->
    

注意:

外部身份验证是每个主机的属性。但是,我们建议您在每个池的基础上启用和禁用外部身份验证。每个池的设置允许 XenServer 处理在特定主机上启用身份验证时发生的故障。XenServer 还会回滚可能需要的任何更改,从而确保整个池的配置一致。使用 host-param-list 命令检查主机的属性,并通过检查相关字段的值来确定外部身份验证的状态。

使用 XenCenter 禁用 Active Directory 身份验证,或使用以下 xe 命令:

xe pool-disable-external-auth
<!--NeedCopy-->

启用 AD 身份验证缓存

Windows AD 基础架构在跨不同 AD 站点复制有关用户的信息(例如已阻止/未阻止、密码和其他字段)时,存在固有的延迟。这可能导致 AD 身份验证耗时很长,尤其是在全球 AD 部署中大规模运行时。启用身份验证缓存允许系统在有限的时间内记住身份验证决策,有助于在外部 Active Directory (AD) 身份验证缓慢时加快登录速度。此功能默认禁用。

要启用 AD 身份验证缓存:

xe pool-param-set uuid=<pool-uuid> ext-auth-cache-enabled=true
<!--NeedCopy-->

默认情况下,身份验证决策会记住 300 秒。这可以进行调整:

xe pool-param-set uuid=<pool-uuid> ext-auth-cache-expiry=<seconds>
<!--NeedCopy-->

要禁用 AD 身份验证缓存:

xe pool-param-set uuid=<pool-uuid> ext-auth-cache-enabled=false
<!--NeedCopy-->

安全 LDAP (LDAPS)

默认情况下,XenServer 通过对 LDAP 流量进行签名和密封来保护与 Active Directory 域控制器的连接。您还可以使用 LDAPS(通过 SSL/TLS 的 LDAP,端口 636)进一步保护此流量,它将目录流量封装在 TLS 隧道中。XenServer 会根据您导入到池中的受信任 CA 证书验证隧道。

注意:

XenServer 仅根据导入的 CA 证书验证域控制器证书链。LDAPS 不支持叶证书或自签名(非 CA)证书。在启用 LDAPS 之前,您必须至少导入一个 CA 证书,否则启用外部身份验证将失败。

准备 CA 证书

必须在您的域控制器上启用 LDAPS,并且您必须提供签署域控制器证书的 CA 证书。要准备证书,请参阅以下 Microsoft 文档:

导入 CA 证书

导入为 LDAPS 标记的、用于签署域控制器服务器证书的 CA 证书:

xe pool-install-trusted-certificate uuid=<pool-uuid> purpose=ldaps ca=true filename=<path-to-ca.pem>
<!--NeedCopy-->

其中:

  • purpose=ldaps 将证书标记为用于 LDAPS。
  • ca=true 指示这是一个验证证书链的 CA 证书,而不是固定的叶证书。
  • filename 是运行 xe 命令的计算机上 PEM 格式的 CA 证书路径。

如果域控制器的证书是通过中间 CA 颁发的,请改为导入中间 CA(根证书最好也导入)。

启用或禁用 LDAPS

要在启用外部身份验证时启用 LDAPS,请将 config:ldaps=true 添加到 pool-enable-external-auth 命令中:

xe pool-enable-external-auth auth-type=AD \
  service-name=fully-qualified-domain \
  config:user=username \
  config:pass=password \
  config:ldaps=true
<!--NeedCopy-->

要在已加入域的资源池上启用或禁用 LDAPS,请使用 pool-external-auth-set-ldaps 命令:

xe pool-external-auth-set-ldaps uuid=<pool-uuid> ldaps=true
<!--NeedCopy-->
xe pool-external-auth-set-ldaps uuid=<pool-uuid> ldaps=false
<!--NeedCopy-->

此更改将应用于资源池中的每个主机,并针对域进行验证。如果失败,更改将在所有主机上自动回滚。

要列出标记为用于 LDAPS 的证书:

xe certificate-list purpose=ldaps
<!--NeedCopy-->

为多个域控制器使用一个 CA 链

当池通过 LDAPS 进行身份验证时,XenServer 可以连接到域中的任何域控制器,并且它使用的域控制器在不同操作之间可能会有所不同。每个域控制器都会为其 LDAPS 提供自己的服务器证书,XenServer 会根据您导入的 CA 证书对其进行验证。如果域控制器的证书是由您未导入的 CA 签名的,XenServer 可能会遇到间歇性故障。

请遵循以下建议:

  • 从同一个根 CA 为每个域控制器的 LDAPS 服务器证书颁发证书,并将根证书作为 purpose=ldaps 信任证书导入到 XenServer 中。
  • 如果您的环境使用加入域和受信任域,并且这些域由不同的 CA 签名,请导入所有这些域的所有 CA 证书。

用户身份验证

要允许用户访问您的 XenServer 主机,您必须为该用户或其所属的组添加一个主体。(也会以正常方式检查传递组的成员资格。例如,为组 A 添加主体,其中组 A 包含组 B,并且 user 1 是组 B 的成员,这将允许 user 1 访问。)如果您想在 Active Directory 中管理用户权限,您可以创建一个组,然后向其中添加或从中删除用户。或者,您可以从 XenServer 添加和删除单个用户,或者根据您的身份验证要求组合使用用户和组。您可以从 XenCenter 或使用 CLI 管理主体列表,如以下部分所述。

对用户进行身份验证时,凭据首先会针对本地 root 帐户进行检查,这样您就可以恢复 AD 服务器出现故障的系统。如果凭据(用户名和密码)不匹配,则会向 AD 服务器发出身份验证请求。如果身份验证成功,则会检索用户信息并根据本地主体列表进行验证。如果身份验证失败,则拒绝访问。如果用户或用户传递组成员资格中的某个组在主体列表中,则针对主体列表的验证成功。

注意:

当使用 Active Directory 组授予需要主机 SSH 访问权限的池管理员用户访问权限时,AD 组的大小不得超过 500 个用户。

将 AD 主体添加到 XenServer:

xe subject-add subject-name=entity_name
<!--NeedCopy-->

entity_name 是您要授予访问权限的用户或组的名称。您可以包含实体的域(例如,’xendt\user1’ 而不是 ‘user1’),尽管行为相同,除非需要消除歧义。

查找用户的主体标识符。标识符是用户或包含该用户的组。删除一个组会删除对该组中所有用户的访问权限,前提是他们没有在主体列表中另外指定。使用 subject list 命令查找用户的主体标识符:

xe subject-list
<!--NeedCopy-->

此命令返回所有用户的列表。

要对列表应用筛选器,例如,要查找 testad 域中用户 user1 的主体标识符,请使用以下命令:

xe subject-list other-config:subject-name='testad\user1'
<!--NeedCopy-->

使用 subject-remove 命令删除用户,并传入您在上一步中了解到的主体标识符:

xe subject-remove subject-uuid=subject_uuid
<!--NeedCopy-->

您可以结束此用户已通过身份验证的任何当前会话。有关更多信息,请参阅下一节中的 使用 xe 终止所有已通过身份验证的会话使用 xe 终止单个用户会话。如果您不结束会话,则权限已被撤销的用户可能会继续访问系统,直到他们注销。

运行以下命令以识别有权访问您的 XenServer 主机或池的用户和组列表:

xe subject-list
<!--NeedCopy-->

移除用户的访问权限

用户通过身份验证后,可以访问主机,直到他们结束会话,或另一个用户结束他们的会话。从主体列表中移除用户,或从主体列表中的组中移除用户,不会自动撤销该用户已通过身份验证的任何会话。用户可以使用 XenCenter 或他们已创建的其他 API 会话继续访问池。XenCenter 和 CLI 提供了结束单个会话或强制结束所有活动会话的功能。有关使用 XenCenter 的过程,请参阅 XenCenter 文档;有关使用 CLI 的过程,请参阅以下部分。

使用 xe 终止所有已通过身份验证的会话

运行以下 CLI 命令以使用 xe 结束所有已通过身份验证的会话:

xe session-subject-identifier-logout-all
<!--NeedCopy-->

使用 xe 终止单个用户会话

  1. 确定您要注销其会话的主体标识符。使用 session-subject-identifier-listsubject-list xe 命令查找主体标识符。第一个命令显示有会话的用户。第二个命令显示所有用户,但可以进行筛选。例如,通过使用类似 xe subject-list other-config:subject-name=xendt\\user1 的命令。(根据您的 shell,您可能需要如所示的双反斜杠)。

  2. 使用 session-subject-logout 命令,将您在上一步中确定的主体标识符作为参数传入,例如:

    xe session-subject-identifier-logout subject-identifier=subject_id
    <!--NeedCopy-->
    

离开 AD 域

警告:

当您离开域时,任何使用 Active Directory 凭据向池或主机进行身份验证的用户都将被断开连接。

使用 XenCenter 离开 AD 域。有关更多信息,请参阅 XenCenter 文档。或者运行 pool-disable-external-auth 命令,如有必要,请指定池 UUID。

注意:

离开域不会从 AD 数据库中删除主机对象。请参阅 Active Directory 文档,以了解有关如何检测和删除禁用的主机条目的信息。

管理用户