LDAP 系列第六部分 - 目录服务建模
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 的文档。