如何在sssd.conf中调整LDAP搜索过滤规则,移除uidNumber条件?
问题描述
我们计划通过SSSD实现LDAP认证,当前sssd.conf配置如下:
[sssd] config_file_version = 2 services = nss, pam domains = test.de [domain/test.de] id_provider = ldap auth_provider = ldap chpass_provider = ldap enumerate = true ldap_schema = rfc2307bis ldap_uri = ldaps://192.168.7.1:636, ldaps://192.168.7.2:636 ldap_search_base = ou=users, o=data ldap_user_search_base = ou=users, o=data ldap_user_object_class = posixAccount ldap_user_name = uid ldap_tls_reqcert = never cache_credentials = true ldap_default_bind_dn = cn=ldap-clienttest,ou=sa,o=data ldap_default_authtok_type = password ldap_default_authtok = pawsd debug_level = 9
调试用户搜索时发现,SSSD生成的LDAP查询语句包含uidNumber相关过滤条件:
[(&(uid=testuser)(objekctclass=posixAccount)(uid=*)(&(uidNumber=*)(!(uidNumber=0))))][ou=users, o=data]
该查询返回结果为0;但移除uidNumber条件后的查询语句:
(&(uid=testuser)(objekctclass=posixAccount)(uid=*))
可得到正确结果。请问如何避免使用uidNumber相关过滤条件?
解决方法
要让SSSD不再自动添加uidNumber相关的过滤条件,有两种直接的配置方式:
- 自定义用户搜索过滤规则,覆盖SSSD默认生成的条件
- 显式告知SSSD不检查uidNumber属性
方式一:自定义用户过滤规则
在[domain/test.de]配置段中添加ldap_user_filter参数,指定你需要的查询条件:
[domain/test.de] # 保留原有配置... ldap_user_filter = (&(uid=%u)(objectClass=posixAccount)) # 保留原有配置...
%u会被SSSD自动替换为当前查询的用户名,保证查询的动态性。
方式二:禁用uidNumber属性检查
同样在[domain/test.de]配置段中添加空值的ldap_user_uid_number参数:
[domain/test.de] # 保留原有配置... ldap_user_uid_number = # 保留原有配置...
这个配置会让SSSD跳过对uidNumber属性的校验,不再在查询中添加相关过滤条件。
生效步骤
修改配置后,需要重启SSSD服务使设置生效:
systemctl restart sssd
内容的提问来源于stack exchange,提问作者manuel
相关产品推荐
相关产品推荐

