将 NIS 与 Active Directory 集成

本文介绍如何在 Linux VDA 中使用 SSSD 将 NIS 与 Windows Active Directory (AD) 集成。Linux VDA 被视为 Citrix XenApp & XenDesktop 的一个组件。因此,它与 Windows AD 环境紧密结合。

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

注意:

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

提示:

此方法代表已弃用的 Linux VDA 部署方法,这种方法仅用于特殊用例。对于 RHEL/CentOS 发行版,请按照安装 Linux Virtual Delivery Agent for RHEL/CentOS 中的说明进行操作。对于 Ubuntu 发行版,请按照安装 Linux Virtual Delivery Agent for Ubuntu 中的说明进行操作。

SSSD 是什么

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

必备软件

AD 提供程序最初是在 SSSD 版本 1.9.0 中引入的。

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

  • RHEL 7.3 或更高版本
  • CentOS 7.3 或更高版本

将 NIS 与 AD 相集成

要将 NIS 与 AD 集成,请执行以下操作:

  1. 将 Linux VDA 添加为 NIS 客户端
  2. 使用 Samba 加入域并创建主机 keytab
  3. 设置 SSSD
  4. 配置 NSS/PAM
  5. 验证 Kerberos 配置
  6. 验证用户身份

将 Linux VDA 添加为 NIS 客户端

配置 NIS 客户端:

yum –y install ypbind rpcbind oddjob-mkhomedir

设置 NIS 域:

ypdomainname nis.domain
echo "NISDOMAIN=nis.domain" >> /etc/sysconfig/network

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

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

通过 authconfig 配置 NIS:

sudo authconfig --enablenis --nisdomain=nis.domain --nisserver=server.nis.domain --enablemkhomedir --update

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

配置 NIS 服务:

sudo systemctl start rpcbind ypbind
sudo systemctl enable rpcbind ypbind

确保 NIS 配置正确:

ypwhich

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

getent passwd nisaccount

注意:

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

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

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

  • adcli
  • realmd
  • Winbind
  • Samba

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

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

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

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

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

--enablekrb5kdcdns --enablekrb5realmdns

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

kerberos method = secrets and  keytab

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

sudo net ads join REALM -U user

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

设置 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 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

ad.domain.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 systemctl start sssd
sudo systemctl enable sssd

提示:

配置 Linux VDA 设置时,要为 SSSD 考虑上述操作,而对 Linux VDA 客户端无需特殊设置。对于 ctxsetup.sh 脚本中的其他解决方案,请使用默认值。

验证 Kerberos 配置

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

sudo klist -ke

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

sudo kinit –k MACHINE\$@REALM

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

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

sudo klist -ke

验证用户身份

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

sudo getent passwd DOMAIN\\username

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

支持的登录格式如下:

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

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

sudo localhost –l DOMAIN\\username
id -u

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

ls /tmp/krb5cc_{uid}

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

klist

将 NIS 与 Active Directory 集成