将 NIS 与活动目录集成

This article describes how to integrate NIS with Windows Active Directory (AD) on the Linux VDA by using SSSD. The Linux VDA is considered a component of Citrix Virtual Apps and Desktops. As a result, it fits tightly into the Windows AD environment.

使用 NIS 而非 AD 作为 UID 和 GID 提供程序,要求帐户信息(用户名和密码组合)在 AD 和 NIS 中保持一致。

注意:

身份验证仍由 AD 服务器执行。不支持 NIS+。如果使用 NIS 作为 UID 和 GID 提供程序,则不再使用 Windows 服务器中的 POSIX 属性。

提示:

此方法代表了一种已弃用的 Linux VDA 部署方式,仅用于特殊用例。对于 RHEL 发行版,请按照 (/zh-cn/linux-virtual-delivery-agent/2511/installation-overview/manual-installation-overview/redhat.html) 中的说明进行操作。对于 Ubuntu 发行版,请按照 (/zh-cn/linux-virtual-delivery-agent/2511/installation-overview/manual-installation-overview/ubuntu.html) 中的说明进行操作。

什么是 SSSD?

SSSD 是一个系统守护程序。其主要功能是通过一个通用框架提供对远程资源的识别和身份验证访问,该框架可以为系统提供缓存和脱机支持。它提供 PAM 和 NSS 模块,并且将来可以支持基于 D-BUS 的接口以获取扩展的用户信息。它还提供了一个更好的数据库来存储本地用户帐户和扩展用户数据。

将 NIS 与 AD 集成

要将 NIS 与 AD 集成,请完成以下步骤:

步骤 1:将 Linux VDA 添加为 NIS 客户端

配置 NIS 客户端:

yum –y install ypbind rpcbind oddjob-mkhomedir
<!--NeedCopy-->

设置 NIS 域:

ypdomainname nis.domain
echo "NISDOMAIN=nis.domain" >> /etc/sysconfig/network
<!--NeedCopy-->

/etc/hosts 中添加 NIS 服务器和客户端的 IP 地址:

{NIS server IP address}   server.nis.domain nis.domain

Configure NIS by authconfig:

sudo authconfig --enablenis --nisdomain=nis.domain --nisserver=server.nis.domain --enablemkhomedir --update
<!--NeedCopy-->

nis.domain 表示 NIS 服务器的域名。server.nis.domain 是 NIS 服务器的主机名,也可以是 NIS 服务器的 IP 地址。

配置 NIS 服务:

sudo systemctl start rpcbind ypbind

sudo systemctl enable rpcbind ypbind
<!--NeedCopy-->

确保 NIS 配置正确:

ypwhich
<!--NeedCopy-->

验证帐户信息可从 NIS 服务器获取:

getent passwd nisaccount
<!--NeedCopy-->

注意:

nisaccount 表示 NIS 服务器上的真实 NIS 帐户。确保 UID、GID、主目录和登录 shell 配置正确。

步骤 2:使用 Samba 加入域并创建主机密钥表

SSSD 不提供用于加入域和管理系统密钥表文件的 AD 客户端功能。实现这些功能有以下几种方法,包括:

  • adcli
  • realmd
  • Winbind
  • Samba

本节中的信息仅描述 Samba 方法。有关 realmd,请参阅 RHEL 或 CentOS 供应商的文档。在配置 SSSD 之前,必须遵循这些步骤。

使用 Samba 加入域并创建主机密钥表:

在正确配置文件的 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-->

Where REALM is the Kerberos realm name in uppercase and domain is the NetBIOS name of the domain.

如果需要基于 DNS 查找 KDC 服务器和领域名称,请将以下两个选项添加到上述命令中:

--enablekrb5kdcdns --enablekrb5realmdns

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

kerberos method = secrets and keytab winbind offline logon = no

加入 Windows 域要求您的域控制器可访问,并且您拥有具有将计算机添加到域的权限的 AD 用户帐户:

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

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

步骤 3:设置 SSSD

注意

将 SSSD 与名称服务缓存守护程序 (NSCD) 结合使用可能会导致意外行为。有关详细信息,请参阅将 NSCD 与 SSSD 结合使用

设置 SSSD 包含以下步骤:

  • 在 Linux 客户端计算机上安装 sssd-adsssd-proxy 软件包。
  • 对各种文件(例如,sssd.conf)进行配置更改。
  • 启动 sssd 服务

/etc/sssd/sssd.conf

一个 sssd.conf 配置示例(可根据需要添加更多选项):

[sssd]
config_file_version = 2
domains = EXAMPLE
services = nss, pam

[domain/EXAMPLE]
# Uncomment if you need offline logins
# cache_credentials = true
re_expression = (((?P<domain>[^\\]+)\\(?P<name>.+$))|((?P<name>[^@]+)@(?P<domain>.+$))|(^(?P<name>[^@\\]+)$))
id_provider = proxy
proxy_lib_name = nis
auth_provider = ad
access_provider = ad

# Should be specified as the long version of the Active Directory domain.
ad_domain = 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-->

Replace ad.domain.com, server.ad.example.com with the corresponding value. For more details, see the sssd-ad(5) - Linux man page.

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

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

步骤 4:配置 NSS/PAM

RHEL/CentOS:

使用 authconfig 工具来启用 SSSD 服务。安装 oddjob-mkhomedir 软件包,以确保用户主目录的创建过程与 SELinux 兼容。

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

sudo systemctl start sssd

sudo systemctl enable sssd
<!--NeedCopy-->

提示:

配置 Linux VDA 设置时,请注意 SSSD 没有针对 Linux VDA 客户端的特殊设置。对于 ctxsetup.sh 脚本中的额外解决方案,请使用默认值。

步骤 5:验证 Kerberos 配置

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

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

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

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

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

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

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

步骤 6:验证用户身份验证

使用 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 凭据缓存中的票证是否有效且未过期:

klist
<!--NeedCopy-->