Centos 上的 SSSD,Active Directory 搜尋返回零結果
基本資訊
我在 Centos (6.8) 上執行 sssd (1.13.3-22) 以通過 Active Directory (2012) 進行身份驗證。我不想使用儲存在 AD 中的 uid 號碼,所以我將 ldap_id_mapping 設置為 true。
當我執行“id ValidUsername”時,我得到響應“沒有這樣的使用者”。我查看 sssd 域日誌,發現 ldap 搜尋 ValidUsername 沒有返回任何結果。當我使用 ldapsearch 執行相同的查詢時,它也不返回任何結果,但我可以修改查詢以排除 uidNumber,它會返回一個結果。有關 ldap 查詢資訊,請參閱下面的詳細資訊。
詳細資訊
sssd_VALID.DOMAIN.CORP.log 片段
[sdap_search_user_next_base] (0x0400): Searching for users with base [DC=valid,DC=domain,DC=corp] [sdap_get_generic_ext_step] (0x0400): calling ldap_search_ext with [(&(sAMAccountName=ValidUsername)(objectclass=user)(sAMAccountName=*)(&(uidNumber=*)(!(uidNumber=0))))][DC=valid,DC=domain,DC=corp]. [sdap_get_generic_op_finished] (0x0400): Search result: Success(0), no errmsg set [sdap_search_user_process] (0x0400): Search for users, returned 0 results. [sdap_get_users_done] (0x0040): Failed to retrieve users [sysdb_search_by_name] (0x0400): No such entry [sysdb_delete_user] (0x0400): Error: 2 (No such file or directory) [acctinfo_callback] (0x0100): Request processed. Returned 0,0,Success [be_ptask_online_cb] (0x0400): Back end is online
使用的 ldap 查詢 sssd 列在日誌中
$$ sdap_get_generic_ext_step $$. 如果我採用相同的查詢並通過執行 ldap 搜尋對其進行測試,我也沒有得到任何結果:
ldapsearch -LLL -Y GSSAPI -N -H ldap://dc1.valid.domain.corp -b "DC=valid,DC=domain,DC=corp" '(&(sAMAccountName=ValidUsername)(objectclass=user)(sAMAccountName=*)(&(uidNumber=*)(!(uidNumber=0))))'
但是,如果我刪除查詢的 uidNumber 查找部分,我會得到預期的使用者數據:
ldapsearch -LLL -Y GSSAPI -N -H ldap://dc1.valid.domain.corp -b "DC=valid,DC=domain,DC=corp" '(&(sAMAccountName=ValidUsername)(objectclass=user)(sAMAccountName=*))'
如果 ldap_id_mapping 設置為 true,為什麼 sssd 向 AD 查詢 uidNumber 數據?我檢查了使用者屬性並且 uidNumber 屬性沒有值,所以除非我填充這個值,否則 sssd 將不起作用。Microsoft 正在棄用 unix attributes 的管理工具,所以我不想打擾它們。
我不想使用 winbind,這在過去對我來說很不穩定。
是否有任何配置項可用於強制 sssd 發送有效的使用者查找查詢?還是我還缺少其他東西?
sssd.conf
[sssd] config_file_version = 2 debug_level = 6 domains = VALID.DOMAIN.CORP services = nss, pam [nss] debug_level = 6 [pam] debug_level = 6 [domain/VALID.DOMAIN.CORP] debug_level = 8 id_provider = ad access_provider = ad auth_provider = ad chpass_provider = ad subdomains_provider = none dyndns_update = false ad_server = dc1.VALID.DOMAIN.corp ad_backup_server = dc2.VALID.DOMAIN.corp ldap_id_mapping = true ldap_schema = ad fallback_homedir = /home/%d/%u default_shell = /bin/bash
配置文件
workgroup = VALID client signing = yes client use spnego = yes kerberos method = secrets and keytab realm = VALID.DOMAIN.CORP security = ads log file = /var/log/samba/log.%m max log size = 50
這是因為您將子域提供程序設置為無。這有點違反直覺,但子域提供程序還檢索有關加入域的資訊,包括 ID 映射所需的 SID。
你有三個選擇:
- 啟用子域提供程序。我不知道您為什麼禁用它,大多數人這樣做是為了解決無法訪問的受信任域
- 如果您需要禁用子域提供程序,則需要手動設置域 SID,請參閱 man sssd-ldap 並蒐索“domain_sid”
- 如果您執行的是 7.3,則只能使用啟用加入的域
ad_enabled_domains