Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

5.2. 创建跨林信任

5.2.1. 环境和机器要求

在配置信任协议前,请确保 ActiveActive Directorynbsp;Directory 和身份管理服务器、机器和环境满足本节中描述的要求和设置。

5.2.1.1. 支持的 Windows 平台

您可以建立与 ActiveActive Directorynbsp 的信任关系;Directory 林和域功能级别:
  • 林功能级别范围:Windows Server 2008 - Windows 服务器 2016
  • 域功能级别范围:Windows Server 2008 - Windows 服务器 2016
支持并测试以下操作系统,以便使用上述功能级别建立信任:
  • Windows Server 2012 R2
  • Windows Server 2016
之前版本的 Windows Server 不支持建立信任。

5.2.1.2. DNS 和 Realm 设置

要建立信任,Active Directory 和 Identity Management 需要特定的 DNS 配置:
唯一的主 DNS 域
每个系统都必须配置自己的唯一的主 DNS 域。例如:
  • AD 的 ad.example.com ,IdM.example.com
  • example.com 用于 AD,idm.example.com 用于 IdM
  • AD 的 ad.example.com 和 IdM 的 example.com
    重要
    如果 IdM 域是 AD 域的父域,IdM 服务器必须在 Red Hat Enterprise Linux 7.5 或更高版本中运行。
最方便的管理解决方案是,每个 DNS 域都由集成 DNS 服务器管理,但也可以使用任何其他符合标准标准的 DNS 服务器。
AD 或 IdM 无法将主 DNS 域与另一个身份管理系统共享。如需更多信息,请参阅 Linux 域身份、身份验证和策略指南中的 主机名和 DNS 配置要求文档。
Kerberos realm 名称作为主 DNS 域名的大写版本
Kerberos realm 名称必须与主 DNS 域名相同,且所有字母都为大写。例如,如果域名是 AD 的 ad.example.com,而 idm.example.com for IdM,则需要 Kerberos 域名称为 AD.EXAMPLE.COMIDM.EXAMPLE.COM
DNS 记录可从信任中的所有 DNS 域解析
所有机器都必须能够从涉及信任关系的所有 DNS 域解析 DNS 记录:
IdM 和 AD DNS 域之间没有重叠
加入 IdM 的系统可以通过多个 DNS 域进行发布。包含 IdM 客户端的 DNS 域不得与包含加入 AD 的机器的 DNS 域重叠。主 IdM DNS 域必须具有正确的 SRV 记录来支持 AD 信任。
注意
在 IdM 和 ActiveActive Directorynbsp;Directory 之间信任的一些环境中,您可以在属于 ActiveActive Directorynbsp 的主机上安装 IdM 客户端;Directory DNS 域。然后,主机可以从基于 Linux 的 IdM 功能中获益。这不是推荐的配置,存在一些限制。红帽建议始终在与 ActiveActive Directorynbsp 拥有的 DNS 区域中部署 IdM 客户端;Directory 并通过 IdM 主机名访问 IdM 客户端。
您可以通过运行 $ ipa dns-update-system-records --dry-run 命令来获取特定于系统设置所需的 SRV 记录列表。
生成的列表可以类似如下:
$ ipa dns-update-system-records --dry-run
 IPA DNS records:
  _kerberos-master._tcp.example.com. 86400 IN SRV 0 100 88 server.example.com.
  _kerberos-master._udp.example.com. 86400 IN SRV 0 100 88 server.example.com.
  _kerberos._tcp.example.com. 86400 IN SRV 0 100 88 server.example.com.
  _kerberos._udp.example.com. 86400 IN SRV 0 100 88 server.example.com.
  _kerberos.example.com. 86400 IN TXT "EXAMPLE.COM"
  _kpasswd._tcp.example.com. 86400 IN SRV 0 100 464 server.example.com.
  _kpasswd._udp.example.com. 86400 IN SRV 0 100 464 server.example.com.
  _ldap._tcp.example.com. 86400 IN SRV 0 100 389 server.example.com.
  _ntp._udp.example.com. 86400 IN SRV 0 100 123 server.example.com.
对于同一 IdM 域一部分的其他 DNS 域,在配置对 AD 的信任时不需要配置 SRV 记录。原因在于 AD 域控制器不使用 SRV 记录来发现 KDC,而是基于信任名称后缀路由信息的 KDC 发现。

验证 DNS 配置

在配置信任前,请验证身份管理和 Active Directory 服务器是否可以自行解析,也可以互相解析。
如果运行下面描述的命令没有显示预期的结果,请检查主机上执行命令的 DNS 配置。如果主机配置看起来正确,请确保 DNS 从父域到子域的设置正确无误。
请注意,AD 会缓存 DNS 查找的结果,因此有时无法立即看到您在 DNS 中所做的更改。您可以通过运行 ipconfig /flushdns 命令来删除当前的缓存。
验证 IdM 托管的服务是否可以从用于建立信任的 IdM 域服务器解析
  1. 通过 UDP 和 LDAP 通过 TCP 服务记录运行对 Kerberos 的 DNS 查询。
    [root@ipaserver ~]# dig +short -t SRV _kerberos._udp.ipa.example.com.
    0 100 88 ipamaster1.ipa.example.com.
    
    [root@ipaserver ~]# dig +short -t SRV _ldap._tcp.ipa.example.com.
    0 100 389 ipamaster1.ipa.example.com.
    这些命令应该列出所有 IdM 服务器。
  2. 使用 IdM Kerberos 域名称对 TXT 记录运行 DNS 查询。获取的值应该与您在安装 IdM 时指定的 Kerberos 域匹配。
    [root@ipaserver ~]# dig +short -t TXT _kerberos.ipa.example.com.
    IPA.EXAMPLE.COM
    
  3. 执行 ipa-adtrust-install 工具后(如 第 5.2.2.1.1 节 “为信任准备 IdM 服务器” 所述),通过 UDP 和 LDAP 运行对 MS DC Kerberos 的 DNS 查询,通过 TCP 服务记录运行 LDAP。
    [root@ipaserver ~]# dig +short -t SRV _kerberos._udp.dc._msdcs.ipa.example.com.
    0 100 88 ipamaster1.ipa.example.com.
    
    [root@ipaserver ~]# dig +short -t SRV _ldap._tcp.dc._msdcs.ipa.example.com.
    0 100 389 ipamaster1.ipa.example.com.
    
    命令应该会列出已在其上执行 ipa-adtrust-install 的所有 IdM 服务器。请注意,如果 ipa-adtrust-install 没有在任何 IdM 服务器上执行,则输出为空(通常在建立第一个信任关系前)。
验证 IdM 能够解析 AD 的服务记录
通过 UDP 和 LDAP 通过 TCP 服务记录运行对 Kerberos 的 DNS 查询。
[root@ipaserver ~]# dig +short -t SRV _kerberos._udp.dc._msdcs.ad.example.com.
0 100 88 addc1.ad.example.com.

[root@ipaserver ~]# dig +short -t SRV _ldap._tcp.dc._msdcs.ad.example.com.
0 100 389 addc1.ad.example.com.
这些命令应当返回 AD 域控制器的名称。
验证 IdM-hosted 服务是否可以从 AD 服务器解析
  1. 在 AD 服务器上,设置 thenslookup.exe 实用程序来查找服务记录。
    C:\>nslookup.exe
    > set type=SRV
    
  2. 通过 UDP 和 LDAP 通过 TCP 服务记录输入 Kerberos 的域名。
    > _kerberos._udp.ipa.example.com.
    _kerberos._udp.ipa.example.com.       SRV service location:
        priority                = 0
        weight                  = 100
        port                    = 88
        svr hostname   = ipamaster1.ipa.example.com
    > _ldap._tcp.ipa.example.com
    _ldap._tcp.ipa.example.com       SRV service location:
        priority                = 0
        weight                  = 100
        port                    = 389
        svr hostname   = ipamaster1.ipa.example.com
    
    预期的输出包含与 验证 IdM 托管的服务是否可以从用于建立信任的 IdM 域服务器解析 中显示相同的 IdM 服务器集合。
  3. 将服务类型更改为 TXT,并使用 IdM Kerberos 域名运行对 TXT 记录的 DNS 查询。
    C:\>nslookup.exe
    > set type=TXT
    > _kerberos.ipa.example.com.
    _kerberos.ipa.example.com.        text =
    
        "IPA.EXAMPLE.COM"
    
  4. 执行 ipa-adtrust-install 工具后(如 第 5.2.2.1.1 节 “为信任准备 IdM 服务器” 所述),通过 UDP 和 LDAP 运行对 MS DC Kerberos 的 DNS 查询,通过 TCP 服务记录运行 LDAP。
    C:\>nslookup.exe
    > set type=SRV
    > _kerberos._udp.dc._msdcs.ipa.example.com.
    _kerberos._udp.dc._msdcs.ipa.example.com.        SRV service location:
        priority = 0
        weight = 100
        port = 88
        svr hostname = ipamaster1.ipa.example.com
    > _ldap._tcp.dc._msdcs.ipa.example.com.
    _ldap._tcp.dc._msdcs.ipa.example.com.        SRV service location:
        priority = 0
        weight = 100
        port = 389
        svr hostname = ipamaster1.ipa.example.com
    
    命令应该会列出已在其上执行 ipa-adtrust-install 工具的所有 IdM 服务器。请注意,如果 ipa-adtrust-install 没有在任何 IdM 服务器上执行,则输出为空(通常在建立第一个信任关系前)。
验证 AD 服务是否可以从 AD 服务器解析
  1. 在 AD 服务器上,设置 thenslookup.exe 实用程序来查找服务记录。
    C:\>nslookup.exe
    > set type=SRV
    
  2. 通过 UDP 和 LDAP 通过 TCP 服务记录输入 Kerberos 的域名。
    > _kerberos._udp.dc._msdcs.ad.example.com.
    _kerberos._udp.dc._msdcs.ad.example.com. 	SRV service location:
        priority = 0
        weight = 100
        port = 88
        svr hostname = addc1.ad.example.com
    > _ldap._tcp.dc._msdcs.ad.example.com.
    _ldap._tcp.dc._msdcs.ad.example.com. 	SRV service location:
        priority = 0
        weight = 100
        port = 389
        svr hostname = addc1.ad.example.com
    
    预期的输出包含与 验证 IdM 能够解析 AD 的服务记录 中显示的相同的 AD 服务器集合。

5.2.1.3. NetBIOS 名称

NetBIOS 名称对于识别 ActiveActive Directorynbsp;Directory(AD)域(如果 IdM 配置了信任)时,用来识别 IdM 域和服务至关重要。因此,您必须对 IdM 域使用不同的 NetBIOS 名称,而不是您要建立林信任的 AD 域中使用的 NetBIOS 名称。
ActiveActive Directorynbsp 的 NetBIOS 名称;Directory 或 IdM 域通常是对应 DNS 域的最左侧组件。例如,如果 DNS 域是 ad.example.com,则 NetBIOS 名称通常是 AD
注意
NetBIOS 名称的最大长度为 15 个字符。

5.2.1.4. 防火墙和端口

要启用 AD 域控制器和 IdM 服务器之间的通信,请确定您满足以下端口要求:

表 5.2. AD 信任需要的端口

服务 端口 协议
端点解析端口映射器 135 TCP
NetBIOS-DGM 138 TCP 和 UDP
NetBIOS-SSN 139 TCP 和 UDP
Microsoft-DS 445 TCP 和 UDP
端点映射器侦听器范围 1024-1300 TCP
AD Global Catalog 3268 TCP
LDAP 389 TCP [a] 和 UDP
[a] 在 IdM 服务器中不需要为信任打开 TCP 端口 389,但与 IdM 服务器通信的客户端需要这样端口。

表 5.3. Trust 中 IdM 服务器所需的端口

表 5.4. AD 信任中 IdM 客户端所需的端口

服务 端口 协议 备注
Kerberos 88 UDP 和 TCP
如果从 Kerberos 分发中心(KDC) 发送的数据过大,libkrb5 库将使用 UDP 并退回到 TCP 协议。Activeactive Directorynbsp;Directory 将 Privilege Attribute Certificate(PAC)附加到 Kerberos 票据中,这会增加大小,多数情况下需要使用 TCP 协议。为避免回退和重新发送请求,默认情况下,Red Hat Enterprise Linux 7.4 及之后的版本中的 SSSD 使用 TCP 进行用户身份验证。要在 libkrb5 使用 TCP 前配置大小,请在 /etc/krb.5.conf 文件中设置 udp_preference_limit。详情请查看 krb5.conf(5) man page。

其它资源

  • 有关如何打开所需端口的建议,请参阅 Linux 域身份、身份验证和策略指南 中的端口 要求

5.2.1.5. IPv6 设置

IdM 系统必须在内核中启用 IPv6 协议。如果禁用 IPv6,IdM 服务使用的 CLDAP 插件将无法初始化。

5.2.1.6. 时钟设置

ActiveActive Directorynbsp;Directory 服务器和 IdM 服务器都必须有其时钟同步。

5.2.1.7. 在 AD 中为 IdM 域创建条件 Forwarder

准备 AD DNS 服务器,以将 IdM 域的查询转发到 IdM DNS 服务器:
  1. 在 Windows AD 域控制器上,打开 Active Directory(AD) DNS 控制台。
  2. 右键单击 Conditional Forwarders,再选择 New Conditional Forwarder
  3. 输入 IdM DNS 域名和 IdM DNS 服务器的 IP 地址
  4. Active Directory 中选择 Store this conditional forwarder 并将其复制如下,然后选择与您的环境匹配的复制设置。
  5. 确定
  6. 要验证 AD 域控制器(DC)是否可以解析 IdM 域中的 DNS 条目,请打开命令提示并输入:
    C:\> nslookup server.idm.example.com
    如果命令返回 IdM 服务器的 IP 地址,条件转发器可以正常工作。

5.2.1.8. 在 IdM 中为 AD 域创建转发区

准备 IdM DNS 服务器,以将 AD 域的查询转发到 AD DNS 服务器:
  1. 在 IdM 服务器上,为 AD DNS 域创建一个正向区条目。有关在 IdM 中创建 DNS 转发区的详情,请参考 Linux 域身份、身份验证和策略指南 中的配置转发区部分。
  2. 如果 AD DNS 服务器不支持 DNSSEC,在 IdM 服务器上禁用 DNSSEC 验证:
    1. 编辑 /etc/named.conf 文件,将 dnssec-validation 参数设置为 no
      dnssec-validation no;
    2. 重启 named-pkcs11 服务:
      # systemctl restart named-pkcs11
  3. 要验证 IdM 服务器是否可以解析 AD 域中的 DNS 条目,请输入:
    # host server.ad.example.com
    如果命令返回 AD DC 的 IP 地址,则 forward 区域可以正常工作。

5.2.1.9. 支持的用户名格式

IdM 在本地 SSSD 客户端中执行用户名映射。SSSD 支持的来自可信域的用户的默认输出用户名格式是 user_name@domain。Activeactive Directorynbsp;Directory 支持几种不同类型的名称格式: user_nameuser_name@DOMAIN_NAMEDOMAIN_NAME\user_name
用户只能使用其用户名(user_name)或其完全限定用户名(user_name@domain_name),例如在系统身份验证时。
警告
最好使用完全限定用户名以避免在多个域中存在相同用户名时发生冲突。
如果用户只指定带有域的用户名,SSSD 会在 /etc/sssd/sssd.conf 文件和可信域中配置的所有域中搜索帐户。如果您配置了一个域解析顺序,如 第 8.5.3 节 “在 IdM 客户端中配置域解析顺序” 所述,SSSD 会按照定义的顺序搜索用户。不管怎样,SSSD 会使用找到的第一个条目。如果多个域中存在相同的用户名,而找到的第一个条目不是预期的条目,这可能会导致问题或混淆。
默认情况下,SSSD 会始终以完全限定格式显示用户名。有关更改格式的详情请参考 第 5.5 节 “更改 SSSD 显示的用户名格式”
要识别用户名以及用户名所属的域,SSSD 使用 re_expression 选项中定义的正则表达式。正则表达式用于 IdM 后端或 AD 后端,并支持所有上述格式:
re_expression = (((?P<domain>[^\\]+)\\(?P<name>.+$))|((?P<name>[^@]+)@(?P<domain>.+$))|(^(?P<name>[^@\\]+)$))