安装 Linux Virtual Delivery Agent for RHEL/CentOS

可以选择按照本文中的步骤进行手动安装,也可以使用轻松安装进行自动安装和配置。轻松安装省时又省力,与手动安装相比,更不易于出错。

注意:

请仅对全新安装使用轻松安装功能。请勿使用轻松安装更新现有安装。

步骤 1:为 VDA 安装准备 RHEL 7/CentOS 7、RHEL 6/CentOS 6

步骤 1a:验证网络配置

Citrix 建议先连接并正确配置网络,然后再继续操作。

步骤 1b:设置主机名

注意:

Linux VDA 当前不支持 NetBIOS 名称截断。因此,主机名不得超过 15 个字符。

为确保正确报告计算机的主机名,请更改 /etc/hostname 文件,使其仅包含计算机的主机名。

HOSTNAME=hostname

步骤 1c:为主机名分配环回地址

注意:

Linux VDA 当前不支持 NetBIOS 名称截断。因此,主机名不得超过 15 个字符。

为确保正确报告计算机的 DNS 域名和完全限定域名 (FQDN),请更改 /etc/hosts 文件中的以下行,使其前两个条目为 FQDN 和主机名:

127.0.0.1 hostname-fqdn hostname localhost localhost.localdomain localhost4 localhost4.localdomain4

例如:

127.0.0.1 vda01.example.com vda01 localhost localhost.localdomain localhost4 localhost4.localdomain4

从文件中的其他条目中删除对 hostname-fqdnhostname 的任何其他引用。

提示:

只能使用字符 a-z、A-Z、0-9 和连字符 (-)。请避免使用下划线 (_)、空格和其他符号。主机名不得以数字开头和以连字符结尾。此规则也适用于 Delivery Controller 主机名。

步骤 1d:检查主机名

验证主机名设置是否正确无误:

hostname
<!--NeedCopy-->

此命令仅返回计算机的主机名,而不返回其完全限定域名 (FQDN)。

验证 FQDN 设置是否正确无误:

hostname -f
<!--NeedCopy-->

此命令返回计算机的 FQDN。

步骤 1e:检查名称解析和服务可访问性

确认可以解析 FQDN 并对域控制器和 Delivery Controller 执行 ping 操作:

nslookup domain-controller-fqdn

ping domain-controller-fqdn

nslookup delivery-controller-fqdn

ping delivery-controller-fqdn
<!--NeedCopy-->

如果无法解析 FQDN 或 Ping 不通上述任一计算机,请先检查相关步骤,然后再继续。

步骤 1f:配置时钟同步 (chrony)

确保 VDA、Delivery Controller 和域控制器之间的时钟始终精确同步至关重要。将 Linux VDA 托管为虚拟机可能会导致时钟偏差问题。出于此原因,最好使用远程时间服务来同步时间。

RHEL 6.x 及早期版本使用 NTP 守护程序 (ntpd) 同步时钟,而 RHEL 7.x 默认环境则转而使用较新的 Chrony 守护程序 (chronyd)。两个服务的配置和操作过程十分类似。

配置 NTP 服务(仅限 RHEL 6/CentOS 6)

以 root 用户身份,编辑 /etc/ntp.conf 并为每个远程时间服务器添加一个服务器条目:

server peer1-fqdn-or-ip-address iburst

server peer2-fqdn-or-ip-address iburst
<!--NeedCopy-->

在典型部署中,时间从本地域控制器同步,而不是直接从公共 NTP 池服务器同步。为域中的每个 Active Directory 域控制器添加一个服务器条目。

删除列出的任何其他 server 条目,包括环回 IP 地址、localhost 和公共服务器 *.pool.ntp.org 条目。

保存更改并重新启动 NTP 守护程序:

sudo /sbin/service ntpd restart
<!--NeedCopy-->

配置 Chrony 服务(仅限 RHEL 7/CentOS 7)

以 root 用户身份,编辑 /etc/chrony.conf 并为每个远程时间服务器添加一个服务器条目:

server peer1-fqdn-or-ip-address iburst

server peer2-fqdn-or-ip-address iburst
<!--NeedCopy-->

在典型部署中,时间从本地域控制器同步,而不是直接从公共 NTP 池服务器同步。为域中的每个 Active Directory 域控制器添加一个服务器条目。

删除列出的任何其他 server 条目,包括环回 IP 地址、localhost 和公共服务器 *.pool.ntp.org 条目。

保存更改并重新启动 Chrony 守护程序:

sudo /sbin/service chronyd restart
<!--NeedCopy-->

步骤 1g:安装 OpenJDK

Linux VDA 依赖于 OpenJDK。通常,运行时环境作为操作系统安装的一部分进行安装。

确认版本是否正确:

  • RHEL 7/CentOS 7:
sudo yum info java-1.8.0-openjdk
<!--NeedCopy-->
  • RHEL 6/CentOS 6:
sudo yum info java-1.7.0-openjdk
<!--NeedCopy-->

预先封装的 OpenJDK 可能为早期版本。请根据需要更新为最新版本:

  • RHEL 7/CentOS 7:
sudo yum -y update java-1.8.0-openjdk
<!--NeedCopy-->
  • RHEL 6/CentOS 6:
sudo yum -y update java-1.7.0-openjdk
<!--NeedCopy-->

将以下行添加到 ~/.bashrc 文件,从而设置 JAVA_HOME 环境变量:

export JAVA\_HOME=/usr/lib/jvm/java

打开新的 shell,然后确认 Java 版本:

java -version
<!--NeedCopy-->

提示:

为避免出现问题,请务必在操作系统为 RHEL 6/CentOS 6 时仅安装 OpenJDK 1.7.0 或 1.8.0 版,或者在操作系统为 RHEL 7/CentOS 7 时仅安装 OpenJDK 1.8.0 版。删除系统中的所有其他版本的 Java。

步骤 1h:安装 PostgreSQL

Linux VDA 要求在 RHEL 6 上使用 PostgreSQL 8.4 或更高版本,或者在 RHEL 7 上使用 PostgreSQL 9.2 或更高版本。

安装以下软件包:

sudo yum -y install postgresql-server

sudo yum -y install postgresql-jdbc
<!--NeedCopy-->

此时需要执行一些安装后步骤,以便初始化数据库,并确保服务在计算机启动时启动。此操作会在 /var/lib/pgsql/data 下创建数据库文件。此命令在 PostgreSQL 8 和 PostgreSQL 9 上有所差别:

  • 仅限 RHEL 7:PostgreSQL 9
sudo postgresql-setup initdb
<!--NeedCopy-->
  • 仅限 RHEL 6:PostgreSQL 8
sudo /sbin/service postgresql initdb
<!--NeedCopy-->

步骤 1i:启动 PostgreSQL

在计算机启动时启动服务和立即启动服务:

  • 仅限 RHEL 7:PostgreSQL 9
sudo systemctl enable postgresql

sudo systemctl start postgresql
<!--NeedCopy-->
  • 仅限 RHEL 6:PostgreSQL 8
sudo /sbin/chkconfig postgresql on

sudo /sbin/service postgresql start
<!--NeedCopy-->

使用以下命令检查 PostgreSQL 版本:

psql --version
<!--NeedCopy-->

使用 psql 命令行实用程序确认数据目录已设置:

sudo -u postgres psql -c 'show data_directory'
<!--NeedCopy-->

重要:

在此版本中,为 gperftools-libs 添加了一个新的依赖项,但它在原始存储库中并不存在。可以使用 sudo rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm 命令添加新存储库。
只有 RHEL 6/CentOS 6 会受到影响。应在安装 Linux VDA 软件包之前运行该命令。

步骤 2:准备虚拟机管理程序

在支持的虚拟机管理程序上将 Linux VDA 当作虚拟机运行时,需要作出一些更改。根据使用的虚拟机管理程序平台作出以下更改。如果正在裸机硬件上运行 Linux 计算机,则无需作出任何更改。

修复 Citrix XenServer 上的时间同步问题

启用了 XenServer 时间同步功能时,在每个半虚拟化 Linux VM 中,您会发现 NTP 和 XenServer 都尝试管理系统时钟。为避免时钟与其他服务器不同步,请确保每个 Linux 客户机中的系统时钟都与 NTP 同步。这种情况要求禁用主机时间同步。无需在 HVM 模式下进行任何更改。

在某些 Linux 发行版中,如果正在运行半虚拟化 Linux 内核,并安装了 XenServer Tools,您可以检查 XenServer 时间同步功能是否存在,以及是否已在 Linux VM 中启用:

su -
cat /proc/sys/xen/independent_wallclock
<!--NeedCopy-->

此命令返回 0 或 1:

  • 0 - 时间同步功能已启用,且必须禁用。
  • 1 - 时间同步功能已禁用,无需采取任何操作。

如果 /proc/sys/xen/indepent_wallclock 文件不存在,则不需要执行以下步骤。

如果已启用,请通过向该文件写入 1 以禁用时间同步功能:

sudo echo 1 > /proc/sys/xen/independent_wallclock
<!--NeedCopy-->

要使此更改成为永久更改,并在重新启动后仍然有效,请编辑 /etc/sysctl.conf 文件并添加以下行:

xen.independent_wallclock = 1

要验证这些更改,请重新启动系统:

su -

cat /proc/sys/xen/independent_wallclock
<!--NeedCopy-->

此命令返回值 1。

在 Microsoft Hyper-V 上修复时间同步问题

安装了 Hyper-V Linux 集成服务的 Linux VM 可应用 Hyper-V 时间同步功能来使用主机操作系统的时间。为确保系统时钟始终精确可靠,必须一同启用此功能与 NTP 服务。

从管理操作系统中:

  1. 打开 Hyper-V 管理器控制台。
  2. 对于 Linux VM 的设置,请选择 Integration Services(集成服务)。
  3. 确保已选择 Time synchronization(时间同步)。

注意:

此方法与 VMware 和 XenServer 不同,这两种产品会禁用主机时间同步功能,以免与 NTP 发生冲突。Hyper-V 时间同步可以与 NTP 时间同步共存并互补。

修复 ESX 和 ESXi 上的时间同步问题

启用了 VMware 时间同步功能时,在每个半虚拟化 Linux VM 中,您会发现 NTP 和虚拟机管理程序都尝试同步系统时钟。为避免时钟与其他服务器不同步,请确保每个 Linux 客户机中的系统时钟都与 NTP 同步。这种情况要求禁用主机时间同步。

如果正在运行安装了 VMware Tools 的半虚拟化 Linux 内核:

  1. 打开 vSphere Client。
  2. 编辑 Linux VM 设置。
  3. Virtual Machine Properties(虚拟机属性)对话框中,打开 Options(选项)选项卡。
  4. 选择 VMware Tools
  5. Advanced(高级)框中,取消选中 Synchronize guest time with host(与主机同步客户机时间)。

步骤 3:向 Windows 域中添加 Linux 虚拟机 (VM)

Linux VDA 支持多种向 Active Directory (AD) 域添加 Linux 计算机的方法:

  • Samba Winbind
  • Quest Authentication Service
  • Centrify DirectControl
  • SSSD

根据所选的方法,按说明执行操作。

注意:

为 Linux VDA 中的本地帐户和 AD 中的帐户使用相同的用户名时,会话启动可能会失败。

Samba Winbind

安装或更新所需软件包:

sudo yum -y install samba-winbind samba-winbind-clients krb5-workstation authconfig oddjob-mkhomedir
<!--NeedCopy-->

在计算机启动时启用要启动的 Winbind 守护程序

Winbind 守护程序必须配置为在计算机启动时启动:

sudo /sbin/chkconfig winbind on
<!--NeedCopy-->

配置 Winbind 身份验证

通过使用 Winbind 将计算机配置为执行 Kerberos 身份验证:

sudo authconfig --disablecache --disablesssd --disablesssdauth --enablewinbind --enablewinbindauth --disablewinbindoffline --smbsecurity=ads --smbworkgroup=domain --smbrealm=REALM --krb5realm=REALM --krb5kdc=fqdn-of-domain-controller --winbindtemplateshell=/bin/bash --enablemkhomedir --updateall
<!--NeedCopy-->

其中,REALM 是大写的 Kerberos 领域名称,而 domain 是域的 NetBIOS 名称。

如果需要通过 DNS 查找 KDC 服务器和领域名称,请将以下两个选项添加至前面的命令:

--enablekrb5kdcdns --enablekrb5realmdns

请忽略 authconfig 命令返回的有关 winbind 服务无法启动的任何错误。authconfig 尝试在计算机尚未加入域的情况下启动 winbind 服务时,可能会出现这些错误。

打开 /etc/samba/smb.conf 并将以下条目添加到 [Global] 部分下方,但要放在 authconfig 工具生成的部分后面:

kerberos method = secrets and keytab
winbind refresh tickets = true

Linux VDA 需要使用系统 keytab 文件 /etc/krb5.keytab 以执行身份验证并向 Delivery Controller 注册。计算机首次加入域后,前面的 kerberos method 设置将强制 Winbind 创建系统 keytab 文件。

加入 Windows 域

您的域控制器必须可访问,而且您必须具有有权将计算机添加到域的 Active Directory 用户帐户。

sudo net ads join REALM -U user
<!--NeedCopy-->

REALM 是大写的 Kerberos 领域名称,user 是有权将计算机添加到域的域用户。

为 Winbind 配置 PAM

默认情况下,Winbind PAM 模块 (pam_winbind) 的配置不启用 Kerberos 票据缓存和主目录的创建。打开 /etc/security/pam_winbind.conf,并在 [Global] 部分下添加或更改以下条目:

krb5_auth = yes
krb5_ccache_type = FILE
mkhomedir = yes

确保删除每个设置中的任何前置分号。这些更改要求重新启动 Winbind 守护程序:

sudo /sbin/service winbind restart
<!--NeedCopy-->

提示:

仅当计算机加入域后,winbind 守护程序才会始终保持运行状态。

打开 /etc/krb5.conf 并将 [libdefaults] 部分下方的以下设置从 KEYRING 更改为 FILE 类型:

default_ccache_name = FILE:/tmp/krb5cc_%{uid}

验证域成员身份

Delivery Controller 要求所有 VDA 计算机(Windows 和 Linux)都要在 Active Directory 中有一个计算机对象。

运行 Samba 的 net ads 命令验证计算机是否已加入域:

sudo net ads testjoin
<!--NeedCopy-->

运行以下命令验证额外的域和计算机对象信息:

sudo net ads info
<!--NeedCopy-->

验证 Kerberos 配置

为了确保 Kerberos 已正确配置为可与 Linux VDA 配合使用,请检查系统 keytab 文件是否已创建并包含有效密钥:

sudo klist -ke
<!--NeedCopy-->

此命令显示各种主体名称与密码套件组合可用的密钥列表。运行 Kerberos kinit 命令,使用这些密钥向域控制器验证计算机的身份:

sudo kinit -k MACHINE$@REALM
<!--NeedCopy-->

计算机和领域名称必须指定为大写。美元符号 ($) 必须使用反斜杠 (\) 进行转义,以免发生 shell 替换。在某些环境中,DNS 域名与 Kerberos 领域名称不同。请确保使用领域名称。如果此命令成功运行,则不会显示任何输出。

使用以下命令验证计算机帐户的 TGT 票据已缓存:

sudo klist
<!--NeedCopy-->

使用以下命令检查计算机的帐户详细信息:

sudo net ads status
<!--NeedCopy-->

验证用户身份验证

使用 wbinfo 工具验证是否可向域验证域用户的身份:

wbinfo --krb5auth=domain\username%password
<!--NeedCopy-->

这里指定的域为 AD 域名,而不是 Kerberos 领域名称。对于 bash shell,必须使用另一个反斜杠对反斜杠 (\) 字符进行转义。此命令返回一条成功或失败消息。

要验证 Winbind PAM 模块是否已正确配置,请使用域用户帐户登录 Linux VDA。该域用户帐户以前未曾使用过。

ssh localhost -l domain\username

id -u
<!--NeedCopy-->

检查 Kerberos 凭据缓存中的票据是否有效且未过期:

klist
<!--NeedCopy-->

退出会话:

exit
<!--NeedCopy-->

直接登录 Gnome 或 KDE 控制台也可以执行类似的测试。在进行域加入验证后继续执行步骤 4:安装 Linux VDA

Quest Authentication Service

在域控制器上配置 Quest

假定您已在 Active Directory 域控制器上安装并配置了 Quest 软件,而且已获得管理权限,有权在 Active Directory 中创建计算机对象。

允许域用户登录 Linux VDA 计算机

为了让域用户能够在 Linux VDA 计算机上建立 HDX 会话:

  1. 在 Active Directory 用户和计算机管理控制台中,为该用户帐户打开 Active Directory 用户属性。
  2. 选择 Unix Account(Unix 帐户)选项卡。
  3. 选中 Unix-enabled(已启用 Unix)。
  4. Primary GID Number(首选 GID 编号)设置为实际域用户组的组 ID。

注意:

这些说明相当于设置域用户,以便他们可以使用控制台、RDP、SSH 或任何其他远程协议进行登录。

在 Linux VDA 上配置 Quest

SELinux 策略强制实施解决方法

默认 RHEL 环境会强制实施 SELinux。此强制功能会影响 Quest 使用的 Unix 域套接字 IPC 机制,并阻止域用户登录。

解决此问题的最便捷的方法是禁用 SELinux。以 root 用户身份,编辑 /etc/selinux/config 并更改 SELinux 设置:

SELINUX=permissive

此更改要求重新启动计算机:

reboot
<!--NeedCopy-->

重要:

请谨慎使用此设置。禁用后重新启用 SELinux 策略强制实施会导致完全锁定,即便是对 root 用户和其他本地用户也是如此。

配置 VAS 守护程序

必须启用并断开自动续订 Kerberos 票据功能。必须禁用身份验证(脱机登录)功能。

sudo /opt/quest/bin/vastool configure vas vasd auto-ticket-renew-interval 32400

sudo /opt/quest/bin/vastool configure vas vas_auth allow-disconnected-auth false
<!--NeedCopy-->

此命令将续订间隔设为 9 小时(32400 秒),即比默认的 10 小时票据生命周期短 1 小时。请在票据生命周期较短的系统上设置较低的值。

配置 PAM 和 NSS

要启用通过 HDX 进行的域用户登录以及其他服务(例如 su、ssh 和 RDP),请运行以下命令以手动配置 PAM 和 NSS:

sudo /opt/quest/bin/vastool configure pam

sudo /opt/quest/bin/vastool configure nss
<!--NeedCopy-->

加入 Windows 域

使用 Quest vastool 命令将 Linux 计算机加入到 Active Directory 域中:

sudo /opt/quest/bin/vastool -u user join domain-name
<!--NeedCopy-->

user 为有权将计算机加入 Active Directory 域的任何域用户。domain-name 为域的 DNS 名称,例如 example.com。

验证域成员身份

Delivery Controller 要求所有 VDA 计算机(Windows 和 Linux)都要在 Active Directory 中有一个计算机对象。验证 Quest 加入的 Linux 计算机是否位于域中:

sudo /opt/quest/bin/vastool info domain
<!--NeedCopy-->

如果计算机已加入域,此命令会返回域名。如果计算机未加入任何域,则会显示以下错误:

ERROR: No domain could be found.
ERROR: VAS_ERR_CONFIG: at ctx.c:414 in _ctx_init_default_realm
default_realm not configured in vas.conf. Computer may not be joined to domain

验证用户身份验证

要验证 Quest 是否可以通过 PAM 对域用户进行身份验证,请使用域用户帐户登录 Linux VDA。该域用户帐户以前未曾使用过。

ssh localhost -l domain\username

id -u
<!--NeedCopy-->

检查是否为 id -u 命令返回的 UID 创建了对应的 Kerberos 凭据缓存文件:

ls /tmp/krb5cc_uid
<!--NeedCopy-->

检查 Kerberos 凭据缓存中的票据是否有效且未过期:

/opt/quest/bin/vastool klist
<!--NeedCopy-->

退出会话:

exit
<!--NeedCopy-->

直接登录 Gnome 或 KDE 控制台也可以执行类似的测试。在进行域加入验证后继续执行步骤 4:安装 Linux VDA

Centrify DirectControl

加入 Windows 域

安装 Centrify DirectControl Agent 后,请使用 Centrify adjoin 命令将 Linux 计算机加入 Active Directory 域:

su –
adjoin -w -V -u user domain-name
<!--NeedCopy-->

user 参数为有权将计算机加入 Active Directory 域的任何 Active Directory 域用户。domain-name 是将 Linux 计算机加入到的域的名称。

验证域成员身份

Delivery Controller 要求所有 VDA 计算机(Windows 和 Linux)都要在 Active Directory 中有一个计算机对象。验证 Centrify 加入的 Linux 计算机是否位于域中:

su –

adinfo
<!--NeedCopy-->

检查 Joined to domain 值是否有效以及 CentrifyDC mode 是否返回了 connected。如果模式仍然卡在启动状态,则表明 Centrify 客户端遇到了服务器连接或身份验证问题。

使用以下命令可获得更全面的系统和诊断信息:

adinfo --sysinfo all

adinfo –diag
<!--NeedCopy-->

测试与各种 Active Directory 和 Kerberos 服务的连接。在进行域加入验证后继续执行步骤 4:安装 Linux VDA

adinfo --test
<!--NeedCopy-->

SSSD

如果您使用的是 SSSD,请按照此部分中的说明进行操作。此部分包含有关如何将 Linux VDA 计算机加入 Windows 域的说明以及如何配置 Kerberos 身份验证的指导。

要在 RHEL 和 CentOS 上设置 SSSD,请执行以下操作:

  1. 使用 Samba 加入域并创建主机 keytab
  2. 设置 SSSD
  3. 配置 NSS/PAM
  4. 验证 Kerberos 配置
  5. 验证用户身份验证

必备软件

Active Directory 提供程序最初是在 SSSD 版本 1.9.0 中引入的。如果您使用的是早期版本,请按照为 LDAP 提供程序配置 Active Directory 中提供的说明进行操作。

已按照本文中的说明测试和验证了以下环境。

  • RHEL 7.3 或更高版本/CentOS 7.3 或更高版本
  • Linux VDA 1.3 版或更高版本

使用 Samba 加入域并创建主机 keytab

SSSD 并不提供用于加入域和管理系统 keytab 文件的 Active Directory 客户端功能。可以改为使用 adclirealmdWinbindSamba

本节信息只介绍 Samba 方法。对于 realmd,请参阅 RHEL 或 CentOS 文档。必须在配置 SSSD 之前执行这些步骤。

在正确配置了以下文件的 Linux 客户端上:

  • /etc/krb5.conf
  • /etc/samba/smb.conf:

为计算机配置 Samba 和 Kerberos 身份验证:

sudo authconfig --smbsecurity=ads --smbworkgroup=domain --smbrealm=REALM --krb5realm=REALM --krb5kdc=fqdn-of-domain-controller --update
<!--NeedCopy-->

其中,REALM 是大写的 Kerberos 领域名称,domain 是 Active Directory 域的简短 NetBIOS 名称。

如果需要通过 DNS 查找 KDC 服务器和领域名称,请将以下两个选项添加至前面的命令:

--enablekrb5kdcdns --enablekrb5realmdns

打开 /etc/samba/smb.conf 并将以下条目添加到 [Global] 部分下方,但要放在 authconfig 工具生成的部分后面:

kerberos method = secrets and keytab

加入 Windows 域。请确保域控制器可访问,而且您具有有权将计算机添加到域的 Active Directory 用户帐户。

sudo net ads join REALM -U user
<!--NeedCopy-->

REALM 是大写的 Kerberos 领域名称,user 是有权将计算机添加到域的域用户。

设置 SSSD

设置 SSSD 的步骤如下:

  • 在 Linux VDA 上安装 sssd-ad 软件包。
  • 对各种文件(例如 sssd.conf)进行配置更改。
  • 启动 sssd 服务。

sssd.conf 配置示例(可以根据需要添加额外的选项):

[sssd]
config_file_version = 2
domains = ad.example.com
services = nss, pam

[domain/ad.example.com]
# Uncomment if you need offline logins
# cache_credentials = true

id_provider = ad
auth_provider = ad
access_provider = ad
ldap_id_mapping = true
ldap_schema = ad

# Should be specified as the lower-case version of the long version of the Active Directory domain.
ad_domain = ad.example.com

# Kerberos settings
krb5_ccachedir = /tmp
krb5_ccname_template = FILE:%d/krb5cc_%U

# Uncomment if service discovery is not working
# ad_server = server.ad.example.com

# Comment out if the users have the shell and home dir set on the AD side
default_shell = /bin/bash
fallback_homedir = /home/%d/%u

# Uncomment and adjust if the default principal SHORTNAME$@REALM is not available
# ldap_sasl_authid = host/client.ad.example.com@AD.EXAMPLE.COM
<!--NeedCopy-->

ad.example.comserver.ad.example.com 替换为相应的值。有关详细信息,请参阅 sssd-ad(5) - Linux 手册页

对 sssd.conf 设置文件所有权和权限:

chown root:root /etc/sssd/sssd.conf
chmod 0600 /etc/sssd/sssd.conf
restorecon /etc/sssd/sssd.conf

配置 NSS/PAM

RHEL/CentOS:

使用 authconfig 启用 SSSD。安装 oddjob mkhomedir 以确保主目录创建与 SELinux 兼容:

authconfig --enablesssd --enablesssdauth --enablemkhomedir –-update

sudo service sssd start

sudo chkconfig sssd on
<!--NeedCopy-->

验证 Kerberos 配置

检查系统 keytab 文件是否已创建并包含有效密钥:

sudo klist -ke
<!--NeedCopy-->

此命令显示各种主体名称与密码套件组合可用的密钥列表。运行 Kerberos kinit 命令,以使用这些密钥向域控制器验证计算机的身份:

sudo kinit –k MACHINE$@REALM
<!--NeedCopy-->

计算机和领域名称必须指定为大写。美元符号 ($) 必须使用反斜杠 (**\**) 进行转义,以免发生 shell 替换。在某些环境中,DNS 域名与 Kerberos 领域名称不同。请确保使用领域名称。如果此命令成功运行,则不会显示任何输出。

使用以下命令验证计算机帐户的 TGT 票据已缓存:

sudo klist
<!--NeedCopy-->

验证用户身份验证

使用 getent 命令确认支持的登录格式以及 NSS 是否工作:

sudo getent passwd DOMAIN\username
<!--NeedCopy-->

DOMAIN 参数指示简短形式的域名。如果需要使用另一种登录格式,请先使用 getent 命令进行验证。

支持的登录格式如下:

  • 低级别登录名称:DOMAIN\username
  • UPN:username@domain.com
  • NetBIOS 前缀格式:username@DOMAIN

要验证 SSSD PAM 模块是否已正确配置,请使用域用户帐户登录 Linux VDA。该域用户帐户以前未曾使用过。

sudo ssh localhost –l DOMAIN\username

id -u
<!--NeedCopy-->

检查是否为以下命令返回的 uid 创建了对应的 Kerberos 凭据缓存文件:

ls /tmp/krb5cc_{uid}
<!--NeedCopy-->

检查用户 Kerberos 凭据缓存中的票据是否有效且未过期。在进行域加入验证后继续执行步骤 4:安装 Linux VDA

klist
<!--NeedCopy-->

步骤 4:安装 Linux VDA

步骤 4a:卸载旧版本

如果之前安装了更低版本的 Linux VDA,请先卸载该版本,然后再安装新版本。

  1. 停止 Linux VDA 服务:

    sudo /sbin/service ctxvda stop
    
    sudo /sbin/service ctxhdx stop
    <!--NeedCopy-->
    
  2. 卸载软件包:

    sudo rpm -e XenDesktopVDA
    <!--NeedCopy-->
    

注意:

支持从先前的两个版本进行升级。

注意:

自版本 1.3 起,安装路径已更改。在早期版本中,安装组件位于 /usr/local/。在新版本中,安装组件位于 /opt/Citrix/VDA/

要运行命令,需要提供完整路径;或者,也可以将 /opt/Citrix/VDA/sbin/opt/Citrix/VDA/bin 添加到系统路径。

步骤 4b:下载 Linux VDA 软件包

转至 Citrix Web 站点并根据您的 Linux 发行版下载相应的 Linux VDA 软件包。

步骤 4c:安装 Linux VDA

使用 Yum 安装 Linux VDA 软件:

对于 RHEL 7/CentOS 7:

sudo yum install -y XenDesktopVDA-7.15.0.404-1.el7_3.x86_64.rpm
<!--NeedCopy-->

对于 RHEL 6.9:

sudo yum install -y XenDesktopVDA-7.15.0.404-1.el6_9.x86_64.rpm
<!--NeedCopy-->

对于 RHEL 6.6/CentOS 6.6:

sudo yum install -y XenDesktopVDA-7.15.0.404-1.el6_6.x86_64.rpm
<!--NeedCopy-->

使用 RPM 软件包管理器安装 Linux VDA 软件。在此之前,您必须解决以下依赖项:

对于 RHEL 7/CentOS 7:

sudo rpm -i XenDesktopVDA-7.15.0.404-1.el7_3.x86_64.rpm
<!--NeedCopy-->

对于 RHEL 6.9:

sudo rpm -i XenDesktopVDA-7.15.0.404-1.el6_9.x86_64.rpm
<!--NeedCopy-->

对于 RHEL 6.6/CentOS 6.6:

sudo rpm -i XenDesktopVDA-7.15.0.404-1.el6_6.x86_64.rpm
<!--NeedCopy-->

RHEL 7 的 RPM 依赖项列表:

postgresql-server >= 9.2

postgresql-jdbc >= 9.2

java-1.8.0-openjdk >= 1.8.0

ImageMagick >= 6.7.8.9

firewalld >= 0.3.9

policycoreutils-python >= 2.0.83

dbus >= 1.6.12

dbus-x11 >= 1.6.12

xorg-x11-server-utils >= 7.7

xorg-x11-xinit >= 1.3.2

libXpm >= 3.5.10

libXrandr >= 1.4.1

libXtst >= 1.2.2

motif >= 2.3.4

pam >= 1.1.8

util-linux >= 2.23.2

bash >= 4.2

findutils >= 4.5

gawk >= 4.0

sed >= 4.2

cups >= 1.6.0

foomatic-filters >= 4.0.9

openldap >= 2.4

cyrus-sasl >= 2.1

cyrus-sasl-gssapi >= 2.1

libxml2 >= 2.9

python-requests >= 2.6.0

gperftools-libs >= 2.4

xorg-x11-server-Xorg >= 1.17

xorg-x11-server-Xorg < 1.18

rpmlib(FileDigests) <= 4.6.0-1

rpmlib(PayloadFilesHavePrefix) <= 4.0-1

rpmlib(CompressedFileNames) <= 3.0.4-1

rpmlib(PayloadIsXz) <= 5.2-1
<!--NeedCopy-->

RHEL 6.9 的 RPM 依赖项列表:

postgresql-jdbc >= 8.4

postgresql-server >= 8.4

java-1.7.0-openjdk >= 1.7.0

ImageMagick >= 6.5.4.7

GConf2 >= 2.28.0

system-config-firewall-base >= 1.2.27

policycoreutils-python >= 2.0.83

xorg-x11-server-utils >= 7.7

xorg-x11-xinit >= 1.0.9

ConsoleKit >= 0.4.1

dbus >= 1.2.24

dbus-x11 >= 1.2.24

libXpm >= 3.5.10

libXrandr >= 1.4.1

libXtst >= 1.2.2

openmotif >= 2.3.3

pam >= 1.1.1

util-linux-ng >= 2.17.2

bash >= 4.1

findutils >= 4.4

gawk >= 3.1

sed >= 4.2

cups >= 1.4.0

foomatic >= 4.0.0

openldap >= 2.4

cyrus-sasl >= 2.1

cyrus-sasl-gssapi >= 2.1

libxml2 >= 2.7

python-requests >= 2.6.0

gperftools-libs >= 2.0

xorg-x11-server-Xorg >= 1.17

xorg-x11-server-Xorg < 1.18

rpmlib(FileDigests) <= 4.6.0-1

rpmlib(PayloadFilesHavePrefix) <= 4.0-1

rpmlib(CompressedFileNames) <= 3.0.4-1

rpmlib(PayloadIsXz) <= 5.2-1
<!--NeedCopy-->

RHEL 6.6/CentOS 6.6 的 RPM 依赖项列表:

postgresql-jdbc >= 8.4

postgresql-server >= 8.4

java-1.7.0-openjdk >= 1.7.0

ImageMagick >= 6.5.4.7

GConf2 >= 2.28.0

system-config-firewall-base >= 1.2.27

policycoreutils-python >= 2.0.83

xorg-x11-server-utils >= 7.7

xorg-x11-xinit >= 1.0.9

ConsoleKit >= 0.4.1

dbus >= 1.2.24

dbus-x11 >= 1.2.24

libXpm >= 3.5.10

libXrandr >= 1.4.1

libXtst >= 1.2.2

openmotif >= 2.3.3

pam >= 1.1.1

util-linux-ng >= 2.17.2

bash >= 4.1

findutils >= 4.4

gawk >= 3.1

sed >= 4.2

cups >= 1.4.0

foomatic >= 4.0.0

openldap >= 2.4

cyrus-sasl >= 2.1

cyrus-sasl-gssapi >= 2.1

libxml2 >= 2.7

python-requests >= 2.6.0

gperftools-libs >= 2.0

xorg-x11-server-Xorg >= 1.15

xorg-x11-server-Xorg < 1.16

rpmlib(FileDigests) <= 4.6.0-1

rpmlib(PayloadFilesHavePrefix) <= 4.0-1

rpmlib(CompressedFileNames) <= 3.0.4-1

rpmlib(PayloadIsXz) <= 5.2-1
<!--NeedCopy-->

步骤 4d:升级 Linux VDA(可选)

可以使用 Yum 将 Linux VDA 软件从 7.14 版和 7.13 版进行升级:

对于 RHEL 7/CentOS 7:

sudo yum install -y XenDesktopVDA-7.15.0.404-1.el7_3.x86_64.rpm
<!--NeedCopy-->

对于 RHEL 6.9:

sudo yum install -y XenDesktopVDA-7.15.0.404-1.el6_9.x86_64.rpm
<!--NeedCopy-->

对于 RHEL 6.6/CentOS 6.6:

sudo yum install -y XenDesktopVDA-7.15.0.404-1.el6_6.x86_64.rpm
<!--NeedCopy-->

使用 RPM 软件包管理器升级 Linux VDA 软件:

对于 RHEL 7/CentOS 7:

sudo rpm -U XenDesktopVDA-7.15.0.404-1.el7_3.x86_64.rpm
<!--NeedCopy-->

对于 RHEL 6.9:

sudo rpm -U XenDesktopVDA-7.15.0.404-1.el6_9.x86_64.rpm
<!--NeedCopy-->

对于 RHEL 6.6/CentOS 6.6:

sudo rpm -U XenDesktopVDA-7.15.0.404-1.el6_6.x86_64.rpm
<!--NeedCopy-->

重要:

升级软件后重新启动 Linux VDA 计算机。

步骤 5:安装 NVIDIA GRID 驱动程序

启用 HDX 3D Pro 需要执行额外的安装步骤,以在虚拟机管理程序和 VDA 计算机上安装必备的图形驱动程序。

配置以下设置:

  1. Citrix XenServer
  2. VMware ESX

根据所选的虚拟机管理程序,按以下说明执行操作。

Citrix XenServer:

本部分内容详细介绍了如何在 Citrix XenServer 中逐步安装和配置 NVIDIA GRID 驱动程序。

VMware ESX:

请按照本指南中包含的信息进行操作,为 VMware ESX 安装和配置 NVIDIA GRID 驱动程序。

VDA 计算机:

按照这些步骤为每个 Linux VM 客户机安装和配置驱动程序:

  1. 开始前,请确保 Linux VM 已关闭。
  2. 在 XenCenter 中,将处于 GPU 直通模式的 GPU 添加至 VM。
  3. 启动 RHEL VM。

要准备计算机以使用 NVIDIA GRID 驱动程序,请运行以下命令:

yum install gcc

yum install "kernel-devel-$(uname -r)"

systemctl set-default multi-user.target
<!--NeedCopy-->

请按照 Red Hat Enterprise Linux 文档中的步骤安装 NVIDIA GRID 驱动程序。

注意:

安装 GPU 驱动程序期间,为每个问题选择默认答案 (no)。

重要:

在启用 GPU 直通后,无法再通过 XenCenter 访问 Linux VM。使用 SSH 进行连接。

NVIDIA smi 代码段的示意图

为图形卡设置正确的配置:

etc/X11/ctx-nvidia.sh

要利用高分辨率和多监视器功能,您需要有效的 NVIDIA 许可证。要申请许可证,请按照“GRID Licensing Guide.pdf - DU-07757-001 September 2015”产品文档执行操作。

步骤 6:配置 Linux VDA

安装软件包后,必须运行 ctxsetup.sh 脚本来配置 Linux VDA。执行任何更改之前,该脚本都会验证环境,确保所有依赖项都已安装。如有必要,可以随时重新运行该脚本以更改设置。

可以按照提示手动运行脚本,也可以采用预先配置的响应自动运行脚本。继续操作前,请查看该脚本的帮助信息:

sudo /opt/Citrix/VDA/sbin/ctxsetup.sh --help
<!--NeedCopy-->

提示配置

运行会提示各种问题的手动配置:

sudo /opt/Citrix/VDA/sbin/ctxsetup.sh
<!--NeedCopy-->

自动配置

自动安装时,通过环境变量提供设置脚本所需的选项。如果所需的所有变量都存在,脚本不会提示您提供任何信息。

支持的环境变量包括:

  • CTX_XDL_SUPPORT_DDC_AS_CNAME = Y | N – Linux VDA 支持使用 DNS CNAME 记录指定 Delivery Controller 名称。默认情况下设置为 N。
  • CTX_XDL_DDC_LIST = list-ddc-fqdns – Linux VDA 要求提供由空格分隔的 Delivery Controller 完全限定域名 (FQDN) 列表以用于向 Delivery Controller 注册。必须至少指定一个 FQDN 或 CNAME 别名。
  • CTX_XDL_VDA_PORT = port-number – Linux VDA 通过 TCP/IP 端口(默认为端口 80)与 Delivery Controller 通信。
  • CTX_XDL_REGISTER_SERVICE = Y | N – 在启动计算机后启动 Linux Virtual Desktop 服务。默认情况下,该值设置为 Y。
  • CTX_XDL_ADD_FIREWALL_RULES = Y | N – Linux Virtual Desktop 服务要求允许传入网络连接通过系统防火墙。您可以在系统防火墙中自动为 Linux Virtual Desktop 打开所需端口(默认为端口 80 和 1494)。默认情况下设置为 Y。
  • CTX_XDL_AD_INTEGRATION = 1 | 2 | 3 | 4 - Linux VDA 要求使用 Kerberos 配置设置向 Delivery Controller 进行身份验证。Kerberos 配置根据系统上已安装和已配置的 Active Directory 集成工具确定。指定要使用且受支持的 Active Directory 集成方法:
    • 1 – Samba Winbind
    • 2 – Quest Authentication Service
    • 3 - Centrify DirectControl
    • 4 - SSSD
  • CTX_XDL_HDX_3D_PRO = Y | N – Linux VDA 支持 HDX 3D Pro,这是一组 GPU 加速技术,旨在优化富图形应用程序的虚拟化水平。如果选择了 HDX 3D Pro,则要为 VDI 桌面(单会话)模式配置 Virtual Delivery Agent -(即 CTX_XDL_VDI_MODE=Y)。
  • CTX_XDL_VDI_MODE = Y | N – 将计算机配置为专用桌面交付模型 (VDI) 还是托管共享桌面交付模型。对于 HDX 3D Pro 环境,将此变量设置为 Y。默认情况下,此变量设置为 N。
  • CTX_XDL_SITE_NAME = dns-name – Linux VDA 通过 DNS 发现 LDAP 服务器。要将 DNS 搜索结果限制为本地站点,应指定 DNS 站点名称。默认情况下,此变量设置为 <none>
  • CTX_XDL_LDAP_LIST = list-ldap-servers – Linux VDA 查询 DNS 来发现 LDAP 服务器。如果 DNS 无法提供 LDAP 服务记录,您可以提供以空格分隔的 LDAP FQDN(带有 LDAP 端口)列表。例如 ad1.mycompany.com:389。默认情况下,此变量设置为 <none>
  • CTX_XDL_SEARCH_BASE = search-base-set – Linux VDA 通过设置为 Active Directory 域根的搜索库来查询 LDAP(例如,DC=mycompany,DC=com)。为提高搜索性能,可以指定搜索基础(例如 OU=VDI,DC=mycompany,DC=com)。默认情况下,此变量设置为 <none>
  • CTX_XDL_START_SERVICE = Y | N – 在完成 Linux VDA 配置后,是否启动 Linux VDA 服务。默认情况下设置为 Y。

设置环境变量并运行配置脚本:

export CTX_XDL_SUPPORT_DDC_AS_CNAME=Y|N

export CTX_XDL_DDC_LIST=list-ddc-fqdns

export CTX_XDL_VDA_PORT=port-number

export CTX_XDL_REGISTER_SERVICE=Y|N

export CTX_XDL_ADD_FIREWALL_RULES=Y|N

export CTX_XDL_AD_INTEGRATION=1|2|3|4

export CTX_XDL_HDX_3D_PRO=Y|N

export CTX_XDL_VDI_MODE=Y|N

export CTX_XDL_SITE_NAME=dns-name

export CTX_XDL_LDAP_LIST=list-ldap-servers

export CTX_XDL_SEARCH_BASE=search-base-set

export CTX_XDL_START_SERVICE=Y|N

sudo -E /opt/Citrix/VDA/sbin/ctxsetup.sh
<!--NeedCopy-->

运行 sudo 命令时,键入 -E 选项以将现有环境变量传递给它创建的新 shell。Citrix 建议使用前面的命令并加上 #!/bin/bash 作为第一行来创建 shell 脚本文件。

或者,您可以使用单个命令指定所有参数:

sudo CTX_XDL_SUPPORT_DDC_AS_CNAME=Y|N \

CTX_XDL_DDC_LIST=list-ddc-fqdns \

CTX_XDL_VDA_PORT=port-number \

CTX_XDL_REGISTER_SERVICE=Y|N \

CTX_XDL_ADD_FIREWALL_RULES=Y|N \

CTX_XDL_AD_INTEGRATION=1|2|3|4 \

CTX_XDL_HDX_3D_PRO=Y|N \

CTX_XDL_VDI_MODE=Y|N \

CTX_XDL_SITE_NAME=dns-name \

CTX_XDL_LDAP_LIST=list-ldap-servers \

CTX_XDL_SEARCH_BASE=search-base-set \

CTX_XDL_START_SERVICE=Y|N \

/opt/Citrix/VDA/sbin/ctxsetup.sh
<!--NeedCopy-->

删除配置更改

在某些情形下,您可能需要删除 ctxsetup.sh 脚本对配置所做的更改,但不卸载 Linux VDA 软件包。

继续操作前,请查看此脚本的帮助信息:

sudo /opt/Citrix/VDA/sbin/ctxcleanup.sh --help
<!--NeedCopy-->

删除配置更改:

sudo /opt/Citrix/VDA/sbin/ctxcleanup.sh
<!--NeedCopy-->

重要:

此脚本会从数据库删除所有配置数据,从而使 Linux VDA 无法使用。

配置日志

ctxsetup.shctxcleanup.sh 脚本会在控制台上显示错误,并将其他信息写入配置日志文件 /tmp/xdl.configure.log

重新启动 Linux VDA 服务,确保更改生效。

步骤 7:运行 Linux VDA

使用 ctxsetup.sh 脚本配置 Linux VDA 后,可以运行以下命令来控制 Linux VDA。

启动 Linux VDA:

启动 Linux VDA 服务:

sudo /sbin/service ctxhdx start

sudo /sbin/service ctxvda start
<!--NeedCopy-->

停止 Linux VDA:

停止 Linux VDA 服务:

sudo /sbin/service ctxvda stop

sudo /sbin/service ctxhdx stop
<!--NeedCopy-->

重新启动 Linux VDA:

重新启动 Linux VDA 服务:

sudo /sbin/service ctxvda stop

sudo /sbin/service ctxhdx restart

sudo /sbin/service ctxvda start
<!--NeedCopy-->

检查 Linux VDA 的状态:

要检查 Linux VDA 服务的运行状态,请执行以下操作:

sudo /sbin/service ctxvda status

sudo /sbin/service ctxhdx status
<!--NeedCopy-->

步骤 8:在 XenApp 或 XenDesktop 中创建计算机目录

创建计算机目录和添加 Linux VDA 计算机的过程与传统的 Windows VDA 方法类似。有关如何完成这些任务的更加详细的说明,请参阅创建计算机目录管理计算机目录

创建包含 Linux VDA 计算机的计算机目录时会面临一些限制,使得该过程不同于为 Windows VDA 计算机创建计算机目录:

  • 对于操作系统,请选择:
    • “服务器操作系统”选项(对于托管共享桌面交付模型)。
    • “桌面操作系统”选项(对于 VDI 专用桌面交付模型)。
  • 确保计算机未执行电源管理设置。
  • 由于 Linux VDA 不支持 MCS,请选择 PVS其他服务或技术(现有映像)部署方法。
  • 请勿在同一个计算机目录中混合使用 Linux 和 Windows VDA 计算机。

注意:

早期版本的 Citrix Studio 不支持“Linux 操作系统”的概念。但是,选择 Windows Server 操作系统或服务器操作系统选项等同于使用托管共享桌面交付模型。选择 Windows 桌面操作系统或桌面操作系统选项等同于使用每计算机一个用户交付模型。

提示:

如果删除计算机后将其重新加入 Active Directory 域,则必须删除计算机,然后将其重新添加到计算机目录。

步骤 9:在 XenApp 或 XenDesktop 中创建交付组

创建交付组和添加包含 Linux VDA 计算机的计算机目录的过程与 Windows VDA 计算机几乎相同。有关如何完成这些任务的更加详细的说明,请参阅创建交付组

创建含有 Linux VDA 计算机目录的交付组时会面临以下限制:

  • 对于交付类型,请选择“桌面”或“应用程序”。
  • 确保所选的 AD 用户和组已正确配置,可以登录到 Linux VDA 计算机。
  • 请勿允许未经身份验证的(匿名)用户登录。
  • 请勿在交付组中混入含有 Windows 计算机的计算机目录。

重要:

Linux VDA 1.4 及更高版本支持发布应用程序。但是,Linux VDA 不支持将桌面和应用程序交付给相同的计算机。