您可以通过这里到达那里,第 3 部分
欢迎各位回到“系统管理员专栏”。本系列文章是关于访问您系统上所有重要的数据,即使您身在远方。我们在家理所当然地拥有的数据之一就是我们的电子邮件,因此有了本系列的第一部分。与此密切相关的主题是我们与之交流的人员不断增长的列表。当然,您可以携带自己的联系人列表,但是公司地址簿及其丰富的信息呢?我们如何访问它?
很高兴您问到这个问题,因为它很好地引出了我们今天关于 LDAP 的讨论。LDAP 是 Lightweight Directory Access Protocol(轻型目录访问协议)的缩写。我喜欢将其视为您网络的目录辅助服务,一种网络化的 411 服务。通过在您的服务器上运行 LDAP 服务器,目录辅助服务将永远近在咫尺。听起来不错?系好安全带,因为这是一个很大的话题。稍后我将深入探讨与 LDAP 相关的一些更细致和更棘手的内容,但我知道您希望从中获得一些有用的东西,所以这是今天的计划。
正如您在任何数据库中可能期望的那样,目录是条目的集合。每个条目都由属性组成——更重要的是全局唯一的专有名称,我确实指的是全局唯一。每个属性也都有类型和关联的值。例如,电子邮件地址被定义为“mail”,而人的全名被称为 cn,代表“常用名称”。所有这些数据都组织在分层结构中。数据库代表一个组织。在该组织内部是组织单元。在组织单元内部是人员。一个人由不同类型和值的属性描述。相信我。当您在实际操作中看到它时,这一切都会变得有意义。
虽然这可能看起来非常明显,但我首先要说的是,为了使用 LDAP 做一些事情,我们需要获取 LDAP 软件。最新版本可以直接从 http://www.openldap.org 下载。
在所有可能性中,您已经在任何最新的发行版 CD 上都拥有 OpenLDAP 的副本。从源代码构建 LDAP 的最大优势是,当您完成构建后,所有组件都将在那里。例如,在我的 Red Hat 测试系统上,我发现整个 OpenLDAP 套件被分解为多个组件,例如客户端、服务器、PHP 扩展等等。特别是,默认安装可能拥有访问 LDAP 服务器所需的一切,但没有服务器本身。该软件包是 openldap-servers。如果您决定使用源代码,您可以按照以下基本步骤构建它。
tar -xzvf openldap-stable-20010524.tgz cd openldap-2.0.11 ./configure make depend make make install
默认情况下,源代码发行版安装在 /usr/local 中。如果您要运行服务器,那么配置方面并不可怕(对于服务器来说是这样),因为您需要担心的所有内容都在一个文件 slapd.conf 中。现在,该安装路径很重要,因为它会影响文件的位置。在我的 Red Hat 系统上,RPM 软件包将其放在 /etc/openldap 中。在另一个系统上(我从头开始构建 OpenLDAP),该文件位于 /usr/local/etc/openldap 中。让我们看看该文件。为了简化事情,我将接受文件开头的所有默认设置,并专注于数据库定义。
database ldbm suffix "o=salmar" suffix "dc=ultraman, dc=salmar, dc=com" rootdn "cn=SalmarAdmin, o=salmar" # Cleartext passwords, especially for the rootdn, should # be avoided. See slappasswd(8) and slapd.conf(5) for details. # Use of strong authentication encouraged. rootpw itsasecret # rootpw {crypt}ijFYNcSNctBYg # The database directory MUST exist prior to running slapd AND # should only be accessible by the slapd/tools. Mode 700 recommended. directory /home/ldap # Indices to maintain #index objectClass eq index objectClass,uid,uidNumber,gidNumber eq index cn,mail,surname,givenname eq,subinitial
我已经在这里做了一些编辑,我将回顾其中的一些更改。首先,您应该更改后缀信息以反映您的组织 (o) 和域名。正如您所看到的,域名被分解为其组成部分。将 rootdn 视为管理 LDAP 的根用户——因此,该名称可以是 root 以外的其他名称。按照该分层格式,该人员存在于组织内部。(是的,我确实以一个 日本怪兽格斗超级英雄 的名字命名了我的测试服务器。)
接下来,看看目录参数。该目录可以存在于您想要的任何位置,但它必须在您开始添加信息之前存在。最后,我将跳回到前几行,看看密码注释。上面关于纯文本密码的小警告很重要。在最简单的形式中,我可以只输入我的密码(实际上不是)“itsasecret”。要生成加密密码,请使用这个小的 Perl 脚本。
perl -e 'print("userPassword: {CRYPT}".crypt("secret","salt")."\n");'
“secret”是您的密码,而“salt”是一个双字符密钥,旨在提供伪随机种子,以便 crypt 例程可以生成密码。通过这样做,您可以生成加密密码,而不是使用纯文本版本。
perl -e 'print("userPassword: {CRYPT}".crypt("itsasecret","I5")."\n");' userPassword: {CRYPT}I5ToCN7ZovZmQ
到目前为止,一切顺利。现在是启动我们的 LDAP 服务器的时候了。显然,这将因您决定(或您的发行版决定)安装软件的位置而异。完成所有工作的守护程序称为 slapd,这几乎是我们启动它需要知道的一切。
/usr/sbin/slapd
在所有可能性中,您会发现自己回到了 root 提示符,没有任何其他信息。那么您应该如何知道是否有什么东西起作用了呢?好吧,您可以尝试这个小命令
ldapsearch -x -b '' -s base "(objectclass=*)" namingContexts
-b 标志指定搜索库。我将使用默认值。如果到目前为止一切顺利,您应该得到类似以下内容。
# # filter: (objectclass=*) # requesting: namingContexts # # dn: namingContexts: o=salmar namingContexts: dc=ultraman,dc=salmar,dc=com # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1
具体来说,您正在寻找说“namingContexts”的行,毕竟,这就是我们要求的。它看起来像我们在 slapd.conf 中定义的吗?应该如此。
好的。现在我们需要在我们的数据库中输入一些真实的信息。这是通过创建 LDIF 文件(LDAP 数据交换格式)来完成的。警告,这有点啰嗦,但我会解释。每个节段代表我们数据层次结构中的一个条目。每个后续节段都建立在前一个节段的基础上。查看描述:属性,您将看到每个属性代表什么。
dn: dc=ultraman,dc=salmar,dc=com objectClass: top objectClass: dcObject objectClass: organization dc: salmar o: salmar description: Salmar Domain dn: o=salmar.com objectClass: top ObjectClass: organization o: salmar.com description: Salmar Organization dn: cn=SalmarAdmin,o=salmar objectClass: organizationalRole cn: SalmarAdmin description: Directory Admin Type dn: ou=staff,o=salmar ou: staff objectClass: top objectClass: organizationalUnit description: Salmar Address Book dn: cn=Marcel Gagne,ou=staff,o=salmar cn: Marcel Gagne sn: Gagne objectclass: top objectclass: person objectClass: organizationalPerson objectClass: inetOrgPerson mail: mggagne@salmar.com telephoneNumber: 555-0918 givenname: Marcel surname: Gagne
拥有了这个定义文件并不能给您一个数据库。要获得此信息,您需要使用 ldapadd 命令。假设我已经将此文件保存为 staff.ldif(我已经保存了)。命令如下
ldapadd -f staff.ldif -xv -D "cn=SalmarAdmin,o=salmar" -w secret
-w 让您传递简单的身份验证密码。大写 -W 告诉命令提示您输入密码。如果您愿意,您可以向此 LDIF 文件添加尽可能多的信息。您也可以稍后添加更多信息。描述根、域和管理员的节段不需要每次都添加。已经完成的事情已经完成。由于我的数据库看起来有点孤单,只有一个名字,我决定添加另一个,我的猫 Natika。
dn: cn=Natika the Cat,ou=staff,o=salmar cn: Natika the Cat sn: the Cat objectclass: top objectclass: person objectClass: organizationalPerson objectClass: inetOrgPerson mail: natika@salmar.com telephoneNumber: 555-0930 givenname: Natika surname: the Cat
在我们继续之前,我想让您注意这些属性。这些是我在开头谈到的全局定义的唯一名称列表的一部分。inetOrgPerson 如何定义在 RFC 2798 中进行了描述。在那里查找详细信息。
好的,我们几乎都完成了。当然,最大的问题是,我们从我们的努力中得到了什么?哦,还有“它起作用了吗?”。为了寻找这些问题的答案,让我们从 Netscape 开始。由于 Netscape Communicator 启用了 LDAP,它将在这里完成我们想要的操作。使用您自己的域(当然)通过输入类似以下的 URL 进行查找
http://server_name/cn=some name,ou=org_unit,o=organization
看看当我使用我自己的 LDAP 配置时得到的结果。
太棒了!我们辛辛苦苦输入的信息现在在我们的浏览器中可见了。这很好,但这还不是地址簿。那是下一步。调出浏览器的地址簿(单击 Communicator 并选择地址簿。)现在,在目录列表中单击鼠标右键,然后选择新建目录。将出现一个框,要求您输入目录名称(这可以是任何对您有意义的名称)、LDAP 服务器(服务器的主机名或 IP 地址)和服务器根目录。对于我的示例,这将是“ou=staff,o=salmar”。端口号可以保持不变,点击次数也可以保持不变。当您对信息感到满意时,单击“确定”。
好了,让我们进行搜索。从 Netscape 地址簿左上角的下拉列表中,选择您的新目录(很可能它已经被选中)。您也可以通过单击目录列表中的名称来选择它。最后,在“显示包含名称:”框中输入名称(或部分名称)。按 Enter 键,您应该会看到类似于以下图像的内容。
哇!我本周的电子分配绝对足够了。不过,是时候结束了……正如您可能猜到的,当我们下次在这个专栏相遇时,我们将更多地讨论 LDAP 这个主题。
警告! 接下来是无偿自我推销。在我走之前还有最后一件事。它来了!!我的书已正式出版。Linux 系统管理;用户指南 (ISBN 0-201-71934-7, Addison Wesley) 现已在商店(以及您最喜欢的在线供应商)中上架。嘿,如果您查看上面的链接,您甚至可以下载免费摘录。我太激动了!在我们下次在“系统管理员专栏”相遇之前,请记住,尽管您可能听说过什么,但您可以通过这里到达那里。
正在寻找本系列以前的文章? 单击此处获取列表。
电子邮件:mggagne@salmar.com