要深入了解 LDAP 服务器工作方式和数据储存方式的背景知识,关键在于了解数据在服务器上的组织方式,以及该结构如何可以使 LDAP 能够提供对所需数据的快速访问。要成功进行 LDAP 设置,还需要熟悉一些基本 LDAP 术语。本节介绍 LDAP 目录树的基本布局,并提供了在 LDAP 环境中使用的基本术语。如果您已经了解一些 LDAP 背景知识,只是想了解如何在 SUSE Linux Enterprise 中设置 LDAP 环境,可跳过这个介绍部分。分别在第 36.5 节 “使用 YaST 配置 LDAP 服务器”或第 36.3 节 “使用 slapd.conf 配置服务器”上阅读。
LDAP 目录具有树形结构。 目录中的所有项(称为对象)在此层次结构中都有确定的位置。 此层次结构称为目录信息树 (DIT)。 指向所需项的完整路径(可以明确标识该项)被称为判别名或 DN。 沿路径指向此项的单个节点称为相对判别名或 RDN。 通常可以向以下两种可能类型之一指派对象:
这些对象本身可以包含其他对象。 这些对象类包括 root(目录树的根元素,实际并不存在)、c(国家/地区)、ou(组织单元)和 dc(域组件)。 此模型类似文件系统中的目录(文件夹)。
这些对象位于分支的末梢,没有任何从属对象。 person、InetOrgPerson 或 groupofNames 都属于此类对象。
目录层次的顶端有一个根元素 root。 其中可包含 c(国家/地区)、dc(域组件)或 o(组织)作为从属元素。 LDAP 目录树中的关系在下例中尤为明显,如 图 36.1 “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 服务器的运行环境要求这样做)。
表 36.1 “常用对象类和属性”提供了示例所用的 core.schema 和 inetorgperson.schema 中的对象类的简要概览(包括必需属性和有效属性值)。
表 36.1. 常用对象类和属性
对象类 | 含义 | 示例项 | 必需属性 |
|---|---|---|---|
dcObject | domainComponent(域的名称组件) | 示例 | dc |
organizationalUnit | organizationalUnit(组织单元) | doc | ou |
inetOrgPerson | inetOrgPerson(内部网或因特网中与个人有关的数据) | Geeko Linux | sn 和 cn |
例 36.1 “引自 schema.core ”引自一个方案指令,并附有解释(为便于解释对行进行了编号)。
例 36.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 中找到该文档。