如何配置OpenLDAP和执行管理任务的LDAP

介绍

如果您不知道如何配置系统或在何处找到所需的重要信息,管理OpenLDAP系统可能会很困难。 在本指南中,我们将演示如何查询OpenLDAP服务器以获取重要信息,以及如何更改运行中的系统。

先决条件

要开始,您应该可以访问已安装和配置了OpenLDAP的系统。 你可以学习如何设置OpenLDAP服务器在这里 您应该熟悉与LDAP目录服务时使用的基本术语。 本指南可用于更熟悉这些主题。

OpenLDAP在线配置

LDAP系统组织他们存储数据到名为目录信息树资讯科技署署长短的层次结构。 与2.3版本开始,OpenLDAP的服务器实际配置是一个特殊的DIT中管理,通常在扎根称为条目cn=config

该构造系统被称为OpenLDAP的在线配置,或OLC。 与依赖于在服务启动时读取配置文件的不推荐的配置方法不同,对OLC进行的修改立即实现,并且通常不需要重新启动服务。

OLC系统使用标准LDAP方法进行身份验证和修改。 因此,经验丰富的LDAP管理员的管理通常是无缝的,因为他们可以使用他们用于操作数据DIT的相同的知识,技能和工具。 但是,对于那些不熟悉LDAP的用户,可能很难入门,因为您可能需要知道如何使用LDAP工具来配置学习环境。

本指南将重点介绍基本的OpenLDAP管理以克服这种鸡肉和蛋的情况,以便您可以开始学习LDAP和管理您的系统。

访问根DSE

我们将首先讨论一个称为根DSE的结构,它是保存我们所有服务器的各个DIT的结构。 这基本上是用于管理服务器知道的所有DIT的条目。 通过在这个条目开始,我们可以查询服务器以查看它是如何组织的,并找出下一步去哪里。

DSE是什么?
DSE表示“DSA特定条目”,它是LDAP服务器中的管理或控制条目。 DSA代表“目录系统代理”,这基本上意味着实现LDAP协议的目录服务器。

要查询根DSE,我们必须使用空白(null)搜索库和搜索范围“base”执行搜索。 基本搜索范围意味着只返回给定的条目。 通常,这用于限制搜索的深度,但是当在根DSE上操作时,这是必需的(如果选择任何其他搜索范围,则不返回任何信息)。

我们需要的命令是:

ldapsearch -H ldap:// -x -s base -b "" -LLL "+"

我们假设您从LDAP服务器本身执行此操作,并且您尚未设置任何访问限制。 结果应该类似于:

根DSE输出
dn:
structuralObjectClass: OpenLDAProotDSE
configContext: cn=config
namingContexts: dc=example,dc=com
supportedControl: 2.16.840.1.113730.3.4.18

. . .

supportedLDAPVersion: 3
supportedSASLMechanisms: GS2-IAKERB
supportedSASLMechanisms: GS2-KRB5
supportedSASLMechanisms: SCRAM-SHA-1
supportedSASLMechanisms: GSSAPI
supportedSASLMechanisms: DIGEST-MD5
supportedSASLMechanisms: NTLM
supportedSASLMechanisms: CRAM-MD5
entryDN:
subschemaSubentry: cn=Subschema

我们已经截断了输出。 您可以查看有关此LDAP服务器的重要元数据。 我们将介绍这些项目中的一些意思。 现在,我们将看看生成此输出的命令。

-H ldap://命令用来指定本地主机上未加密的LDAP查询。 -x没有任何身份验证信息允许服务器知道你想要匿名连接。 我们告诉它的搜索范围,并设置搜索基地为null -s base -b "" 我们抑制了一些无关的输出-LLL 最后, "+"指定我们希望看到的,通常会被隐藏的操作属性(这是我们可以找到我们需要的信息)。

查找此服务器管理的DIT

为了我们现在的目的,我们试图找出这个特定的LDAP服务器被配置为服务的DIT。 我们可以发现,作为价值namingContexts操作属性,我们可以在输出看到上面。

如果这是我们想要的唯一信息,我们可以构造一个更好的查询,如下所示:

ldapsearch -H ldap:// -x -s base -b "" -LLL "namingContexts"

在这里,我们调用了我们想要知道的值的确切属性。 服务器上的每个DIT的基本条目可通过namingContexts属性。 这是一个通常被隐藏的操作属性,但是显式地调用它可以返回它。

这将抑制其他信息,给我们干净的输出,看起来像这样:

namingContexts搜索
dn:
namingContexts: dc=example,dc=com

我们可以看到,这个LDAP服务器具有在一个可分辨名称(DN)中的条目植根只有一个(非管理)DIT dc=example,dc=com 如果服务器负责额外的DIT,这可能返回多个值。

查找配置DIT

可用于配置OpenLDAP服务器DIT中不被用于搜索返回namingContexts 在配置DIT的根条目,而不是存储在称为专用属性configContext

要了解配置DIT的基本DN,您可以查询此特定属性,就像我们以前所做的那样:

ldapsearch -H ldap:// -x -s base -b "" -LLL "configContext"

结果可能是这样的:

configContext搜索
dn:
configContext: cn=config

配置DIT是基于在DN称为cn=config 由于这很可能与您的配置DIT完全匹配,我们将在整个指南中使用它。 如果您的配置DIT不同,请修改给定的命令。

访问配置DIT

现在我们知道配置DIT的位置,我们可以查询它以查看当前设置。 要做到这一点,我们实际上需要从我们一直使用的格式一点点分歧到这一点。

由于此DIT可用于更改我们的LDAP系统的设置,它有一些访问控制到位。 它被配置,默认情况下,允许政府为root或sudo操作系统的用户。

我们需要的命令看起来像这样:

sudo ldapsearch -H ldapi:// -Y EXTERNAL -b "cn=config" -LLL -Q

为了使这项工作,你需要使用sudo命令前,更换-x在我们以前ldapsearch使用命令-Y EXTERNAL ,以表明我们要使用SASL身份验证方法。 你还需要将协议从更改ldap://ldapi://作出了Unix套接字的请求。 这允许OpenLDAP验证操作系统用户,它需要评估访问控制属性。 然后,我们使用cn=config条目我们的搜索的基础。

结果将是一个长列表的设置。 它可能有助于管道到寻呼机,以便您可以轻松地向上和向下滚动:

sudo ldapsearch -H ldapi:// -Y EXTERNAL -b "cn=config" -LLL -Q | less

你可以看到有相当多的信息,这可以是很多的过程。 此命令将打印整个配置树。 为了更好地了解组织和存储信息的层次结构,让我们打印出不同的条目DN:

sudo ldapsearch -H ldapi:// -Y EXTERNAL -b "cn=config" -LLL -Q dn

这将是一个更易于管理的列表,显示条目标题(DN)本身,而不是其整个内容:

cn = config条目DN
dn: cn=config

dn: cn=module{0},cn=config

dn: cn=schema,cn=config

dn: cn={0}core,cn=schema,cn=config

dn: cn={1}cosine,cn=schema,cn=config

dn: cn={2}nis,cn=schema,cn=config

dn: cn={3}inetorgperson,cn=schema,cn=config

dn: olcBackend={0}hdb,cn=config

dn: olcDatabase={-1}frontend,cn=config

dn: olcDatabase={0}config,cn=config

dn: olcDatabase={1}hdb,cn=config

这些条目表示配置LDAP系统的不同区域的配置层次结构。 让我们来看看每个条目处理的设置:

顶层条目包含将应用于整个系统的一些全局设置(除非在更具体的上下文中被覆盖)。 您可以通过键入以下内容查看此条目中存储的内容:

sudo ldapsearch -H ldapi:// -Y EXTERNAL -b "cn=config" -LLL -Q -s base

此部分中的常见项目是全局授权设置,日志级别详细信息设置,指向进程的PID文件位置的指针以及有关SASL认证的信息。

此下面的条目配置系统的更多特定区域。 让我们来看看你可能看到的不同类型的条目。

查找管理员条目

现在,您可以访问cn=config DIT,我们可以发现所有的系统上DITS的rootDNs。 rootDN基本上是管理条目。 我们还可以找到可用于登录该帐户的密码(通常是哈希)。

要查找每个DIT的rootDN,请键入:

sudo ldapsearch -H ldapi:// -Y EXTERNAL -b "cn=config" "(olcRootDN=*)" olcSuffix olcRootDN olcRootPW -LLL -Q

你会得到一个看起来像这样的打印输出:

rootDN信息
dn: olcDatabase={1}hdb,cn=config
olcSuffix: dc=example,dc=com
olcRootDN: cn=admin,dc=example,dc=com
olcRootPW: {SSHA}AOADkATWBqb0SJVbGhcIAYF+ePzQJmW+

如果您的系统提供多个DIT,您应该看到每个DIT的一个块。 在这里,我们可以看到,我们的管理员条目是cn=admin,dc=example,dc=com基于在DIT dc=example,dc=com 我们也可以看到散列的密码。

查看架构信息

LDAP模式定义可用于系统的objectClasses和attributes。 可以在运行时期间将模式添加到系统,以使不同的对象类型和属性可用。 但是,某些属性内置到系统本身。

查看内置模式

内置的模式可以在找到cn=schema,cn=config项。 您可以通过键入以下内容来查看LDAP系统内置的模式:

sudo ldapsearch -H ldapi:// -Y EXTERNAL -b "cn=schema,cn=config" -s base -LLL -Q | less

这将显示包含在OpenLDAP系统本身中的模式。 与其他模式不同,这不需要添加到要使用的系统。

查看其他模式

内置模式提供了一个很好的跳转点,但它可能不会有你想要在您的条目中使用的一切。 您可以通过常规LDIF方法向系统添加额外的模式。 这些将可作为下方子条目cn=schema表示内置模式条目。

通常,这些将与括号内数字,后跟类的架构名称被命名为cn={0}core,cn=schema,cn=config 括号中的数字表示用于确定模式读入系统的顺序的索引。 这通常由系统在添加时自动完成。

要仅查看加载到系统上的附加模式的名称,可以键入:

sudo ldapsearch -H ldapi:// -Y EXTERNAL -b "cn=schema,cn=config" -s one -Q -LLL dn

输出将显示子条目的名称。 它可能看起来像这样,取决于什么被加载到系统:

附加模式
dn: cn={0}core,cn=schema,cn=config

dn: cn={1}cosine,cn=schema,cn=config

dn: cn={2}nis,cn=schema,cn=config

dn: cn={3}inetorgperson,cn=schema,cn=config

模式本身和分配的索引号可能不同。 你可以做一个基本搜索,并列出了具体的模式你有兴趣看到一个特定的模式的内容举例来说,如果我们希望看到的。 cn={3}inetorgperson模式上面列出,我们可以输入:

sudo ldapsearch -H ldapi:// -Y EXTERNAL -b "cn={3}inetorgperson,cn=schema,cn=config" -s base -LLL -Q | less

如果要打印所有附加模式,请改为输入:

sudo ldapsearch -H ldapi:// -Y EXTERNAL -b "cn=schema,cn=config" -s one -LLL -Q | less

如果要打印所有模式,包括内置模式,请改用:

sudo ldapsearch -H ldapi:// -Y EXTERNAL -b "cn=schema,cn=config" -LLL -Q | less

模块,后端和数据库设置

在配置DIT中的一些其它感兴趣的领域是模块和各种存储技术设置。

模块

模块用于扩展OpenLDAP系统的功能。 这些条目用于指向和加载模块,以便使用其功能。 实际配置通过其他条目完成。

用于负载模块元素将与开始cn=module{#}其中支架含有以订购模块的装载和各种条目来区分一个号码。

您可以通过键入以下内容查看系统上动态加载的模块:

sudo ldapsearch -H ldapi:// -Y EXTERNAL -b "cn=config" -LLL -Q "objectClass=olcModuleList"

您将看到当前加载到系统中的模块:

加载模块
dn: cn=module{0},cn=config
objectClass: olcModuleList
cn: module{0}
olcModulePath: /usr/lib/ldap
olcModuleLoad: {0}back_hdb

这个特殊的例子只有一个模块,它允许我们使用的hdb后端模块。

后端

后端条目用于指定实际处理数据存储的存储技术。

要查看哪些后端对您的系统有效,请键入:

sudo ldapsearch -H ldapi:// -Y EXTERNAL -b "cn=config" -LLL -Q "objectClass=olcBackendConfig"

结果将为您提供使用中的存储技术的想法。 它可能看起来像这样:

OpenLDAP活动后端
dn: olcBackend={0}hdb,cn=config
objectClass: olcBackendConfig
olcBackend: {0}hdb

数据库

这些存储系统的实际配置在单独的数据库条目中完成。 对于OpenLDAP系统服务的每个DIT,应该有一个数据库条目。 可用的属性将取决于用于每个数据库的后端。

要查看系统上数据库条目的所有名称,请键入:

sudo ldapsearch -H ldapi:// -Y EXTERNAL -b "cn=config" -LLL -Q "olcDatabase=*" dn

您应该看到数据库条目的DN:

数据库条目
dn: olcDatabase={-1}frontend,cn=config

dn: olcDatabase={0}config,cn=config

dn: olcDatabase={1}hdb,cn=config

让我们来讨论一下这些用于:

  • olcDatabase={-1}frontend,cn=config :此项用来定义特殊的“前端”数据库的功能。 这是一个伪数据库,用于定义应应用于所有其他数据库的全局设置(除非被覆盖)。
  • olcDatabase={0}config,cn=config :此项目是用于定义的设置cn=config ,我们现在使用的数据库。 大多数时候,这将主要是访问控制设置,复制配置等。
  • olcDatabase={1}hdb,cn=config :该条目指定(的类型的数据库定义的设置hdb在这种情况下)。 这些将通常定义访问控制,如何存储,缓存和缓冲数据的详细信息,以及DIT的根条目和管理详细信息。

括号中的数字表示索引值。 它们主要由系统自动创建。 您必须替换为该条目赋予的值才能成功引用它。

您可以通过键入以下内容查看任何这些条目的内容:

sudo ldapsearch -H ldapi:// -Y EXTERNAL -b "entry_to_view" -LLL -Q -s base | less

使用从以前的命令返回的条目中为DNS来填充entry_to_view领域。

打印条目的操作属性(元数据)

到目前为止,我们已经工作主要是与cn=config DIT。 本指南的其余部分也适用于常规DIT。

每个条目都有作为管理元数据的操作属性。 这些可以在任何DIT中访问,以找到关于条目的重要信息。

要打印条目的所有操作属性,您可以在条目后指定特殊的“+”属性。 例如,要打印出在一个条目的操作属性dc=example,dc=com ,我们可以输入:

ldapsearch -H ldap:// -x -s base -b "dc=example,dc=com" -LLL "+"

这将打印所有的操作属性。 它可能看起来像这样:

[list operational attributes]
dn: dc=example,dc=com
structuralObjectClass: organization
entryUUID: cdc658a2-8c3c-1034-8645-e30b83a2e38d
creatorsName: cn=admin,dc=example,dc=com
createTimestamp: 20150511151904Z
entryCSN: 20150511151904.220840Z#000000#000#000000
modifiersName: cn=admin,dc=example,dc=com
modifyTimestamp: 20150511151904Z
entryDN: dc=example,dc=com
subschemaSubentry: cn=Subschema
hasSubordinates: TRUE

这可以用来查看谁在什么时间修改或创建条目,等等。

使用子模式

子模式是可用类和属性的表示。 它示出了类似的信息在架构条目cn=config DIT中,与一些其他信息。 这通过常规的非配置DIT可用,因此不需要root访问。

查找子模式

为了找到一个条目的子模式,可以查询所有条目的操作属性,正如我们上面做了,或者你可以要求定义子模式的条目(特定属性subschemaSubentry ):

ldapsearch -H ldap:// -x -s base -b "dc=example,dc=com" -LLL subschemaSubentry

这将打印出与当前条目相关联的子模式条目:

[list subchema entry]
dn: dc=chilidonuts,dc=tk
subschemaSubentry: cn=Subschema

树中的每个条目都共享相同的子模式,因此通常不必为每个条目查询此条目。

显示子模式

要查看子模式条目的内容,我们需要查询我们在上面找到的范围为“base”的子模式条目。 所有重要信息都存储在操作属性中,因此我们必须再次使用特殊的“+”选择器。

我们需要的命令是:

ldapsearch -H ldap:// -x -s base -b "<^>cn=subschema" -LLL "+" | less

这将打印出整个子模式条目。 我们可以根据我们正在寻找的信息类型进行过滤。

如果要查看LDAP语法定义,可以键入以下内容进行过滤:

ldapsearch -H ldap:// -x -s base -b "cn=subschema" -LLL ldapSyntaxes | less

如果要查看控制如何处理搜索以匹配条目的定义,请键入:

ldapsearch -H ldap:// -x -s base -b "cn=subschema" -LLL matchingRules | less

要查看匹配规则可以匹配的项目,请键入:

ldapsearch -H ldap:// -x -s base -b "cn=subschema" -LLL matchingRuleUse | less

要查看可用属性类型的定义,请使用:

ldapsearch -H ldap:// -x -s base -b "cn=subschema" -LLL attributeTypes | less

要查看objectClass定义,请键入:

ldapsearch -H ldap:// -x -s base -b "cn=subschema" -LLL objectClasses | less

结论

虽然操作OpenLDAP服务器可能看起来很棘手,了解配置DIT和如何在系统中查找元数据可以帮助您开始运行。 修改cn=config DIT与LDIF文件可以立即影响正在运行的系统。 此外,通过DIT配置系统允许您仅使用LDAP工具设置远程管理。 这意味着您可以将LDAP管理与服务器管理分离。

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏