SSSD在Centos上,Active Directorysearch返回零结果

基本信息

我正在CentOS(6.8)上运行sssd(1.13.3-22)以使用Active Directory(2012)进行身份validation。 我不希望使用存储在AD中的uid数字,所以我将ldap_id_mapping设置为true。

当我运行“ID有效用户名”我得到的答复“没有这样的用户”。 我查看了sssd域的日志,看到ldapsearchValidUsername没有返回任何结果。 当我用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]的日志中列出。 如果我采用相同的查询并通过运行ldapsearch进行testing,我也得不到结果:

 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属性的pipe理工具 ,所以我宁愿不打扰他们。

我不想使用winbind,这在过去对我来说一直很脆弱。

有什么configuration项我可以用来强制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.conf文件

 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 

这是因为你将子域名提供者设置为none。 这有点违反直觉,但是子域名提供者也检索关于join域的信息,包括ID映射所需的SID。

你有三个select:

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