简介: 您是否曾经设法与某个使用不同数据格式的人共享您的联系人列表,或者设法将您的地址簿迁移到另一个应用程序?如果是这样的话,您知道这是件令人头痛的事。导入和导出方案(如果它们确实存在)通常很笨拙而且使用起来不能令人满意,即使只使用一次也是如此,更不用说经常使用了。欢迎使用轻量级目录访问协议(Lightweight Directory Access Protocol)。本教程向您演示了如何创建一个基于 LDAP 的后端来存储多个应用程序可以方便共享的联系人信息。同时,我们提供了 LDAP 基础知识的概述,并向您介绍了一个预先构建的联系人管理工具,该工具将帮助您着手使用这一开放技术。
在大多数基于软件包的系统上(例如,在基于 RPM 的分发版(distribution)上,如 Red Hat、Mandrake 和 SuSE)安装和配置OpenLDAP 是一个相对比较简单的过程。第一步先确定将哪些 OpenLDAP 组件(如果有的话)作为初始 Linux 设置的一部分进行安装。
从控制台窗口或命令行,输入:
[root@thor root]# rpm -qa | grep openldap openldap-devel-2.0.23-4 openldap-2.0.23-4 openldap-servers-2.0.23-4 openldap-clients-2.0.23-4 [root@thor root]# |
您应该看到类似上面的输出。注:Red Hat 分发版安装 OpenLDAP 客户机软件,但不安装 openldap-servers
软件包,即使您选择了服务器配置也是如此。要安装 RPM 软件包,在分发版媒质上找到所需文件的位置并输入:
rpm -ivh packagename |
其它分发版在程序的封装和命名方式方面不同;有关详细信息,请参考文档。
回页首
配置 OpenLDAP 服务器
安装了必需的软件之后,下一步是要配置服务器。首先,备份原始配置文件以供今后参考( cp /etc/openldap/slapd.conf /etc/openldap/slapd.conf.orig
)。现在,在您所喜爱的文本编辑器中打开 /etc/openldap/slapd.conf 文件,花几分钟时间通读注释。除了定义目录数据库类型、suffix
、rootdn
和存储目录数据库的位置的几个项外,slapd.conf 中的大多数缺省设置都是适当的。
database ldbm suffix "dc=syroidmanor,dc=com" rootdn "cn=root,dc=syroidmanor.com,dc=com" rootpw {CRYPT}05T/JKDWO0SuI directory /var/lib/ldap index objectClass,uid,uidNumber,gidNumber,memberUid eq index cn,mail,surname,givenname eq,subinitial |
回页首
保护 rootdn
rootdn
项控制谁可以对目录数据库进行写操作,以及他们要这样做所必须提供的密码。请确保阅读“访问控制”一章结束部分的注释:
# if no access controls are present, the default is: # Allow read by all # # rootdn can always write! |
“rootdn
can always write!”(rootdn
总是可以写!)的意思正如它所表示的那样。您在rootdn
项的 cn=
部分填充的任何项都是对数据库有完全读/写访问权的用户。另外,缺省配置文件使用“secret”作为密码,它以明文形式发送。如果只能从装了防火墙与外界隔离的内部网访问您的 LDAP 服务器,并且确信将访问 LDAP 服务器的用户不知道有关信息包嗅探的任何事情,您大概可以以明文形式安全地发送rootdn
密码(只要确保将密码“secret”稍加修改,使之不易被猜出)。但是,如果您打算存储在目录中的数据只有一点点机密性,则对密码进行散列处理。可以用slappasswd
实用程序完成它,如下所示:
[root@thor root]# slappasswd -h {crypt} |
该程序将要求您输入密码,然后 slappasswd
将给出与所提供的项相对应的 crypt 字符串。将该字符串剪切并粘贴到slapd.conf,如上一页所示。其它散列选项包含 SSHA(缺省值)、SMD5、MD5 和 SHA。输入 man slappasswd
,以获取更多信息。
回页首
测试服务器
现在是测试服务器的好时机了。这里的配置相对比较简单也容易对可能出现的问题进行故障诊断。在 Red Hat Linux 系统上,命令是:
[root@thor root]# service ldap start |
接下来,测试您访问目录的能力:
[root@thor root]# ldapsearch -x -b '' -s base '(objectclass=*)' namingContexts |
如果正确配置了服务器,您应该看到类似于下面的输出(当然,有不同的 dc
):
version: 2 # # filter: (objectclass=*) # requesting: namingContexts # # dn: namingContexts: dc=syroidmanor,dc=com # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1 |
如果您得到了错误消息,或输出与上面有很大的不同,则返回并检查配置。要使 LDAP 服务在重新引导时自动启动,输入以下命令:
[root@thor root]# chkconfig ldap on |
再提醒一下,上面的命令特定于 Red Hat 分发版。
回页首
配置 ACL
配置 LDAP 服务器的最后一步是设置一些基本访问控制。这样做可以确保用户只能访问他们需要访问的项。
在 OpenLDAP 下设置 ACL(访问控制表,Access Control List)的方法有两种:可以将 include
行放在/etc/openldap/slapd.conf
的顶部,指向一个单独的文件(例如, include /etc/openldap/slapd.access.conf
);或者可以将 ACL 直接添加到 slapd.conf
。这完全由您选择 ― Mandrake 通常使用 include
行;Red Hat 将 ACL 添加到配置文件。
您将在下一页看到一组示例 ACL 以及它们做些什么的说明。
回页首
ACL 示例
# Define ACLs -- access control definitions access to dn=".*,dc=syroidmanor,dc=com" attr=userPassword by dn="cn=root,dc=syroidmanor,dc=com" write by self write by * auth access to dn=".*,dc=syroidmanor,dc=com" attr=mail by dn="cn=root,dc=syroidmanor,dc=com" write by self write by * read access to dn=".*,ou=people,dc=syroidmanor,dc=com" by * read access to dn=".*,dc=syroidmanor,dc=com" by self write by * read |
上面的配置仅允许 userPassword
属性的所有者修改项,但仅当所有者提供他或她的优先密码时才允许进行修改。在所有其它情况下,只能出于认证目的来访问该项,而不能查看它。第二个access to...
项允许用户修改自己的电子邮件地址(attr=mail
)。第三个项指定除了 rootdn
外,对于所有人,ou=people,dc=syroidmanor,dc=com
中的任何 DN 都是只读的。这可防止用户更改其用户名、uid、gid 和主目录等。最后,最后一项是包容前面访问控制中未涉及的任何东西的安全的“大杂烩”。例如,它允许用户更改其自己地址簿中的项。
在服务器可以使用新的 ACL 之前,需要重新启动: service ldap restart
。
完成基本配置之后,应该将一些有用的项填充到数据库。
更简单的一句话:
access to *
by * read
除了root 用户可以读写外。其他用户都只读