ldapsearch 的用途
ldapsearch 通过 LDAP 协议查询目录服务里的对象与属性,是最通用的只读目录查询工具,对 AD 与 OpenLDAP 都适用。评估中它用来核对账号属性、组成员与目录结构,重点是只取审计所需字段、控制查询范围,避免把整棵目录树拉回本地。
基本信息
| 关键参数 | -x 简单认证、-H 服务地址、-D 绑定账号、-W 交互输入口令、-b 基节点 |
|---|---|
| 分页 | -E pr=500/noprompt 分批取回结果 |
| 属性 | 只列出必要字段,如 sAMAccountName、userAccountControl |
| 协议 | ldap 默认 389,ldaps 默认 636 |
| 记录 | 查询语句与时间入项目日志,便于复核 |
典型使用场景
- 账号清点:核对是否存在长期未登录或口令永不过期的账号
- 组成员核实:确认高权限组里有哪些成员与嵌套组
- 目录结构梳理:了解组织单位划分,为后续权限评估定位范围
- 属性核对:检查描述字段是否被用来存放不该放的凭据信息
- 与自动化对接:把查询结果导出为结构化文件,供脚本做差异对比
查询示例
查询示例
# 简单认证加分页,只取两个必要属性,避免全量拉取
ldapsearch -x -H ldap://dc01.example.com -D 'audit@example.com' -W -b 'DC=example,DC=com' -E pr=500/noprompt '(&(objectClass=user)(objectCategory=person))' sAMAccountName userAccountControl
# 查询指定组的成员
ldapsearch -x -H ldap://dc01.example.com -D 'audit@example.com' -W -b 'DC=example,DC=com' '(cn=Domain Admins)' member
# 结果落文件后统计条数,确认查询范围符合预期
ldapsearch -x -H ldap://dc01.example.com -D 'audit@example.com' -W -b 'DC=example,DC=com' '(objectClass=user)' sAMAccountName > ldap-users.txt输出逐列读法
| 输出内容 | 含义 | 使用注意 |
|---|---|---|
| dn | 条目唯一名称与路径 | 据此判断对象在目录树中的位置 |
| sAMAccountName | 登录名 | 与人员台账核对,注意离职账号 |
| userAccountControl | 账号状态位 | 含禁用与口令永不过期等标志 |
| member / memberOf | 组成员关系 | 注意嵌套组带来的间接权限 |
| numResponses | --count 下的条目总数 | 数字异常偏大说明范围写宽了 |
批量查询会进入目录服务审计日志:查询计划与时间窗先同步给客户管理员,避免被当成异常行为;查询语句里要写清基节点与过滤条件,出问题时能一眼看出范围有没有写宽。
-W 需要交互输入,放到脚本或计划任务里会直接失败:自动化场景改用 -w 并把口令从命令行历史中清理掉,或改用凭据文件。