You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ldapsearch无法返回AD中含特殊字符的用户(如user.name)问题排查

LDAP查询含特殊字符AD用户的问题分析与解决

问题原因

  1. Shell通配符解析冲突:Linux终端(如bash/zsh)会自动把*当作文件通配符展开。如果ldapsearch的过滤条件没用单引号包裹,比如直接执行ldapsearch ... (sAMAccountName=*),*会被替换成当前目录下的文件名,导致LDAP过滤条件彻底失效,自然匹配不到AD里的用户条目。而用*.*时,若当前目录没有符合该模式的文件,shell不会展开这个通配符,过滤条件能正确传给LDAP服务器,因此能返回含点号的账号。
  2. 属性匹配逻辑差异: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 15:57:41