18.5.2 LDAP:轻量级目录访问协议
LDAP是一种协议,它可提供到一般管理性目录服务的访问。它已经存在好几年了,但只是最近才开始流行。
管理员们正发现LDAP擅长许多事情。
sendmail配置:别名、虚拟域、邮件之家、数据库访问、以及表。
用户管理:登录名、口令、主机(例如,斯坦福大学)。
管理性配置文件(例如,SUSE)。
作为NIS的一种替代技术。
作为日历服务器。
与PAM(Pluggable Authentication Modules,可插入式身份验证模块)一起使用。
可以想象,LDAP最终将成为一种可以用于许多不同目的的全局目录系统。遗憾的是,仍然缺乏自动完成LDAP一般性系统管理任务的工具。
LDAP脱胎于ISO协议和X.500目录服务。这种继承关系立即使人想起复杂、臃肿、累赘、糟糕等,但LDAP中的L(轻量级)则要求考虑到所有这一切。该协议的第1版和第2版已经成为标准。第3版也已经接近完成。幸运的是,所有版本都是向后兼容的。LDAP协议第3版支持层次结构的服务器,为数据而查询一台服务器可以被引向另一台服务器。第2版支持层次结构的数据,但只有第3版才支持层次结构的服务器。
邮件别名特别适合于使用LDAP,尤其是现在sendmail的内部就支持LDAP,那么就更适合用它了。sendmail在查询LDAP服务器时可以进行别名查找,而不是直接查找它们。LDAP还可以管理邮件路由和虚拟域。对LDAP的支持必须编译到sendmail的二进制程序中。
如果您在寻找一个LDAP实现,我们推荐由www.openldap.org的OpenLDAP小组所提供的服务器程序。这个小组接管并增强了早期由密执安大学(University of Michigan)开发的一个服务器程序的代码。有关LDAP软件的更多信息请参考17.5节。
LDAP数据库的项类似于变量名更长的一个termcap项。LDAP数据库中的属性(变量名)尚未完全标准化,这种实际情况可能会导致不同LDAP实现之间的不兼容性。
一个数据库项的第一行上的属性由LDAP配置文件定义。本节中的例子假定此LDAP服务器守护进程(在OpenLDAP中是slapd)是用一个根的区别名(rootdn)来配置的:
"cn=root, dc=synack, dc=net" |
dc属性出现了两次,因为域的组成部分不能包含一个点(.),为了表示域synack.net,就需要用两项。更进一步的属性,或者说变量名,可以是您希望的任何东西。它们不区分大小写。
sendmail(它的代码寻找具体的属性名称并赋予它们预先确定的解释)、LDAP服务程序和LDAP数据库的构造程序必须保持协调,使用相同的命名规则。
出现在一个数据库项(数据库关键字)的第一行的一些属性可能有:dn表示域名,dc表示域的成分,o表示某个机构的名称,c表示国家的名称,而uid表示唯一的ID(例如,一个登录名)。
sendmail使用LDAP服务器的方式非常像它使用DNS名字服务器的方式。sendmail要求DNS服务器把名字解析成IP地址,以便发送消息。它访问LDAP服务器是为了查出别名,以便可以把消息送到正确的地方。在上述两种情况下,查询操作都从纯文件(hosts和aliases)换到了数据库,而且由服务器来管理查询。
在默认情况下,sendmail认识下列LDAP数据标记:
mailLocalAddress |
8.12版的sendmail扩大了这项默认的设置(参见cf/sendmail.schema),也能让您定义自己的方案来使用您喜欢的任何LDAP标记。
下面的例子是OpenLDAP实现中的ldap.conf文件:
|
它支持以下形式的数据库项:
|
当已经在sendmail的配置文件中指定过FEATURE(ldap_routing)的时候,传入邮件的收件人要用mailLocalAddress字段来匹配。如果匹配,那么邮件就被重定向到mailRoutingAddress。objectClass一行必须要有—它来源于规定LDAP和邮件系统交互方式的RFC草案。
在主机gw.synack.net上,这个数据库项对应别名:
jon: stabilej@cs.colorado.edu |
有点儿啰嗦,不是吗?这些数据库的项可以代替aliases文件中的标准配置项,用来给每个用户定义其各自的邮件之家。
有些大单位已经把用户的供应信息(例如每个用户选用的邮箱)保存在另一个数据库里了。如果您的站点上就是这种情况,那么您或许想写一些简短的脚本,提取出这些信息,然后再送入LDAP。如果您的单位不大,那么可能想坚持采用传统的/etc/mail/aliases文件,或者写一个脚本从命令行生成正确的LDAP数据项。
aliases文件仍然是定义邮递列表(采用:include:指令)最好的方法。邮递列表软件一般把消息通过管道送给一个封装脚本(wrapper script),重新发送它。LDAP查询返回的别名指向:include:文件,或者诸如majordomo这样的程序,但是它不能直接调用一个程序。
至于8.12版的sendmail,LDAP也能用来保存sendmail的某些其他数据的内容(例如,表[table]和类[class])。参考18.9.10节了解有关配置sendmail使用LDAP的更多知识。
| 回书目 上一节 下一节 |