搜索

第 4 章 LDAP 搜索(ldapsearch)示例

download PDF

以下示例提供了在目录中搜索的最常见"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 命令中明确指定这些属性,或使用 + 参数返回所有操作属性。如需更多信息,请参阅搜索操作属性

您可以通过在搜索过滤器后在命令行中指定所需属性,将返回的属性限制为几个特定属性。

例如,要显示目录中每个条目的 cnsn 属性,请输入:

# 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 和 givennamesn 属性:

# 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 中设置的所有位(位 24):

"(UserAccountControl:1.2.840.113556.1.4.803:=6)”

匹配规则(1.2.840.113556.1.4.804)检查断言字符串中的任何位是否在属性值中表示。它与子字符串搜索类似。在本例中,UserAccountControl 值必须具有 6 位字段设置的任何位,表示属性值可以是 246

"(UserAccountControl:1.2.840.113556.1.4.804:=6)"

您可以将位搜索与 Windows-Linux 集成一起使用,例如使用 Samba 文件服务器。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.