如何熟悉LDAP的查询语法?

OpenLDAP

1 基础知识

1.1 LDIF数据交换格式

1.1.1 基本概念

– 一种标准的纯文本数据交换格式
– 该格式适用于保存LDAP的数据
– 多个逻辑行代表一个对象(也称条目,条目之间使用空行分隔)
– 每个逻辑行代表该对象的某个属性
– 每个对象和属性支持常见的增、删、改、查、重命名操作
– 对象使用专有名称的值作为对象的唯一标识ID

1.1.2 LDAP范例

# cmdschool.org
dn: dc=cmdschool,dc=org
objectClass: top
objectClass: domain
dc: cmdschool

# Directory Administrators, cmdschool.org
dn: cn=Directory Administrators,dc=cmdschool,dc=org
objectClass: top
objectClass: groupofuniquenames
cn: Directory Administrators

# Groups, cmdschool.org
dn: ou=Groups,dc=cmdschool,dc=org
objectClass: top
objectClass: organizationalunit
ou: Groups

1.1.3 专有名

– 即Distinguished Name的翻译
– DN用于标识唯一的对象,即每个条目的唯一名称

1.1.4 通用名称

– 即Common Name的翻译
– CN用于指定对象的名称,如人名、会议室、食谱名称、职称等等

1.1.5 组织单元

– 即Oranizational Unit的翻译
– OU用于指定对象所属的组织架构或所属分组、分类,概括为归属关系

1.1.6 域组件

– 即Domain Component的翻译
– DC用于定义对象的域,如www.cmdschool.org会表达为DC=www,DC=cmdschool,DC=org

2.1 命令帮助

ldapsearch -h

2.2 使用详解

2.2.1 使用的格式

ldapsearch [options] [filter [attributes...]]

注:
– options,指具体的命令行选项,后面有介绍
– filter,指符合RFC 4515书写规范的LDAP搜索过滤规则
– attributes,空格属性列表(使用空格分隔每个属性)

2.2.2 搜索选项

Search options:
  -a deref   one of never (default), always, search, or find
  -A         retrieve attribute names only (no values)
  -b basedn  base dn for search
  -c         continuous operation mode (do not stop on errors)
  -E [!][=] search extensions (! indicates criticality)
             [!]domainScope              (domain scope)
             !dontUseCopy                (Don't Use Copy)
             [!]mv=              (RFC 3876 matched values filter)
             [!]pr=[/prompt|noprompt] (RFC 2696 paged results/prompt)
             [!]sss=[-]<attr[:OID]>[/[-]<attr[:OID]>...]
                                         (RFC 2891 server side sorting)
             [!]subentries[=true|false]  (RFC 3672 subentries)
             [!]sync=ro[/]       (RFC 4533 LDAP Sync refreshOnly)
                     rp[/][/] (refreshAndPersist)
             [!]vlv=/(//|:)
                                         (ldapv3-vlv-09 virtual list views)
             [!]deref=derefAttr:attr[,...][;derefAttr:attr[,...][;...]]
             [!][=:] (generic control; no response handling)
  -f file    read operations from `file'
  -F prefix  URL prefix for files (default: file:///tmp/)
  -l limit   time limit (in seconds, or "none" or "max") for search
  -L         print responses in LDIFv1 format
  -LL        print responses in LDIF format without comments
  -LLL       print responses in LDIF format without comments
             and version
  -M         enable Manage DSA IT control (-MM to make critical)
  -P version protocol version (default: 3)
  -s scope   one of base, one, sub or children (search scope)
  -S attr    sort the results by attribute `attr'
  -t         write binary values to files in temporary directory
  -tt        write all values to files in temporary directory
  -T path    write files to directory specified by path (default: /tmp)
  -u         include User Friendly entry names in the output
  -z limit   size limit (in entries, or "none" or "max") for search

2.2.1.1 引用别名

参数:-a
作用:指定如何取消引用别名
可选值:never|always|search|find(从不、总是、搜索、查找)

2.2.1.2 只检索属性名称

参数:-A
作用:用于确认条目是否有值,不需要使用属性值

2.2.1.3 基于DN查找

参数:-b
作用:基于DN查找

2.2.1.4 连续操作模式

参数:-c
作用:遇到错误继续往下执行

2.2.1.5 搜索扩展

参数:-E
作用:使用-e指定一般的扩展名,然后使用-E搜索

2.2.1.6 从文件导入操作

参数:-f
作用:从文件导入操作

2.2.1.7 文件的URL前缀

参数:-F prefix
作用:指定文件的URL前缀
默认值:file:///tmp/

2.2.1.8 限制搜索时间

参数:-l
作用:限制搜索时间
可选值:整数值(单位秒)|none|max

1.2.1.9 控制打印格式

参数:
-L
-LL
-LLL
作用:
– 控制打印格式
– 一个L指以LDIFv1格式打印
– 两个L指以LDIF格式打印,节删注解
– 三个L指以LDIF格式打印,节删注解和版本信息

2.2.1.10 指定协议的版本

参数:-P
作用:指定协议的版本
默认值:3

2.2.1.11 指定协议的版本

参数:-P
作用:指定协议的版本
默认值:3

2.2.1.12 指定搜索的范围

参数:-s
作用:指定协议的版本
可选值:base|one|sub|children

2.2.1.13 按某个属性排序

参数:-S
作用:按某个属性排序

2.2.1.14 输出到临时目录的文件

参数:
-t
-tt
作用:
– 一个t表示输出二进制值到临时目录文件
– 两个t表示所有值写到临时目录文件

2.2.1.15 指定输出目录

参数:-T
作用:指定输出目录
默认值:/tmp

2.2.1.16 友好地输出条目

参数:-u
作用:友好的格式输出条目

2.2.1.17 友好地输出条目

参数:-u
作用:友好的格式输出条目

2.2.1.18 限制输出大小

参数:-z
作用:限制输出大小
可选值:none|max

2.2.3 普通选项

Common options:
  -d level   set LDAP debugging level to `level'
  -D binddn  bind DN
  -e [!][=] general extensions (! indicates criticality)
             [!]assert=     (RFC 4528; a RFC 4515 Filter string)
             [!]authzid=   (RFC 4370; "dn:" or "u:")
             [!]chaining[=[/]]
                     one of "chainingPreferred", "chainingRequired",
                     "referralsPreferred", "referralsRequired"
             [!]manageDSAit         (RFC 3296)
             [!]noop
             ppolicy
             [!]postread[=]  (RFC 4527; comma-separated attr list)
             [!]preread[=]   (RFC 4527; comma-separated attr list)
             [!]relax
             [!]sessiontracking
             abandon, cancel, ignore (SIGINT sends abandon/cancel,
             or ignores response; if critical, doesn't wait for SIGINT.
             not really controls)
  -h host    LDAP server
  -H URI     LDAP Uniform Resource Identifier(s)
  -I         use SASL Interactive mode
  -n         show what would be done but don't actually do it
  -N         do not use reverse DNS to canonicalize SASL host name
  -O props   SASL security properties
  -o [=] general options
             nettimeout= (in seconds, or "none" or "max")
             ldif-wrap= (in columns, or "no" for no wrapping)
  -p port    port on LDAP server
  -Q         use SASL Quiet mode
  -R realm   SASL realm
  -U authcid SASL authentication identity
  -v         run in verbose mode (diagnostics to standard output)
  -V         print version info (-VV only)
  -w passwd  bind password (for simple authentication)
  -W         prompt for bind password
  -x         Simple authentication
  -X authzid SASL authorization identity ("dn:" or "u:")
  -y file    Read password from file
  -Y mech    SASL mechanism
  -Z         Start TLS request (-ZZ to require successful response)

2.2.3.1 指定调试级别

参数:-d level
作用:指定调试级别
可选值:level

2.2.3.2 绑定DN

参数:-D binddn
作用:使用专有的名称绑定到LDAP目录(有查询权限的用户DN)

2.2.3.3 指定搜索扩展

参数:-e
作用:指定搜索扩展

2.2.3.4 指定LDAP服务器

参数:-h host
作用:指定LDAP服务器

2.2.3.5 指定LDAP服务器的URI

参数:-H URI
作用:指定LDAP服务器的URI或URI列表(使用空格或逗号分隔)

2.2.3.6 使用SASL交互模式

参数:-l
作用:使用SASL交互模式

2.2.3.7 使用SASL交互模式

参数:-I
作用:使用SASL交互模式

2.2.3.8 模拟操作

参数:-n
作用:显示执行结果,但实际并没有真实执行

2.2.3.9 不使用SASL主机名

参数:-N
作用:不使用DNS规范化的SASL主机名

2.2.3.10 支持SASL安全属性

参数:-O
作用:支持SASL安全属性

2.2.3.11 指定常规选项

作用:指定常规选项
参数:
-o nettimeout =
可选值:整数值(秒为单位)|none|max

参数:
-o ldif-wrap =
可选值:整数值|no

2.2.3.12 指定服务器端口

参数:-p
作用:指定服务器端口

2.2.3.13 使用SASL安静模式

参数:-Q
作用:使用SASL安静模式

2.2.3.14 指定领域

参数:-R realm
作用:指定领域

2.2.3.15 指定认证标识

参数:-U authcid
作用:指定认证标识

2.2.3.16 详细模式运行

参数:-v
作用:详细模式运行

2.2.3.17 打印版本信息

参数:-V
作用:打印版本信息

2.2.3.18 命令使用密码认证

参数:-w
作用:命令中显式密码方式认证(后面跟密码)

2.2.3.19 提示输入密码认证

参数:-W
作用:提示输入密码认证

2.2.3.20 指定SASL授权标识

参数:-X authzid
作用:指定SASL授权标识

2.2.3.21 从文件读取密码

参数:-y file
作用:从文件读取密码

2.2.3.22 使用SASL机制

参数:-Y mech
作用:使用SASL机制

2.2.3.23 启动TLS请求

参数:-Z
作用:启动TLS请求

3 实操部分

由于只讲语法比较枯燥,以下以操作来熟悉,

3.1 基于选项的使用方法

ldapsearch -x -h ldapSer.cmdschool.org -p 389 -W -b "dc=cmdschool,dc=org"
ldapsearch -x -h ldapSer.cmdschool.org -p 389 -w ldappassword -b "dc=cmdschool,dc=org"

– 参数“x”指使用简单的密码认证
– 参数“h”指定认证服务器域名
– 参数“p”指定认证服务器的端口
– 参数“W”指提示用户输入密码,如果不想提示请使用第二行的带“w”参数的命令
– 参数“b”指定基于具有唯一性的“dc=cmdschool,dc=org”的DN查找
在正式学习过滤器之前,笔者先告诉你,以上命令等效于以下命令,以上称之为默认过滤器

ldapsearch -x -h ldapSer.cmdschool.org -p 389 -W -b "dc=cmdschool,dc=org" "objectClass=*"

3.2 过滤器的使用方法

3.2.1 基本语法

3.2.1.1 语法格式

" "

注:以上表示过滤器需要声明为一个字符串,需包含在双引号或单引号中

3.2.1.2 使用范例

ldapsearch -x -h ldapSer.cmdschool.org -p 389 -W -b "dc=cmdschool,dc=org" ""

3.2.2 等于运算符的使用

3.2.2.1 语法格式

"uid=User001"

3.2.2.2 使用范例

ldapsearch -x -h ldapSer.cmdschool.org -p 389 -W -b "dc=cmdschool,dc=org" "uid=User001"

注:uid是属性名称,User001是属性值,即查询uid等于User001的条目

3.2.3 包含运算符的使用

3.2.3.1 语法格式

"uid=User*"

3.2.3.2 使用范例

ldapsearch -x -h ldapSer.cmdschool.org -p 389 -W -b "dc=cmdschool,dc=org" "uid=User*"
ldapsearch -x -h ldapSer.cmdschool.org -p 389 -W -b "dc=cmdschool,dc=org" "uid=*001"
ldapsearch -x -h ldapSer.cmdschool.org -p 389 -W -b "dc=cmdschool,dc=org" "uid=*"

注:可以理解为通配符的使用

3.2.4 大于等于运算符的使用

3.2.4.1 语法格式

"uid>=User100"

3.2.4.2 使用范例

ldapsearch -x -h ldapSer.cmdschool.org -p 389 -W -b "dc=cmdschool,dc=org" "uid>=User100"

注:大于等于关系可匹配数字或字符串

3.2.4 小于等于运算符的使用

3.2.4.1 语法格式

"uid<=User100"

3.2.4.2 使用范例

ldapsearch -x -h ldapSer.cmdschool.org -p 389 -W -b "dc=cmdschool,dc=org" "uid<=User100"

注:小于等于关系可匹配数字或字符串

3.2.5 约等于运算符的使用

3.2.5.1 语法格式

"uid~=User"

3.2.5.2 使用范例

ldapsearch -x -h ldapSer.cmdschool.org -p 389 -W -b "dc=cmdschool,dc=org" "uid<=User"

3.2.6 逻辑与运算符的使用

3.2.6.1 语法格式

"(&(deptname=IT)(cn=Will Tan))"

3.2.6.2 使用范例

ldapsearch -x -h ldapSer.cmdschool.org -p 389 -W -b "dc=cmdschool,dc=org" "(&(deptname=IT)(en=Will))"

注:查找IT部,英文名字叫“Will”条目

3.2.7 逻辑或运算符的使用

3.2.6.1 语法格式

"(|(deptname=IT)(deptname=Finance))"

3.2.6.2 使用范例

ldapsearch -x -h ldapSer.cmdschool.org -p 389 -W -b "dc=cmdschool,dc=org" "(|(deptname=IT)(deptname=Finance))"

注:查找IT部或者财务条目

3.2.7 逻辑非运算符的使用

3.2.6.1 语法格式

'(!(deptname=IT))'

3.2.6.2 使用范例

ldapsearch -x -h ldapSer.cmdschool.org -p 389 -W -b "dc=cmdschool,dc=org" '(!(deptname=IT))'

注:
– 查非IT部条目
– 使用非云算法要使用单引号,表示不扩展

3.3 特指属性的使用方法

3.3.1 返回单个属性

ldapsearch -x -h ldapSer.cmdschool.org -p 389 -W -b "dc=cmdschool,dc=org" "uid=User001" en

注:查找用户ID是“User001”的用户,只要求返回英文名字的属性

3.3.2 返回多个属性

ldapsearch -x -h ldapSer.cmdschool.org -p 389 -W -b "dc=cmdschool,dc=org" "uid=User001" en deptname

注:查找用户ID是“User001”的用户,要求返回指定属性英文名字和部门名称
参阅文档:
=============================================
LDAP数据交换格式(LDIF):

IBM ldapsearch

IBM ldapsearch的参数

IBM ladpsearch的指定搜索属性

IBM ldapsearch的搜索过滤器中的运算符使用

IBM ldapsearch的搜索样例

openldap的帮助文件

没有评论

发表评论

OpenLDAP
如何用ldapsearch检索微软AD域?

1 前言 一个问题,一篇文章,一出故事。 今天老板提出需要使用ldapsearch工具去检索Micr …

OpenLDAP
密码保护:如何yum部署OpenLDAP Proxy Cache?

无法提供摘要。这是一篇受保护的文章。

OpenLDAP
如何配置OpenLDAP的slapd?

1 基础知识 1.1 slapd的特性 – OpenLDAP 2.3以上版本支持动态加载 …