14.4. Common ldapsearches 示例

下一个示例假设如下:
  • 搜索是目录中所有条目的搜索。
  • 目录被配置为支持匿名搜索和读取。这意味着,不需要提供绑定信息才能执行搜索。有关匿名访问的详情,请参考 第 18.11.1.1.3 节 “授予匿名访问权限”
  • 服务器位于名为 server.example.com 的主机上。
  • 服务器使用端口号 389。由于这是默认端口,因此不必在搜索请求中发送端口号。
  • 为端口 636 上的服务器启用 TLS (默认的 LDAPS 端口号)。
  • 存储所有数据的后缀都是 dc=example,dc=com

14.4.1. 返回所有条目

根据前面的信息,以下调用将返回目录中的所有条目(可能到配置的大小和时间资源限值):
# ldapsearch -D "cn=Directory Manager" -W -p 389 -h server.example.com -b "dc=example,dc=com" -s sub -x "(objectclass=*)"
"objectClass= the"是与目录中任何条目的搜索过滤器。由于每个条目都必须具有对象类,并且 objectclass 属性始终被索引,因此这是一个有用的搜索过滤器,用于返回每个条目。

14.4.2. 在命令行中指定搜索过滤器

只要过滤器用引号("filter")括起,就可以在命令行中直接指定搜索过滤器。如果过滤器通过命令提供,请不要指定 -f 选项。例如:
# ldapsearch -D "cn=Directory Manager" -W -p 389 -h server.example.com -b "dc=example,dc=com" -s sub -x "cn=babs jensen"

14.4.3. 搜索根 DSE 条目

root DSE 是一个特殊的条目,其中包含目录服务器实例的信息,包括本地目录服务器支持的所有后缀。可通过提供搜索基础 ""、基础范围 base, 和过滤器 "objectclass=*"。例如:
# ldapsearch -D "cn=Directory Manager" -W -p 389 -h server.example.com -x -b "" -s base "objectclass=*"

14.4.4. 搜索 Schema 条目

cn=schema 条目是一个特殊的条目,其中包含有关目录模式的信息,如对象类和属性类型。
以下命令列出 cn=schema 条目的内容:
# ldapsearch -o ldif-wrap=no -D "cn=Directory Manager" -W -b "cn=schema" \
    '(objectClass=subSchema)' -s sub objectClasses attributeTypes matchingRules \
    matchingRuleUse  dITStructureRules nameForms ITContentRules ldapSyntaxes

14.4.5. 使用 LDAP_BASEDN

要更轻松地搜索搜索,可以使用 LDAP_BASEDN 环境变量设置搜索基础。这样做意味着,无需使用 -b 选项设置搜索基础。有关如何设置环境变量的详情,请参考操作系统的文档。
通常,将 LDAP_BASEDN 设置为目录的后缀值。由于目录后缀等于根目录或最顶层的条目,因此会导致所有搜索都从目录的 root 条目开始。
例如,将 LDAP_BASEDN 设置为 dc=example,dc=com,并在目录中搜索 cn=babs jensen,使用以下命令行调用:
# export LDAP_BASEDN="dc=example,dc=com"

# ldapsearch -D "cn=Directory Manager" -W -p 389 -h server.example.com -x "cn=babs jensen"
在本例中,使用了 sub 的默认范围,因为 -s 选项没有指定范围。

14.4.6. 显示属性的子组

ldapsearch 命令以 LDIF 格式返回所有搜索结果。默认情况下,ldapsearch 返回条目的可分辨名称和允许用户读取的所有属性。可以设置目录访问控制,以便用户只能读取任何给定目录条目的属性子集。仅返回操作属性。对于作为搜索操作返回的操作属性,请在 search 命令中明确指定它们,或使用 + 返回所有操作属性。
对于搜索结果返回的条目的所有属性,可能不需要这样做。通过在搜索过滤器后马上在命令行中指定所需的属性,可以将返回的属性限制为只有几个特定的属性。例如,要显示目录中每个条目的 cnsn 属性,请使用以下命令行调用:
# ldapsearch -D "cn=Directory Manager" -W -p 389 -h server.example.com -b "dc=example,dc=com" -s sub -x "(objectclass=*)" sn cn

14.4.7. 搜索过期属性

操作属性是由目录服务器本身设置的特殊属性,供服务器用于执行维护任务,如处理访问控制指令。它们还显示有关条目的特定信息,如最初创建的时间以及创建它的用户的名称。操作属性可用于目录中的每个条目,无论是否为条目的对象类特别定义属性。
常规 ldapsearch 不会返回操作属性。根据 RFC3673,使用 + 返回搜索请求中的所有操作属性:
# ldapsearch -D "cn=Directory Manager" -W -p 389 -h server.example.com -b "dc=example,dc=com" -s sub -x "(objectclass=*)" '+'
要只返回一些定义的操作属性,请在 ldapsearch 请求中明确指定它们:
# ldapsearch -D "cn=Directory Manager" -W -p 389 -h server.example.com -b "dc=example,dc=com" -s sub -x "(objectclass=*)" creatorsName createTimestamp modifiersName modifyTimestamp
操作属性的完整列表请参见 红帽目录服务器 11 配置、命令和文件参考 中的"操作属性和对象类"一章。
注意
要返回所有常规条目属性以及指定的操作属性,除了列出的操作属性外,还使用特殊的搜索属性 "*"
# ldapsearch -D "cn=Directory Manager" -W -p 389 -h server.example.com -b "dc=example,dc=com" -s sub -x "(objectclass=*)" "*" aci
星号必须用引号括起来,以防止 shell 解释它。

14.4.8. 使用文件指定搜索过滤器

可以在文件中输入搜索过滤器,而不是在命令行中输入它们。在这种情况下,在文件中的单独行中指定每个搜索过滤器。ldapsearch 命令以文件中显示的顺序运行每个搜索。
例如:
sn=example
givenname=user
ldapsearch 首先找到将 surname 设置为 example 的所有条目,然后将 givenname 设置为 user 的所有条目。如果找到与两个搜索条件匹配的条目,则返回两次。
例如,在这个搜索中,过滤器在名为 searchdb 的文件中指定:
# ldapsearch -D "cn=Directory Manager" -W -p 389 -h server.example.com -x -f searchdb
这里返回的属性集合可以通过指定搜索行末尾的属性名称来限制。例如,以下 ldapsearch 命令同时执行搜索,但只返回每个条目的 DN 和 givennamesn 属性:
# ldapsearch -D "cn=Directory Manager" -W -p 389 -h server.example.com -x -f searchdb sn givenname

14.4.9. 指定在搜索过滤器中包含 Commas 的 DN

当搜索过滤器中的 DN 包含逗号作为其值的一部分时,必须使用反斜杠(\)转义逗号。例如,要查找 example.com Bolivia、S.A. 子树中的任何人,请使用以下命令:
# ldapsearch -D "cn=Directory Manager" -W -p 389 -h server.example.com -x -s base -b "l=Bolivia\,S.A.,dc=example,dc=com" "objectclass=*"

14.4.10. 使用客户端证书绑定到目录服务器

14.4.11. 使用语言匹配规则搜索

要在搜索过滤器中显式提交匹配的规则,请在属性后插入匹配的规则:
attr:matchingRule:=value
匹配规则通常用于搜索国际化目录。例如,这会在 Swedish (2.16.840.1.113730.3.3.2.46.1)匹配规则中的 N4709 后搜索部门号。
departmentNumber:2.16.840.1.113730.3.3.2.46.1:=>= N4709
第 D.4 节 “搜索国际目录” 中提供了有关执行国际化搜索的更多示例。

14.4.12. 使用 Bit 字段值搜索属性

位搜索使用位 AND 或位 OR 匹配规则对属性执行位搜索操作,并带有位字段的值。
注意
在 LDAP 中,带有位字段值的属性不常见。(没有默认的 Directory Server 模式使用位字段作为属性语法。) 但是,几个 LDAP 语法支持以整数样式的值。可以定义使用位字段值的自定义属性,应用程序可以使用这些自定义属性对位字段值执行位操作。
位 AND 匹配规则(1.2.840.113556.1.4.803)检查断言值中是否设置了位。(这与相等的搜索类似。) 在本例中,userAccountControl 值必须设置为代表 2 的位。
"(UserAccountControl:1.2.840.113556.1.4.803:=2)"
在本例中,userAccountControl 值必须具有值 6 设置的所有位(位 2 和 4)。
"(UserAccountControl:1.2.840.113556.1.4.803:=6)”
位 OR 匹配规则(1.2.840.113556.1.4.804)检查断言字符串 中的任何 位是否在属性值中表示。(这与子字符串搜索类似。) 在本例中,userAccountControl 值必须具有在 6 位字段中设置的任何位,表示属性值可以是 2、4 或 6。
"(UserAccountControl:1.2.840.113556.1.4.804:=6)"
位搜索可与 Windows-Red Hat Enterprise Linux 集成(如使用 Samba 文件服务器)一起使用。