LDAP 系列第六部分 - 目录服务建模

作者:Tom Adelstein

LDAP 服务存在于 TCP/IP 环境中。它是一种互联网服务,使用守护进程,需要管理员、配置文件和结构。在某些方面,LDAP 类似于 Linux 文件系统,具有根目录、分支而不是目录等。与操作系统的目录配置不同,LDAP 在结构上非常灵活。这种灵活性转化为您可以轻松创建的设计组成。我们将这种分层模型称为目录信息树 (DIT)。设计 DIT 的人需要了解一些关于如何建模数据的知识。

在此之后,您可能会觉得这个主题有些深奥,但请耐心跟随我。我曾将 LDAP 的典型信息模型比作企业的组织结构图。例如,DIT 的分支通常对应于部门,在 LDAP 术语中称为组织单元 (ou)。树的头部或根目录对应于组织的互联网域名。我们称之为域组件 (dc)。

如果您有幸构建了自己的目录服务器,那么您就知道我们从这样一个根目录开始

dc=examle,dc=org. 

If you wanted to set up a department called accounting, your name space would look like this: 
ou=accounting,ou=people,dc=example,dc=org. 

这似乎是一种笨拙、奇怪且令人困惑的方式来命名目录中的条目。所以,现在您知道了。LDAP 作为开源领域的一个主题,需要熟悉甚至掌握大量的知识。Novell 和 Microsoft 使用 eDirectory 和 Active Directory 简化了 LDAP 的设计和管理。

与 Linux 管理的各个领域中的许多主题一样,您会遇到特定于应用程序的术语和术语。与其试图解释 LDAP 术语的每个概念和细微差别,不如使用一个图表,当您开始在实践中看到 DIT 时,您可以参考该图表。

LDAP 的创始人 Tim Howes、Steve Kille 和 Wengyik Yeong 设置了一个分层排列的数据模型。在他们的 DIT 顶部,他们描绘了由服务器名称标识的目录根目录。您可以看到在 LDAP 解释中使用的早期模型

                              |
                         dc=servername, 
                         dc=yourdc, 
                         dc=com
                              |
                              |
                            /   \
                           /     \
                          /       \
                         /         \
                ou=Department   ou=Corporate
                       /             \
                      /               \
               cn=Jeff Skilling        cn=Ken Lay

在这个简化的示例中,DIT 的根目录包含域组件。在根目录下方,您可以看到组织单元,然后是填充每个 ou 的人员。在本例中,Jeff 和 Ken(没有关系)是用户。他们使用 cn 表示法作为其命名空间。CN 代表通用名称。

如果您想为一个组织中的人员构建一个简单的白页目录,该组织有多个部门,例如高管、人力资源、会计、IT、销售、运输等,该怎么办?您通常会为每个部门创建一个组织单元,然后将用户放在每个部门中。您还可以基于地理组件(如纽约、西雅图、香港、巴黎等)创建 DIT。地理 DIT 还可以在其他组织单元下设置组织单元。

我们可能想将每个地理单元称为一个站点,并在每个站点内建立部门。因此,您可以有一个名为纽约的站点和一个名为会计的部门,其下有一个名为工资单或应付账款的组织单元。

现在,您需要填充目录。例如,使用 OpenLDAP,您需要创建一个名为轻型目录交换格式 (LDIF) 文件的文本文件,以在目录中创建条目。您还将使用命令将条目添加到目录中。让我们看看其中的一些内容。

首先,这是您用于创建 ou 的文件格式

dn: ou=people,dc=example,dc=org
ou: people
description: All employees
objectClass: organizationalUnit

dn: ou=auth,dc=example,dc=org
ou: auth
description: services
objectClass: organizationalUnit

在第一行,您有所谓的专有名称 (dn)。在本例中,人员组织单元的命名空间是

dn: ou=people,dc=example,dc=org

您可以使用此表示法创建任何 ou。

要将此数据模型放入目录中,您将使用如下命令行表达式

># ldapadd -x -D "cn=people,dc=ldap,dc=example,dc=org" -W -f ou.ldif
Enter LDAP Password:
adding new entry "uid=People,ou=people,dc=example,dc=org"
>#

现在,有人可能会试图说服您,使用 ldif 文件和复杂的命令行语句很酷。但是,我不买账。例如,如果您想添加用户,您的 LDIF 文件可能如下所示

dn: ou=it,ou=people,dc=example,dc=org
ou: it
description: Information Technology
mail: it@example.org
maildrop: adelstein@example.org
objectClass: CourierMailAlias
objectClass: organizationalUnit

dn: ou=staff,ou=people,dc=example,dc=org
ou: staff
description: Knowledge Workers
mail: staff@example.org
maildrop: staff@example.org
objectClass: CourierMailAlias
objectClass: organizationalUnit

dn: ou=marketing,ou=people,dc=example,dc=org
ou: marketing
description: Sales
mail: marketing@example.org
maildrop: marketing@example.org
objectClass: CourierMailAlias
objectClass: organizationalUnit

如果您只需要对目录进行一次建模,您可能会考虑使用复杂的数据对象作为必要的恶。但事实并非如此。无论何时您需要添加、更改或删除用户或将他们从一个部门移动到另一个部门,您都必须使用这种有些过时的方法。

我可以理解在八到十年前使用上述方法的必要性,但今天不是这样了。现在有工具可以帮助您,在商业环境中,您可能会发现目录建模的简单性令人惊讶。

在下一期中,我们将继续使用命令行模型并构建一个 SMB 目录。如果您想创建 samba 基础设施,您会发现这非常有用。

在那之前,您可以再次浏览网络上关于 LDAP 的文档。

加载 Disqus 评论