介绍
如果您不知道如何配置您的系统或在哪里找到所需的重要信息,则管理 OpenLDAP 系统可能很困难. 在本指南中,我们将展示如何查询您的 OpenLDAP 服务器以获取关键信息,以及如何对运行系统进行更改。
前提条件
要启动,您应该可以访问一个安装和配置 OpenLDAP 的系统。 您可以学习如何设置 OpenLDAP 服务器 [这里] (https://andsky.com/tech/tutorials/how-to-install-and-configure-openldap-and-phpldapadmin-on-an-ubuntu-14-04-server) 。 您应该熟悉在 LDAP 目录服务中使用的基本术语。 [本指南] (https://andsky.com/tech/tutorials/understanding-the-ldap-protocol-data-hierarchy-and-entry-components)可用于更熟悉这些话题.
OpenLDAP在线配置
LDAP 系统将其存储的数据组织成称为 Directory Information Trees 或** DITs** 的等级结构,从版本 2.3 开始,OpenLDAP 服务器的实际配置在一个特殊的 DIT 中进行管理,通常根植于一个名为 cn=config
的输入。
这种配置系统被称为OpenLDAP在线配置,或 OLC . 与依赖于服务启动时阅读配置文件的过度配置方法不同,对OLC的修改立即实施,通常不需要重新启动服务。
OLC 系统使用标准 LDAP 方法进行身份验证和更改,因此,经验丰富的 LDAP 管理员的管理往往是无缝的,因为他们可以使用相同的知识、技能和工具来操作数据 DITs。
本指南将专注于教你基本的OpenLDAP管理来克服这种鸡蛋的情况,这样你就可以开始学习LDAP和管理你的系统。
访问 root DSE
我们将开始谈论一个名为 root DSE 的构造,这是包含我们服务器的所有个别 DIT 的结构,这基本上是一个用于管理服务器知道的所有 DIT 的条目,从这个条目开始,我们可以查询服务器,看看它是如何组织的,并找出下一步去哪里。
<$>[注] [标签 What Does DSE Stand For?] DSE 代表DSA 特定的输入
,即 LDAP 服务器中的管理或控制输入 DSA 代表目录系统代理
,本质上意味着执行 LDAP 协议的目录服务器。
要查询根 DSE,我们必须使用空(null)搜索基础进行搜索,并且具有)。
我们需要的命令是这样的:
1ldapsearch -H ldap:// -x -s base -b "" -LLL "+"
我们假设您正在从 LDAP 服务器本身执行此操作,并且您尚未设置任何访问限制。
1[label root DSE Output]
2dn:
3structuralObjectClass: OpenLDAProotDSE
4configContext: cn=config
5namingContexts: dc=example,dc=com
6supportedControl: 2.16.840.1.113730.3.4.18
7
8. . .
9
10supportedLDAPVersion: 3
11supportedSASLMechanisms: GS2-IAKERB
12supportedSASLMechanisms: GS2-KRB5
13supportedSASLMechanisms: SCRAM-SHA-1
14supportedSASLMechanisms: GSSAPI
15supportedSASLMechanisms: DIGEST-MD5
16supportedSASLMechanisms: NTLM
17supportedSASLMechanisms: CRAM-MD5
18entryDN:
19subschemaSubentry: cn=Subschema
您可以看到有关这个LDAP服务器的重要元数据. 我们将涵盖一些这些项目的含义。
-H ldap://
命令用于在 localhost 上指定一个未加密的 LDAP 查询. 没有任何身份验证信息的 -x
让服务器知道你想要一个匿名连接. 我们告诉它搜索范围,并将搜索基础设置为 null 与 -s base -b ""
. 我们用 -LLL
抑制一些外部输出。
查找此服务器管理的 DITs
对于我们现在的目的,我们正在试图找出这个特定的LDAP服务器配置为什么DITs服务,我们可以找到这个作为上面的输出中我们可以看到的namingContexts
操作属性的值。
如果这是我们想要的唯一信息,我们可以构建一个更好的查询,看起来像这样:
1ldapsearch -H ldap:// -x -s base -b "" -LLL "namingContexts"
在这里,我们已经调用了我们想要知道的值的确切属性。在服务器上每个DIT的基本输入是通过namingContexts
属性可用的。
这将抑制其他信息,给我们看起来像这样的清洁输出:
1[label namingContexts search]
2dn:
3namingContexts: dc=example,dc=com
我们可以看到,这个LDAP服务器只有一个(非管理)DIT,该DIT根植于一个以)的入口。
查找此配置
可用于配置 OpenLDAP 服务器的 DIT 不会通过搜索namingContexts
返回,而 config DIT 的根输入则存储在一个名为configContext
的专用属性中。
要了解 DIT 配置的 base DN,您可以查询此特定属性,就像我们之前一样:
1ldapsearch -H ldap:// -x -s base -b "" -LLL "configContext"
结果可能会是这样的:
1[label configContext search]
2dn:
3configContext: cn=config
配置 DIT 基于一个 DN 称为 cn=config
. 由于这很可能与您的配置 DIT 完全匹配,我们将在整个指南中使用此功能。
访问配置 DIT
现在我们知道配置 DIT 的位置,我们可以查询它以查看当前的设置。
由于这个DIT可以用来更改我们的LDAP系统的设置,它有一些访问控制,它是配置的,默认情况下,允许 root 或sudo
用户的操作系统的管理。
我们需要的命令看起来像这样:
1sudo ldapsearch -H ldapi:// -Y EXTERNAL -b "cn=config" -LLL -Q
要完成这项工作,您需要在命令之前使用sudo
并将我们以前的ldapsearch
命令中的x
代替为Y EXTERNAL
,以表示我们想要使用SASL身份验证方法。您还需要将协议从ldap://
更改为ldapi://
,以便通过Unix接口进行请求。
结果将是一个长的设置列表. 将其输入到页面中可能有帮助,以便您可以轻松滚动:
1sudo ldapsearch -H ldapi:// -Y EXTERNAL -b "cn=config" -LLL -Q | less
您可以看到有相当多的信息,这可以处理很多。这个命令打印了整个配置树. 为了更好地了解信息被组织和存储的层次结构,让我们简单地打印出不同的输入DN:
1sudo ldapsearch -H ldapi:// -Y EXTERNAL -b "cn=config" -LLL -Q dn
这将是一个更易于管理的列表,显示入口标题(DNs)本身而不是其全部内容:
1[label cn=config entry DNs]
2dn: cn=config
3
4dn: cn=module{0},cn=config
5
6dn: cn=schema,cn=config
7
8dn: cn={0}core,cn=schema,cn=config
9
10dn: cn={1}cosine,cn=schema,cn=config
11
12dn: cn={2}nis,cn=schema,cn=config
13
14dn: cn={3}inetorgperson,cn=schema,cn=config
15
16dn: olcBackend={0}hdb,cn=config
17
18dn: olcDatabase={-1}frontend,cn=config
19
20dn: olcDatabase={0}config,cn=config
21
22dn: olcDatabase={1}hdb,cn=config
这些条目代表了 LDAP 系统的不同区域配置的配置层次,让我们看看这些条目中的每个条目处理了哪些设置:
顶级条目包含一些全球设置,这些设置将适用于整个系统(除非在更具体的背景下被压缩)。
1sudo ldapsearch -H ldapi:// -Y EXTERNAL -b "cn=config" -LLL -Q -s base
本节中常见的项目包括全球授权设置、日志级词汇设置、指向过程的 PID 文件位置的指针以及有关 SASL 身份验证的信息。
下面的条目配置了系统的更具体的区域,让我们看看你可能会看到的不同类型的条目。
查找 Admin 入口
现在你可以访问)。
要查找每个 DIT 的 rootDN,键入:
1sudo ldapsearch -H ldapi:// -Y EXTERNAL -b "cn=config" "(olcRootDN=*)" olcSuffix olcRootDN olcRootPW -LLL -Q
你会得到一个印刷,看起来像这样的东西:
1[label rootDN Information]
2dn: olcDatabase={1}hdb,cn=config
3olcSuffix: dc=example,dc=com
4olcRootDN: cn=admin,dc=example,dc=com
5olcRootPW: {SSHA}AOADkATWBqb0SJVbGhcIAYF+ePzQJmW+
如果您的系统提供多个DIT,您应该看到每个DIT的一个区块,在这里,我们可以看到我们的管理员条目是cn=admin,dc=example,dc=com
的DIT基于dc=example,dc=com
。
查看计划信息
LDAP 方案定义了可用于系统的 objectClasses 和属性. 可在运行时添加到系统中,以使不同的对象类型和属性可用。
查看内置方案
嵌入式方案可以在 cn=schema,cn=config
条目中找到,您可以通过键入查看 LDAP 系统内置的方案:
1sudo ldapsearch -H ldapi:// -Y EXTERNAL -b "cn=schema,cn=config" -s base -LLL -Q | less
这将向您展示包括在OpenLDAP系统本身的方案,不像任何其他方案,这不需要添加到系统使用。
查看附加方案
内置方案提供了一个不错的跳出点,但它可能不会有你想要在你的条目中使用的一切。你可以通过传统的LDIF方法添加额外的方案到你的系统。
通常,这些将被命名为一个分布式的数字,然后是系统名称,如cn={0}core,cn=schema,cn=config
。
要查看系统上加载的附加方案的名称,您可以键入:
1sudo ldapsearch -H ldapi:// -Y EXTERNAL -b "cn=schema,cn=config" -s one -Q -LLL dn
输出将显示子输入的名称. 它可能看起来像这样的东西,取决于什么被加载到系统:
1[label additional schemas]
2dn: cn={0}core,cn=schema,cn=config
3
4dn: cn={1}cosine,cn=schema,cn=config
5
6dn: cn={2}nis,cn=schema,cn=config
7
8dn: cn={3}inetorgperson,cn=schema,cn=config
您可以通过进行基础搜索并列出您感兴趣的特定方案来查看特定方案的内容,例如,如果我们想看到上面列出的cn={3}inetorgperson
方案,我们可以键入:
1sudo ldapsearch -H ldapi:// -Y EXTERNAL -b "cn={3}inetorgperson,cn=schema,cn=config" -s base -LLL -Q | less
如果要打印所有额外的方案,请代替键入:
1sudo ldapsearch -H ldapi:// -Y EXTERNAL -b "cn=schema,cn=config" -s one -LLL -Q | less
如果要打印所有方案,包括内置方案,请使用以下内容:
1sudo ldapsearch -H ldapi:// -Y EXTERNAL -b "cn=schema,cn=config" -LLL -Q | less
模块、后端和数据库设置
DIT配置中一些其他感兴趣的领域是模块和各种存储技术设置。
模块
模块用于扩展OpenLDAP系统的功能,这些条目用于指向和加载模块,以便使用其功能,实际配置是通过其他条目完成的。
用于加载模块的输入将从cn=module{# }
开始,其中支架包含一个数字,以便顺序加载模块并区分各种输入。
您可以通过键入显示在系统上动态加载的模块:
1sudo ldapsearch -H ldapi:// -Y EXTERNAL -b "cn=config" -LLL -Q "objectClass=olcModuleList"
您将看到目前在系统中加载的模块:
1[label loaded modules]
2dn: cn=module{0},cn=config
3objectClass: olcModuleList
4cn: module{0}
5olcModulePath: /usr/lib/ldap
6olcModuleLoad: {0}back_hdb
这个特定的例子只有一个模块,允许我们使用hdb
后端模块。
背后
后端条目用于指定实际处理数据存储的存储技术。
要查看哪些后端对您的系统是活跃的,请键入:
1sudo ldapsearch -H ldapi:// -Y EXTERNAL -b "cn=config" -LLL -Q "objectClass=olcBackendConfig"
结果会给你一个使用的存储技术的想法. 它可能看起来像这样的东西:
1[label OpenLDAP active backends]
2dn: olcBackend={0}hdb,cn=config
3objectClass: olcBackendConfig
4olcBackend: {0}hdb
数据库
这些存储系统的实际配置是在单独的数据库条目中完成的。 每个DIT都应该有一个数据库条目,而OpenLDAP系统则可以服务。
要查看系统上的所有数据库条目名称,键入:
1sudo ldapsearch -H ldapi:// -Y EXTERNAL -b "cn=config" -LLL -Q "olcDatabase=*" dn
您应该看到数据库条目的DNs:
1[label database entries]
2dn: olcDatabase={-1}frontend,cn=config
3
4dn: olcDatabase={0}config,cn=config
5
6dn: olcDatabase={1}hdb,cn=config
让我们来讨论一下每一个用于什么:
校对:Soup 本条目用于定义"前端"特殊数据库的特征. 这是一个用于定义全球设置的伪数据库,应适用于所有其他数据库(除非被覆盖)。
Cn=config ========================================================================================================================================================================================================================================================= 本条目用于定义我们现在使用的cn=配置
数据库的设置。 在大多数情况下,这主要是访问控制设置,复制配置等.
校对:Soup 本条目定义了指定类型的数据库的设置(此处为"hdb"). 这些一般会定义访问控制,数据将如何存储,缓存,缓冲的细节,以及DIT的根入和行政管理细节.
.
列表中的数字代表一个索引值. 它们主要是由系统自动创建的. 您将不得不替换输入的值,以便成功引用它。
您可以通过输入查看任何这些条目的内容:
1sudo ldapsearch -H ldapi:// -Y EXTERNAL -b "entry_to_view" -LLL -Q -s base | less
使用从上一个命令返回的输入 DN 来填充 entry_to_view
字段。
打印输入的操作属性(元数据)
到目前为止,我们主要使用cn=config
DIT,本指南的其余部分也适用于常规DIT。
每个条目都有作为行政元数据的操作属性,这些属性可以在任何DIT中访问,以了解有关条目的重要信息。
要打印输入的所有操作属性,您可以在输入后指定特殊的+
属性,例如,要打印输入的操作属性在dc=example,dc=com
,我们可以键入:
1ldapsearch -H ldap:// -x -s base -b "dc=example,dc=com" -LLL "+"
这将打印出所有操作属性. 它可能会看起来像这样的东西:
1[list operational attributes]
2dn: dc=example,dc=com
3structuralObjectClass: organization
4entryUUID: cdc658a2-8c3c-1034-8645-e30b83a2e38d
5creatorsName: cn=admin,dc=example,dc=com
6createTimestamp: 20150511151904Z
7entryCSN: 20150511151904.220840Z#000000#000#000000
8modifiersName: cn=admin,dc=example,dc=com
9modifyTimestamp: 20150511151904Z
10entryDN: dc=example,dc=com
11subschemaSubentry: cn=Subschema
12hasSubordinates: TRUE
这可以帮助您查看谁在何时修改或创建了条目。
与子方案合作
子图是可用的类和属性的表示。它显示了类似于cn=config
DIT中的方案条目中的信息,并提供了一些额外的信息。
查找子程式
要查找输入的子图,您可以查询输入的所有操作属性,如上所述,或者您可以查询定义输入的子图的特定属性(‘subschemaSubentry’):
1ldapsearch -H ldap:// -x -s base -b "dc=example,dc=com" -LLL subschemaSubentry
这将打印与当前条目相关联的子方案条目:
1[list subchema entry]
2dn: dc=chilidonuts,dc=tk
3subschemaSubentry: cn=Subschema
一般来说,树内的每个条目都共享相同的子图,因此您通常不需要对每个条目进行查询。
显示子图
要查看子图列表的内容,我们需要查询我们上面发现的子图列表以基础
的范围。所有重要信息都存储在操作属性中,所以我们将不得不再次使用特殊的+
选择器。
我们需要的命令是:
1ldapsearch -H ldap:// -x -s base -b "cn=subschema" -LLL "+" | less
这将打印整个子图入口,我们可以根据我们正在寻找的信息类型进行过滤。
如果您想要查看 LDAP 语法定义,您可以通过键入来过滤:
1ldapsearch -H ldap:// -x -s base -b "cn=subschema" -LLL ldapSyntaxes | less
如果要查看控制如何处理搜索以匹配条目的定义,请键入:
1ldapsearch -H ldap:// -x -s base -b "cn=subschema" -LLL matchingRules | less
要查看哪些项目可以使用匹配规则匹配,键入:
1ldapsearch -H ldap:// -x -s base -b "cn=subschema" -LLL matchingRuleUse | less
若要查看可用的属性类型的定义,请使用:
1ldapsearch -H ldap:// -x -s base -b "cn=subschema" -LLL attributeTypes | less
若要查看 objectClass 定义,请键入:
1ldapsearch -H ldap:// -x -s base -b "cn=subschema" -LLL objectClasses | less
结论
虽然操作 OpenLDAP 服务器起初可能看起来很困难,但了解 DIT 配置以及如何在系统中找到元数据可以帮助您成功地运行。使用 LDIF 文件更改 cn=config
DIT 可以立即影响运行系统。