Ubuntu

儘管明確定義了 URI,SSSD 仍無法發現 AD 全域目錄的服務

  • November 8, 2017

我遇到了 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 組 mygroup@domain.com 測試此配置時,我在 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。

在提出了一些關於為什麼存在不可訪問伺服器的 SRV DNS 記錄的建議之後,我意識到所有域控制器都有“站點”資訊來描述它們打算為哪些站點提供服務。事實證明,在使用此配置選項發現服務時,可以引導 SSSD 使用特定站點:

dns_discovery_domain = SiteName._sites.example.com

直到版本 1.12 ( https://pagure.io/SSSD/sssd/issue/2486 )之前,不完全支持指定此資訊(keberos 發現不遵守站點規範)。

據我所知,如果我明確定義了 LDAP 和 kerberos URI,則 SSSD 不應該進行任何服務發現,但至少我有解決我最初問題的方法。

我不知道 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

引用自:https://serverfault.com/questions/882379