![尽管明确定义了 URI,SSSD 仍无法发现 AD 全局目录的服务](https://linux22.com/image/713110/%E5%B0%BD%E7%AE%A1%E6%98%8E%E7%A1%AE%E5%AE%9A%E4%B9%89%E4%BA%86%20URI%EF%BC%8CSSSD%20%E4%BB%8D%E6%97%A0%E6%B3%95%E5%8F%91%E7%8E%B0%20AD%20%E5%85%A8%E5%B1%80%E7%9B%AE%E5%BD%95%E7%9A%84%E6%9C%8D%E5%8A%A1.png)
我在 SSSD 和 Active Directory 集成方面遇到了问题。我的 AD 设置了 9 个域控制器,其中一些控制器设置了防火墙,由于各种安全原因无法访问。因此,服务发现无法与 SSSD 配合使用。这应该没问题,因为我应该能够根据需要明确定义 URI。
我的 sssd.conf 中有定义这些 URI 的相关部分,如下所示:
[domain/ad.utah.edu]
ldap_uri = ldap://myserver.domain
ldap_backup_uri = ldap://backup-server.domain
krb5_server = myserver.domain
但是,当尝试使用 getent 组测试此配置时[电子邮件保护],我在 sssd 域日志 (debuglevel = 9) 中与该查找相关的活动开始时看到了这些消息:
(Tue Nov 7 17:20:26 2017) [sssd[be[mydomain]]] [sdap_id_op_connect_step] (0x4000): beginning to connect
(Tue Nov 7 17:20:26 2017) [sssd[be[mydomain]]] [fo_resolve_service_send] (0x0100): Trying to resolve service 'AD_GC'
...
(Tue Nov 7 17:20:26 2017) [sssd[be[mydomain]]] [ad_get_dc_servers_send] (0x0400): Looking up domain controllers in domain mydomain
(Tue Nov 7 17:20:26 2017) [sssd[be[mydomain]]] [resolv_discover_srv_next_domain] (0x0400): SRV resolution of service 'ldap'. Will use DNS discovery domain 'mydomain'
它最终找到了一个无法访问的 DC,并导致服务解析失败:
(Tue Nov 7 17:20:26 2017) [sssd[be[mydomain]]] [sdap_connect_host_resolv_done] (0x0400): Connecting to ldap://inaccessible-host.mydomain:389
....
(Tue Nov 7 17:20:56 2017) [sssd[be[mydomain]]] [fo_resolve_service_timeout] (0x0080): Service resolving timeout reached
(Tue Nov 7 17:20:56 2017) [sssd[be[mydomain]]] [sss_ldap_init_state_destructor] (0x0400): closing socket [26]
(Tue Nov 7 17:20:56 2017) [sssd[be[mydomain]]] [sdap_handle_release] (0x2000): Trace: sh[0xc861f0], connected[0], ops[(nil)], ldap[(nil)], destructor_lock[0], release_memory[0]
(Tue Nov 7 17:20:56 2017) [sssd[be[mydomain]]] [be_resolve_server_done] (0x1000): Server resolution failed: 14
(Tue Nov 7 17:20:56 2017) [sssd[be[mydomain]]] [sdap_id_op_connect_done] (0x0400): Failed to connect to server, but ignore mark offline is enabled.
(Tue Nov 7 17:20:56 2017) [sssd[be[mydomain]]] [sdap_id_op_connect_done] (0x4000): notify error to op #1: 5 [Input/output error]
(Tue Nov 7 17:20:56 2017) [sssd[be[mydomain]]] [acctinfo_callback] (0x0100): Request processed. Returned 3,5,Group lookup failed
我仔细检查了手册页,寻找一个选项来禁用服务发现(似乎应该通过指定我在配置中定义的 URI 来实现),或者找到一些选项来控制此“AD_GC”服务的行为(我从这篇文章中推断它是 AD 全局目录服务:https://community.hortonworks.com/articles/92314/sssd-1.html)。
然而,我不知道如何控制这种行为并禁用它或将其指向适当的服务器。
如果有帮助的话,我在 ubuntu 16.04.3 上运行 SSSD 版本 1.13.4。
答案1
我不知道 SSSD - 但我知道 AD 和 DNS 之间的关系。这一行SRV resolution of service 'ldap'
加上您有意隔离域控制器的事实,让我相信一旦它尝试从域中的 LDAP SRV 记录列表中查询隔离的 DC,它就会出错。如果是这样的话,阻止这些 DC 在 DNS 中注册其 SRV 记录。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters
Value name: DnsAvoidRegisterRecords
Data type: REG_MULTI_SZ
Data value: Ldap
答案2
在听了一些建议后,我意识到为什么无法访问的服务器会有 SRV DNS 记录,所有域控制器都有“站点”信息,描述它们要为哪些站点提供服务。事实证明,使用此配置选项可以指示 SSSD 在发现服务时使用特定站点:
dns_discovery_domain = SiteName._sites.example.com
直到版本 1.12 之前,指定此信息尚未得到完全支持(keberos 发现不尊重站点规范),如下所示(https://pagure.io/SSSD/sssd/issue/2486)。
据我所知,如果我明确定义了 LDAP 和 kerberos URI,SSSD 就不应该进行任何服务发现,但至少我对最初的问题有一个解决方案。