ldapsearch无法返回AD中含特殊字符的用户(如user.name)问题排查
LDAP查询含特殊字符AD用户的问题分析与解决
问题原因
- Shell通配符解析冲突:Linux终端(如bash/zsh)会自动把
*当作文件通配符展开。如果ldapsearch的过滤条件没用单引号包裹,比如直接执行ldapsearch ... (sAMAccountName=*),*会被替换成当前目录下的文件名,导致LDAP过滤条件彻底失效,自然匹配不到AD里的用户条目。而用*.*时,若当前目录没有符合该模式的文件,shell不会展开这个通配符,过滤条件能正确传给LDAP服务器,因此能返回含点号的账号。 - 属性匹配逻辑差异:PowerView的
Get-DomainUser默认会同时查询sAMAccountName、userPrincipalName、cn等多个用户属性,并做宽松匹配;如果ldapsearch仅指定单个属性且过滤条件写法有误,就会漏掉含特殊字符的条目。
通用通配符查询方式
- 正确包裹过滤条件:必须用单引号把LDAP过滤条件完全包裹,避免shell解析通配符。示例:
ldapsearch -x -H ldap://dc.domain.com -b "dc=domain,dc=com" '(objectClass=user)' sAMAccountName description - 匹配所有带描述的用户:用
*匹配任意值,结合过滤条件获取所有含描述的AD用户:ldapsearch -x -H ldap://dc.domain.com -b "dc=domain,dc=com" '(&(objectClass=user)(description=*))' sAMAccountName description - 匹配含特殊字符的用户:针对点号、连字符等特殊字符,直接在通配符中包含对应符号即可:
# 匹配sAMAccountName含点号的用户 ldapsearch -x -H ldap://dc.domain.com -b "dc=domain,dc=com" '(&(objectClass=user)(sAMAccountName=*.*))' sAMAccountName description # 匹配sAMAccountName含连字符的用户 ldapsearch -x -H ldap://dc.domain.com -b "dc=domain,dc=com" '(&(objectClass=user)(sAMAccountName=*-*))' sAMAccountName description - 扩展子字符串匹配:使用LDAP的
substrings匹配语法,支持更灵活的子串查询:ldapsearch -x -H ldap://dc.domain.com -b "dc=domain,dc=com" '(&(objectClass=user)(sAMAccountName:substrings:=*.*))' sAMAccountName description
内容的提问来源于stack exchange,提问作者Cryptkeeper
相关产品推荐
相关产品推荐

