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

来源:互联网 发布:手机淘宝4.9.3版本安卓 编辑:程序博客网 时间:2024/04/29 11:17

提供:ZStack云计算

内容介绍

如果对于系统配置不够熟悉或者不知如何获取必要的关键信息,那么OpenLDAP系统的管理任务确实令人头痛。在本教程中,我们将探讨如何查询OpenLDAP服务器中的关键信息,以及如何对运行中的系统进行调整。

先决条件

大家首先应当拥有一套已经安装并配置完成的OpenLDAP系统,具体内容请参阅此文。另外,大家还需要掌握LDAP目录服务的基本术语,推荐参阅此篇教程以了解相关内容。

OpenLDAP在线配置

LDAP系统采用所谓DIrecotry Information Treesor分层结构实现数据存储管理,简称为DIT。自2.3版本开始,OpenLDAP服务器的实际配置就由一套特殊DIT负责,其条目通常被称为cn=config。

这套配置系统亦被称为OpenLDAP在线配置,或者简称OLC。与原有配置方法不同,这套方案会在服务器启动时读取配置文件,面向OLC的修改能够立即起效且无需对服务进行重启。

OLC系统采用标准LDAP方法验证并执行修改。正因为如此,针对LDAP的定期管理工作往往能够无缝化进行,因为其采用与操作DIT数据相同的知识、技能与工具。然而,对于刚刚接触LDAP的朋友,大家往往由于不了解如何使用LDAP工具完成配置而导致难于上手。

在本教程中,我们将探讨如何从零开始完成OpenLDAP各项基础管理任务,从而帮助大家掌握进一步学习的前提性知识。

访问Root DSE

首先来聊聊root DSE,这套结构负责容纳服务器上的全部DIT。我们将其作为基础条目,从而进一步管理服务器能够识别的各DIT。

DSE究竟是什么?

DSE的全称为“DSA特定条目”,其属于LDAP服务器中的管理或控制条目。DSA代表的则为“目录系统代理”,意为负责实现LDAP协议的目录服务器。

要查询root DSE,我们首先需要进行空白(null)搜索并将搜索范围限定为“base”,这意味着系统只会返回条目结果。一般来讲,我们可以借此缩小搜索深度,不过在操作root DSE时,这种限制就成了必需(如果选定其它范围,则无法返回结果)。

具体命令如下:

  • ldapsearch -H ldap:// -x -s base -b “” -LLL “+”

我们假定大家立足于LDAP服务器本身执行上述命令,且没有设置任何访问限制,那么结果应如下所示:

root DSE Outputdn:structuralObjectClass: OpenLDAProotDSEconfigContext: cn=confignamingContexts: dc=example,dc=comsupportedControl: 2.16.840.1.113730.3.4.18. . .supportedLDAPVersion: 3supportedSASLMechanisms: GS2-IAKERBsupportedSASLMechanisms: GS2-KRB5supportedSASLMechanisms: SCRAM-SHA-1supportedSASLMechanisms: GSSAPIsupportedSASLMechanisms: DIGEST-MD5supportedSASLMechanisms: NTLMsupportedSASLMechanisms: CRAM-MD5entryDN:subschemaSubentry: cn=Subschema

这里我们对输出结果进行分析。首先可以看到与LDAP服务器相关的重要元数据。

其中-H ldap://用于指定localhost上的一条未加密LDAP查询。-x不加任何验证信息则代表要求服务器接收未知连接。而-s base -b “”的作用是指定搜索范围并将搜索对象设置为空。我们利用-LLL去掉多余的输出内容。最后,“+”负责指定我们希望查看的部分默认隐藏的运行属性(我们将在这里找到需要的信息)。

找到目标服务器的DIT

出于教程内容的考虑,这里我们只强调LDAP服务器配置所需要的特定DIT。通过以上输出结果,可以看到namingContexts这一运行属性值。

如果我们只需要这部分信息,则可以使用以下命令进行更具针对性的查询:

  • ldapsearch -H ldap:// -x -s base -b “” -LLL “namingContexts”

在这里,我们还查询了另一项需要查看的值。服务器上的每条DIT都可通过namingContexts属性加以查看。这是一条操作性属性,通常为隐藏,但明确调用即可进行查看。

以上命令能够排除其它不必要的信息,因此输出结果如下:

namingContexts searchdn:namingContexts: dc=example,dc=com

可以看到,此LDAP服务器只拥有一项(非管理)DIT,其作为dc=exmaple,dc=com的专有名称(简称DN)条目。如果该服务器还负责管理其它DIT,那么这里可能会返回多个值。

找到配置DIT

可用于配置OpenLDAP服务器的DIT并不会在搜索namingContexts时被返回。该配置DIT的root条目实际被存储在另一专有属性,即configContext当中。

要了解此配置DIT的基础DN,大家需要明确查询该属性:

  • ldapsearch -H ldap:// -x -s base -b “” -LLL “configContext”

返回结果如下:

configContext searchdn: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负责声明权限,这里需要将之前ldapsearch命令中的-x替换为-Y EXTERNAL以指定我们需要使用的是SASL验证方法。另外,我们还需要将协议由ldap://变更至ldapi://以立足于Unix socket发送请求。如此一来,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 entry DNsdn: cn=configdn: cn=module{0},cn=configdn: cn=schema,cn=configdn: cn={0}core,cn=schema,cn=configdn: cn={1}cosine,cn=schema,cn=configdn: cn={2}nis,cn=schema,cn=configdn: cn={3}inetorgperson,cn=schema,cn=configdn: olcBackend={0}hdb,cn=configdn: olcDatabase={-1}frontend,cn=configdn: olcDatabase={0}config,cn=configdn: olcDatabase={1}hdb,cn=config

这些条目代表着LDAP系统中的不同配置区域。让我们首先来看各条目到底对应哪些区域:

顶级条目包含的是某些全局设置,其作用于系统整体(除非被限定在具体上下文当中)。大家可以使用以下命令查看其内容:

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

其中最常见的是各项全局验证设置、日志级别设置、指向进程PID文件位置的指针以及SASL验证信息。

此配置下的各条目则更多针对系统中的特定区域。让我们首先查看可能需要的各项条目。

找到管理条目

在cn=config DIT当中,大家能够找到系统上全部DIT的rootDN,而rootDN基本上就属于管理条目。我们还能够找到用于账户登录的password(通常经过散列处理)。

要找到每项DIT的rootDN,使用以下命令:

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

输出结果如下所示:

rootDN Informationdn: olcDatabase={1}hdb,cn=configolcSuffix: dc=example,dc=comolcRootDN: cn=admin,dc=example,dc=comolcRootPW: {SSHA}AOADkATWBqb0SJVbGhcIAYF+ePzQJmW+

如果大家的系统拥有多项DIT,则可将其汇总起来进行查看。在这里,我们发现dc=example,dc=com的DIT的admin条目为cn=admin,dc=example,dc=com。我们还能够查看到散列密码。

查看Schema信息

LDAP schemas负责定义适用于系统的objectClassess与attributes。Schema能够在运行时中添加到系统中以实现不同的对象类型与属性。不过,也有部分特定属性已经内置于系统当中。

查看内置Schema

我们可以在cn=schema,cn=config条目下查看内置schema,具体命令如下:

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

与其它schema不同,这些内置schema无需额外向系统中添加即可使用。

查看其它Schema

我们还可以通过传统LDIF方法添加其它schema,其将作为cn=schema条目的子条目生效。

其命名方式通常是在schema名称前加上大括号与数字,例如cn={0}core,cn=schema,cn=config。大括号加数字代表该schema被系统读取时的顺序。在添加时,数字一般由系统自动添加。

要查看系统中已载入的其它schema,使用以下命令:

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

输出结果将显示各子条目名称:

additional schemasdn: cn={0}core,cn=schema,cn=configdn: cn={1}cosine,cn=schema,cn=configdn: cn={2}nis,cn=schema,cn=configdn: cn={3}inetorgperson,cn=schema,cn=config

各schema及其序号的分配可能与以上结果有所区别。另外,大家也可以进一步查看感兴趣的schema内容。例如,如果我们希望查看cn={3}inetorgperson,则可使用以下命令:

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

如果大家希望输出全部其它schema,则:

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

如果要输出全部schema,包括内置schema,则:

  • 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”

运行后,可查看到当前系统中已经加载的模块:

loaded modulesdn: cn=module{0},cn=configobjectClass: olcModuleListcn: module{0}olcModulePath: /usr/lib/ldapolcModuleLoad: {0}back_hdb

本示例中只包含一个模块,用于帮助我们使用hdb后端模块。

后端

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

使用以下命令查看系统中的活动后端:

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

运行结果如下:

OpenLDAP active backendsdn: olcBackend={0}hdb,cn=configobjectClass: olcBackendConfigolcBackend: {0}hdb

数据库

这些存储系统的实际配置由各数据库条目分别实现。每项DIT都应拥有一个数据库条目。其属性将取决于各数据库使用的实际后端。

查看系统中的全部数据库条目:

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

输出结果为各数据库的DN:

database entriesdn: olcDatabase={-1}frontend,cn=configdn: olcDatabase={0}config,cn=configdn: olcDatabase={1}hdb,cn=config

下面对其内容进行解释:

  • olcDatabase={-1}frontend,cn=config: 此条目用于定义特定“frontend”数据库的功能。这是一套pseudo-database,用于定义适用于全部其它数据库(除非特别指定)的全局设置。
  • olcDatabase={0}config,cn=config: 此条目用于定义我们目前正在使用的cn=config数据库设置。多数情况下,其主要负责访问控制设置与复制配置等。
  • olcDatabase={1}hdb,cn=config: 此条目定义设置特定类型的数据库(本示例中为hdb)。其一般负责定义访问控制、数据存储细节、缓存与缓冲、DIT的root条目以及管理细节。

大括号中的数字代表索引值。其一般由系统自动创建。大家需要根据条目的实际赋值对其进行替换以实现引用。

查看这些条目的具体内容:

  • sudo 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中一个条目的操作性属性,我们可以:

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

其会输出全部操作性属性,具体如下:

[list operational attributes]dn: dc=example,dc=comstructuralObjectClass: organizationentryUUID: cdc658a2-8c3c-1034-8645-e30b83a2e38dcreatorsName: cn=admin,dc=example,dc=comcreateTimestamp: 20150511151904ZentryCSN: 20150511151904.220840Z#000000#000#000000modifiersName: cn=admin,dc=example,dc=commodifyTimestamp: 20150511151904ZentryDN: dc=example,dc=comsubschemaSubentry: cn=SubschemahasSubordinates: TRUE

通过以上信息,我们可以了解是谁在什么时间创建或修改了某条目。

使用subschema

Subschema代表的是可用类及属性。其显示的信息与schema条目类似,但还包含其它附加信息。其可用于普通非配置DIT,因此无需root权限即可访问。

找到subschema

要找到某一条目的subschema,大家可以查询条目下的全部操作性属性,或者搜索用于定义该条目subschema的特定属性(subschemaSubentry):

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

以上命令会输出与当前条目相关联的subschema条目:

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

同一树状结构下的每个条目往往共享同一subschema,因此大家通常不必针对每个条目进行重复搜索。

显示subschema

要查看subschema条目的内容,我们需要根据之前找到的范围基础进行查询。所有重要信息都被存储在操作性属性当中,因此我们需要再次使用“+”选择符。

命令为:

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

其能够输出subschema条目下的全部内容。我们可以在此基础上通过过滤找到需要的信息。

要查看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的相关知识以及如何找到系统内的元数据后,接下来的工作就相对简单了。利用LDIF文件修改cn=config DIT能够立即影响运行中的系统。另外,通过DIT配置系统也使得我们能够利用各LDAP工具设置远程管理机制。如此一来,大家就可以将LDAP管理与服务器管理拆分开来以独立处理了。

本文来源自DigitalOcean Community。英文原文:How To Configure OpenLDAP and Perform Administrative LDAP Tasks By Justin Ellingwood

翻译:diradw

0 0