Linux

Centos 上的 SSSD,Active Directory 搜尋返回零結果

  • November 17, 2016

基本資訊

我在 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。

你有三個選擇:

  1. 啟用子域提供程序。我不知道您為什麼禁用它,大多數人這樣做是為了解決無法訪問的受信任域
  2. 如果您需要禁用子域提供程序,則需要手動設置域 SID,請參閱 man sssd-ldap 並蒐索“domain_sid”
  3. 如果您執行的是 7.3,則只能使用啟用加入的域ad_enabled_domains

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