Centos 上的 SSSD,Active Directory 搜索返回零结果

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

sssd 使用的 ldap 查询在日志 [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 将无法工作。微软正在弃用 unix 属性的管理工具,所以我宁愿不去打扰他们。

我不想使用 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

smb配置文件

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

答案1

这是因为您将子域提供程序设置为 none。这有点违反直觉,但子域提供程序还会检索有关加入域的信息,包括 ID 映射所需的 SID。

您有三个选择:

  1. 启用子域名提供商。我不知道你为什么禁用它,大多数人这样做是为了解决无法访问受信任域的问题
  2. 如果您需要保持子域名提供商处于禁用状态,则需要手动设置域 SID,请参阅 man sssd-ldap 并搜索“domain_sid”
  3. 如果您运行的是 7.3,则只能使用以下方式启用加入的域ad_enabled_domains

相关内容