第 4 章 LDAP 搜索(ldapsearch)示例
以下示例提供了在目录中搜索的最常见"ldapsearch"es。
先决条件
- 您可以对目录中的所有条目执行搜索。
-
您已将该目录配置为支持匿名搜索和读取操作。因此,您不需要在命令中使用
-W
和-D
选项来提供任何绑定信息。有关匿名访问的更多信息,请参阅 授予匿名访问。 - 服务器使用默认端口号 389。您不需要在搜索请求中指定它。
-
服务器具有
server.example.com
主机名。 -
您为端口
636
上的服务器(默认的 LDAPS 端口号)启用了 TLS。 -
目录服务器将所有数据存储在
dc=example,dc=com
后缀下。
返回所有条目
以下 LDAP 搜索返回目录中的所有条目:
# ldapsearch -H ldap://server.example.com -b "dc=example,dc=com" -s sub -x "(objectclass=*)"
使用 (objectclass
categories)搜索过滤器返回 目录中的每个条目。每个条目都必须有一个对象类,并且始终索引 objectclass
属性。
在命令行中指定搜索过滤器
您可以通过将过滤器放在引号("filter")中直接对命令指定搜索过滤器。如果您在命令中提供过滤器,请不要指定 -f
选项。例如,要指定 "cn=babs jensen"
,请输入:
# ldapsearch -H ldap://server.example.com -b "dc=example,dc=com" -s sub -x "cn=babs jensen"
搜索 Root DSE 条目
root DSE 是一个特殊的条目,其中包含有关目录服务器实例的信息,包括本地目录服务器支持的所有后缀。通过提供搜索基础 ""
、搜索范围 基础
,以及过滤器 "objectclassPROFILE" 来搜索此条目
,例如:
# ldapsearch -H ldap://server.example.com -x -b "" -s base "objectclass=*"
搜索 schema 条目
cn=schema
条目是一个特殊的条目,其中包含与目录架构相关的信息,如对象类和属性类型。
要列出 cn=schema
条目的内容,请输入以下命令之一:
# ldapsearch -x -o ldif-wrap=no -b "cn=schema" \ '(objectClass=subSchema)' -s sub objectClasses attributeTypes matchingRules \ matchingRuleUse dITStructureRules nameForms ITContentRules ldapSyntaxes
或者
# ldapsearch -x -o ldif-wrap=no -b "cn=schema" \ '(objectClass=subSchema)' -s sub "+"
使用 LDAP_BASEDN
变量
要简化搜索,您可以使用 LDAP_BASEDN
环境变量设置搜索基础。您可以设置 LDAP_BASEDN
,而不是使用带有 -b
选项的 ldapsearch
命令。有关设置环境变量的更多信息,请参阅操作系统文档。
将 LDAP_BASEDN
设置为目录后缀值。因为目录后缀等于目录中 root 条目,所以所有搜索都从目录根条目开始。
例如,要将 LDAP_BASEDN
变量设置为 dc=example,dc=com
,并在目录中搜索 cn=babs jensen
,请输入:
# export LDAP_BASEDN="dc=example,dc=com" # ldapsearch -H ldap://server.example.com -x "cn=babs jensen"
命令使用默认范围 子
,因为未提供 -s
选项指定范围。
显示属性的子集
ldapsearch
命令以 LDIF 格式返回所有搜索结果。默认情况下,ldapsearch 返回条目可区分名称(DN)以及允许用户读取的所有属性。您可以设置目录访问控制,允许用户只读取任何给定目录条目的属性子集。
默认情况下,目录服务器不会返回操作属性。要在搜索操作后返回操作属性,请在 search 命令中明确指定这些属性,或使用 +
参数返回所有操作属性。如需更多信息,请参阅搜索操作属性。
您可以通过在搜索过滤器后在命令行中指定所需属性,将返回的属性限制为几个特定属性。
例如,要显示目录中每个条目的 cn
和 sn
属性,请输入:
# ldapsearch -H ldap://server.example.com -b "dc=example,dc=com" -s sub -x "(objectclass=*)" sn cn
搜索操作属性
操作属性是目录服务器设置自身的特殊属性。目录服务器使用操作属性来执行维护任务,如处理访问控制指令。这些属性显示有关条目的具体信息,如最初创建此条目的时间以及创建它的用户名称。
您可以在目录中的每一条目上使用操作属性,即使属性是为条目的对象类定义的。
常规 ldapsearch
命令不会返回操作属性。根据 RFC3673,使用 +
返回搜索请求中的所有操作属性:
# ldapsearch -H ldap://server.example.com -b "dc=example,dc=com" -s sub -x "(objectclass=*)" '+'
要只返回某些定义的操作属性,请在 ldapsearch
请求中明确指定它们:
# ldapsearch -H ldap://server.example.com -b "dc=example,dc=com" -s sub -x "(objectclass=*)" creatorsName createTimestamp modifiersName modifyTimestamp
有关操作属性的完整列表,请参阅操作属性和对象类。
要返回所有常规条目属性以及指定的操作属性,除了您列出的操作属性外,还使用特殊的搜索属性 "*"
。
# ldapsearch -H ldap://server.example.com -b "dc=example,dc=com" -s sub -x "(objectclass=*)" "*" aci
请注意,您必须将星号 packagemanifests 包含在引号中,以防止 shell 对其进行解释。
使用文件指定搜索过滤器
您可以在文件中指定搜索过滤器,而不是在命令行中输入它们。
在文件中的单独行中指定每个搜索过滤器。ldapsearch
命令按文件中显示的顺序运行每个搜索。
例如,该文件包含以下过滤器:
sn=example givenname=user
ldapsearch
命令首先查找将 surname
设置为 example
的所有条目,然后查找将 givenname
设置为 用户 的所有条目
。如果搜索请求找到与这两个搜索条件匹配的条目,则条目会返回两次。
在以下搜索中,过滤器在名为 searchdb
的文件中指定:
# ldapsearch -H ldap://server.example.com -x -f searchdb
您可以通过在搜索行末尾指定属性名称来限制返回的属性集合。例如,以下 ldapsearch
命令执行这两个搜索,但只返回每个条目的 DN 和 givenname
和 sn
属性:
# ldapsearch -H ldap://server.example.com -x -f searchdb sn givenname
指定在搜索过滤器中包含逗号的 DN
当搜索过滤器中的 DN 包含作为值一部分的逗号时,search 命令必须使用反斜杠(\)转义逗号。例如,要查找 example .com Bolivia (S.A.
子树)中的每个人,请输入:
# ldapsearch -H ldap://server.example.com -x -s base -b "l=Bolivia\, S.A.,dc=example,dc=com" "objectclass=*"
在过滤器中使用 nsRole
虚拟属性
在以下示例中,ldap search
命令搜索包含 nsrole
属性设置为 managed_role
值的所有用户条目的 DN:
# ldapsearch -H ldap://server.example.com -x -b "dc=example,dc=com" "(nsrole=cn=managed_role,dc=example,dc=com)" dn
使用客户端证书绑定到目录服务器
有关基于证书的身份验证的更多信息,请参阅配置基于证书的身份验证。
使用语言匹配规则搜索
要在搜索过滤器中显式提交匹配规则,请在属性后面插入匹配的规则:
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
有关执行国际化搜索的更多示例,请参阅 搜索国际目录。
查找用户所属的组
要查找用户 uid=jdoe,ou=people,dc=example,dc=com
的所有直接或间接组,请输入:
# ldapsearch -D "cn=Directory Manager" -W -H ldap://server.example.com -xLL -b "dc=example,dc=com" "(member:1.2.840.113556.1.4.1941:=uid=jdoe,ou=people,dc=example,dc=com)" dn
带有 chainMatch
匹配规则 的搜索不支持 匿名访问。有关使用 inchainMatch
匹配规则的详情,请参阅 在chainMatch
匹配规则中使用 来查找 LDAP 条目的 ancestry。
查找组成员
要查找 marketing
组的所有直接或间接成员,请输入:
# ldapsearch -D "cn=Directory Manager" -W -H ldap://server.example.com -xLL -b "dc=example,dc=com" "(memberof:1.2.840.113556.1.4.1941:=cn=marketing,ou=groups,dc=example,dc=com)" dn
带有 chainMatch
匹配规则 的搜索不支持 匿名访问。有关使用 inchainMatch
匹配规则的详情,请参阅 在chainMatch
匹配规则中使用 来查找 LDAP 条目的 ancestry。
使用位字段值搜索属性
位的搜索使用位 AND
或 bitwise OR
匹配规则对带有位字段的属性执行位搜索操作。
LDAP 中不常见带有位字段的值的属性。默认目录服务器模式不使用位字段作为属性语法。但是,几个 LDAP 语法支持整数风格的值。您可以定义自定义属性以使用位字段值。应用程序可以使用自定义属性对位字段值执行位操作。
位的 AND
匹配规则(1.2.840.113556.1.4.803
)检查在 bit 字段属性值中是否设置了断言值中的位。它与等同的搜索类似。以下示例将 userAccountControl
值设置为代表 2
的位:
"(UserAccountControl:1.2.840.113556.1.4.803:=2)"
以下示例显示 userAccountControl
值必须具有值 6
中设置的所有位(位 2
和 4
):
"(UserAccountControl:1.2.840.113556.1.4.803:=6)”
位 或
匹配规则(1.2.840.113556.1.4.804
)检查断言字符串中的任何位是否在属性值中表示。它与子字符串搜索类似。在本例中,UserAccountControl
值必须具有 6
位字段设置的任何位,表示属性值可以是 2
、4
或 6
:
"(UserAccountControl:1.2.840.113556.1.4.804:=6)"
您可以将位搜索与 Windows-Linux 集成一起使用,例如使用 Samba 文件服务器。