LDAP 目录树的结构LDAP 目录树的结构

要深入了解 LDAP 服务器工作方式和数据存储方式的背景知识,关键在于了解数据在服务器上的组织方式,以及该结构如何可以使 LDAP 能够提供对所需数据的快速访问。要成功进行 LDAP 设置,还需要熟悉一些基本 LDAP 术语。本节介绍 LDAP 目录树的基本布局,并提供了在 LDAP 环境中使用的基本术语。如果您已经了解一些 LDAP 背景知识,只是想了解如何在 SUSE Linux Enterprise 中设置 LDAP 环境,可跳过这个介绍部分。

LDAP 目录具有树形结构。 目录中的所有项(称为对象)在此层次结构中都有确定的位置。 此层次结构称为目录信息树 (DIT)。 指向所需项的完整路径(可以明确标识该项)被称为判别名或 DN。 沿路径指向此项的单个节点称为相对判别名或 RDN。 通常可以向以下两种可能类型之一指派对象:

树枝

这些对象本身可以包含其他对象。 这些对象类包括 root(目录树的根元素,实际并不存在)、c(国家/地区)、ou(组织单元)和 dc(域组件)。 此模型类似文件系统中的目录(文件夹)。

这些对象位于分支的末梢,没有任何从属对象。 personInetOrgPersongroupofNames 都属于此类对象。

目录层次的顶端有一个根元素 root。 其中可包含 c(国家/地区)、dc(域组件)或 o(组织)作为从属元素。 LDAP 目录树中的关系在下例中尤为明显,如 图 35.1 “LDAP 目录的结构” 所示。

图 35.1. LDAP 目录的结构

LDAP 目录的结构

完整的图是一个虚构的目录信息树。 其中描述了三个层次上的项。 每一项都对应图中的一个框。 在本例中,虚构的雇员 Geeko Linux 的完整有效判别名cn=Geeko Linux,ou=doc,dc=example,dc=com。 该名称是通过将 RDN cn=Geeko linux 添加到前一项的 DN ou=doc,dc=example,dc=com 而构成的。

应该储存 DIT 的对象类型是按照模式全局确定的。 对象类型由对象类决定。 对象类决定必须或可以给相关对象指派哪些特性。 因此,方案中必须包含所需应用方案中使用的所有对象类和特性的定义。 已存在一些常用方案(请参见 RFC 2252 和 2256)。 不过,可以创建自定义方案或使用多个互补的方案(如果 LDAP 服务器的运行环境要求这样做)。

表 35.1 “常用对象类和特性”提供了示例所用的 core.schemainetorgperson.schema 中的对象类的简要概览(包括必需特性和有效特性值)。

表 35.1. 常用对象类和特性

对象类

含义

示例项

必需特性

dcObject

domainComponent(域的名称组件)

示例

dc

organizationalUnit

organizationalUnit(组织单元)

doc

ou

inetOrgPerson

inetOrgPerson(内部网或因特网中与个人有关的数据)

Geeko Linux

sn 和 cn


例 35.1 “引自 schema.core ”引自一个方案指令,并附有解释(为便于解释对行进行了编号)。

例 35.1. 引自 schema.core

#1 attributetype (2.5.4.11 NAME ( 'ou' 'organizationalUnitName')
#2        DESC 'RFC2256: organizational unit this object belongs to'
#3        SUP name )

...
#4 objectclass ( 2.5.6.5 NAME 'organizationalUnit'
#5        DESC 'RFC2256: an organizational unit'
#6        SUP top STRUCTURAL
#7        MUST ou
#8 MAY (userPassword $ searchGuide $ seeAlso $ businessCategory 
    $ x121Address $ registeredAddress $ destinationIndicator 
    $ preferredDeliveryMethod $ telexNumber 
    $ teletexTerminalIdentifier $ telephoneNumber 
    $ internationaliSDNNumber $ facsimileTelephoneNumber 
    $ street $ postOfficeBox $ postalCode $ postalAddress 
    $ physicalDeliveryOfficeName
    $ st $ l $ description) )
...

特性类型 organizationalUnitName 和相应的对象类 organizationalUnit 在此仅作为示例。 第 1 行说明特性的名称、其唯一 OID(对象标识符)(数字),及特性缩写方式。

第 2 行通过 DESC 对该特性进行了简要说明。 在此还提到了定义所基于的相应 RFC。 第 3 行中的 SUP 表明此特性所属的上级特性类型。

从第 4 行开始是对象类 organizationalUnit 的定义;与特性定义类似,该定义也包含对象类的 OID 和名称。 第 5 行对该对象类进行了简要说明。 第 6 行通过项 SUP top 表明此对象类不从属于其他对象类。 第 7 行以 MUST 开头,列出必须与类型为 organizationalUnit 的对象一同使用的所有特性类型。 第 8 行以 MAY 开头,列出可以与此对象类一同使用的所有特性类型。

有关方案用法的详尽介绍,请参见文档 OpenLDAP。 安装 OpenLDAP 之后,可以在 /usr/share/doc/packages/openldap2/admin-guide/index.html 中找到该文档。