首页 文萃 技术文档 培训机构 教学视频 e书下载 五星图书 考试资源 软件下载 标准下载 最新资讯


OpenLDAP快速指南 转帖

推荐人:wd

 

 
 本文出自:www.linuxaid.com.cn/ LinuxAid工程师ideal(ideal@btamail.net.cn) 原文作者:Jason P. Holland   27-February-2001 
 翻译:    ideal   Linuxaid专业技术支持网站 
 LDAP简介 
 LDAP(轻量级目录访问协议,Lightweight Directory Access Protocol)是实现提供被称为目录服务的信息服务。 
 目录服务是一种特殊的数据库系统,其专门针对读取,浏览和搜索操作进行了特定的优化。目录一般用来包含描 
 述性的,基于属性的信息并支持精细复杂的过滤能力。目录一般不支持通用数据库针对大量更新操作操作需要的 
 复杂的事务管理或回卷策略。而目录服务的更新则一般都非常简单。这种目录可以存储包括个人信息、web链结、 
 jpeg图像等各种信息。为了访问存储在目录中的信息,就需要使用运行在TCP/IP之上的访问协议—LDAP。 

 LDAP目录中的信息是是按照树型结构组织,具体信息存储在条目(entry)的数据结构中。条目相当于关系数据库中 
 表的记录;条目是具有区别名DN(Distinguished Name)的属性(Attribute),DN是用来引用条目的,DN相当于 
 关系数据库表中的关键字(Primary Key)。属性由类型(Type)和一个或多个值(Values)组成,相当于关系数 
 据库中的字段(Field)由字段名和数据类型组成,只是为了方便检索的需要,LDAP中的Type可以有多个Value, 
 而不是关系数据库中为降低数据的冗余性要求实现的各个域必须是不相关的。LDAP中条目的组织一般按照地理位置 
 和组织关系进行组织,非常的直观。LDAP把数据存放在文件中,为提高效率可以使用基于索引的文件数据库,而不 
 是关系数据库。类型的一个例子就是mail,其值将是一个电子邮件地址。 

 

 LDAP的信息是以树型结构存储的,在树根一般定义国家(c=CN)或域名(dc=com),在其下则往往定义一个或多个组织 
 (organization)(o=Acme)或组织单元(organizational units) (ou=People)。一个组织单元可能包含诸如所有雇员、 
 大楼内的所有打印机等信息。此外,LDAP支持对条目能够和必须支持哪些属性进行控制,这是有一个特殊的称为对 
 象类别(objectClass)的属性来实现的。该属性的值决定了该条目必须遵循的一些规则,其规定了该条目能够及至少 
 应该包含哪些属性。例如:inetorgPerson对象类需要支持sn(surname)和cn(common name)属性,但也可以包含可选 
 的如邮件,电话号码等属性。 

 目录设计 
 设计目录结构是LDAP最重要的方面之一。下面我们将通过一个简单的例子来说明如何设计合理的目录结构。该例子将 
 通过Netscape地址薄来访文。假设有一个位于美国US(c=US)而且跨越多个州的名为Acme(o=Acme)的公司。Acme希望为 
 所有的雇员实现一个小型的地址薄服务器。  
 我们从一个简单的组织DN开始:  

 dn: o=Acme, c=US 
 Acme所有的组织分类和属性将存储在该DN之下,这个DN在该存储在该服务器的目录是唯一的。Acme希望将其雇员的信 
 息分为两类:管理者(ou=Managers)和普通雇员(ou=Employees),这种分类产生的相对区别名(RDN,relative distinguished 
  names。表示相对于顶点DN)就shi :  

 dn: ou=Managers, o=Acme, c=US 
 dn: ou=Employees, o=Acme, c=US 
 在下面我们将会看到分层结构的组成:顶点是US的Acme,下面是管理者组织单元和雇员组织单元。因此包括Managers 
 和Employees的DN组成为:  

 dn: cn=Jason H. Smith, ou=Managers, o=Acme, c=US 
 dn: cn=Ray D. Jones, ou=Employees, o=Acme, c=US 
 dn: cn=Eric S. Woods, ou=Employees, o=Acme, c=US 
 为了引用Jason H. Smith的通用名(common name )条目,LDAP将采用cn=Jason H. Smith的RDN。然后将前面的父条目 
 结合在一起就形成如下的树型结构:  

    cn=Jason H. Smith 
 + ou=Managers 
 + o=Acme 
 + c=US 
 -> cn=Jason H. Smith, ou=Managers, o=Acme, c=US 

 现在已经定义好了目录结构,下一步就需要导入目录信息数据。目录信息数据将被存放在LDIF文件中,其是导入目录 
 信息数据的默认存放文件。用户可以方便的编写Perl脚本来从例如/etc/passwd、NIS等系统文件中自动创建LDIF文件。 

 下面的实例保存目录信息数据为testdate.ldif文件,该文件的格式说明将可以在man ldif中得到。 

 在添加任何组织单元以前,必须首先定义Acme DN:   

 dn: o=Acme, c=US 
 objectClass: organization 
 这里o属性是必须的  

 o: Acme 
 下面是管理组单元的DN,在添加任何管理者信息以前,必须先定义该条目。  

 dn: ou=Managers, o=Acme, c=US 
 objectClass: organizationalUnit 
 这里ou属性是必须的。  

 ou: Managers 
 第一个管理者DN:  

 dn: cn=Jason H. Smith, ou=Managers, o=Acme, c=US 
 objectClass: inetOrgPerson 
 cn和sn都是必须的属性:  

 cn: Jason H. Smith 
 sn: Smith 
 但是还可以定义一些可选的属性: 

 telephoneNumber: 111-222-9999 
 mail: headhauncho@acme.com 
 localityName: Houston 

 可以定义另外一个组织单元:  

 dn: ou=Employees, o=Acme, c=US 
 objectClass: organizationalUnit 
 ou: Employees 
 并添加雇员信息如下:  

 dn: cn=Ray D. Jones, ou=Employees, o=Acme, c=US 
 objectClass: inetOrgPerson 
 cn: Ray D. Jones 
 sn: Jones 
 telephoneNumber: 444-555-6767 
 mail: jonesrd@acme.com 
 localityName: Houston 

 dn: cn=Eric S. Woods, ou=Employees, o=Acme, c=US 
 objectClass: inetOrgPerson 
 cn: Eric S. Woods 
 sn: Woods 
 telephoneNumber: 444-555-6768 
 mail: woodses@acme.com 
 localityName: Houston 
 安装配置 
 下一步需要设置OpenLDAP来接受刚才定义的目录结构的导入及提供访问Netscape中的地址薄。在OpenLDAP邮件列 
 表中一个常见的问题是“我如何使Netscape地址薄来使用我的LDAP服务器?”保存地址薄信息是LDAP常见的一个 
 应用方面,这是因为它具有快速的查询和读取功能。而且OpenLDAP支持例如SSL/TLS等会话加密和目录服务器复制 
 等功能,这样就可以实现一个非常好的开发源码解决方案。 

 下面的讨论都是基于openldap-2.0.7,其支持LDAP v2和LDAP v3。LDAP v3相对于LDAP v2最重要的是添加了对传输 
 层安全(TLS,Transport Layer Security)的支持及增加了认证方法。OpenLDAP有两种安装方式:源代码方式和打包 
 的deb/rpm模式。可以从http://www.openldap.org/下载源代码方式或者从http://rpmfind.net/及光盘上得到RPM包 
 方式。源代码方式安装过程如下: 

 [root@radiusd src]# ar -xzvf openldap-2.0.7.tgz  

 [root@radiusd src]# cd openldap-2.0.7 

 [root@radiusd openldap-2.0.7]# ./configure --prefix=/usr/local  

 这里指示openldap被安装在/usr/local目录下,当这并不是必须的。  

 [root@radiusd openldap-2.0.7]# make depend;make  

 在安装结束以前进行测试:  

 [root@radiusd openldap-2.0.7]# make test  

 [root@radiusd openldap-2.0.7]# make install  

 若出现任何编译错误,应该到OpenLDAP邮件列表去寻求帮助。你也许需要在PATH环境变量中添加如下路径: 
 /usr/local/libexec, /usr/local/bin及/usr/local/sbin。  

 PRM包方式的安装实例如下: 

 rpm -ivh openldap-2.0.7-14-i386.rpm 

 rpm -ivh openldap-devel-2.0.7-14-i386.rpm 

 下来需要编辑slapd.conf文件,其是slapd守护进程的配置文件。slapd进程负责响应客户应用访问目录服务请求。配置 
 文件存放/usr/local/etc/openldap。 

 为了能使用Netscape地址薄属性,需要添加一些额外的"模式"配置信息。在slapd.conf文件的开头处添加如下include 
 内容,但是根据安装路径的不同,模式目录路径可能也不大一样。 

 include /usr/local/etc/openldap/schema/cosine.schema  
 include /usr/local/etc/openldap/schema/inetorgperson.schema  
 在slapd.conf的定义的suffix和rootdn行修改为能反应你需要的DN:  

 suffix "o=Acme, c=US" 
 rootdn "cn=root, o=Acme, c=US" 
 这里cn=root条目是我们的管理DN,其不受任何访问控制或限制。其默认是cn=Manager,但是我希望root访问。在 
 slapd.conf文件的末端添加如下内容,实现给Netsacpe进行目录过滤和搜索操作的读权限。所有没有授权的访问目 
 录服务的请求都被作为匿名用户对待。下面的DN条目被格式化处理,也就是所有的空格被去掉,并且其值被逗号隔开。 
 在访问控制,必须格式化条目否则将不能工作。  

 access to dn=".*,o=Acme,c=US" 
 by anonymous read 
 对目录的访问许可以进行精细的调节以适应各种需求。OpenLDAP 2.0管理指南有非常好的配置访问许可的文档说明。 
 这里为了测试目的,这样的访问控制级别是足够了。  

 下面我们就将启动slapd服务器。若系统的ldap是通过RPM/DEB格式进行安装的,根据使用的Linux发布版本不同,启动 
 脚本可能是/etc/rc.d/init.d/ldap或/etc/init.d/ldap。当然也可以手工启动来进行测试。 

 slapd &  

 下面测试看slapd是否在运行  

 ps -ef | grep -i slapd | grep -v grep 
 root     15479        1  0 10:42 ?        00:00:00 slapd 
 root     15483 15479  0 10:42 ?        00:00:00 slapd 
 root     15484 15483  0 10:42 ?        00:00:00 slapd 
 root     15491 15483  0 10:43 ?        00:00:00 slapd 
 root     15492 15483  0 10:43 ?        00:00:00 slapd 

 下面测试ldap的默认端口389是否被监听:  

 netstat -an | grep 389 
 tcp 0 0 0.0.0.0:389 0.0.0.0:* LISTEN 

 到这里为止,一切看上去都很正常,下面将导入ldap信息数据到数据库中:  

 ldapadd -D "cn=root, o=Acme, c=US" -W -v -f testdata.ldif  

 我们使用-D参数和无限制的cn来捆绑目录,这样允许写信息到目录中。-W参数导致服务器需要密码才能访问。缺省的 
 密码是在slapd.conf文件中的rootpw来设定的,默认是secre。使用该默认密码是非常危险的,因此在测试完毕以后, 
 应该改变该密码。记得使用-v参数来进行详细输出以判断是否及如何修正出现的错误。 

 测试  
 当数据导入结束,下一步就需要配置客户端来进行测试。Netscape地址薄支持很多目录属性,在下面的资源部分将包 
 含Netscape地址薄API标准链结地址。下面的简单的测试实例,将使用如下属性:cn,sn,mail.telephoneNumber和 
 localityName。地址薄中的Nickname条目是通过属性xmozillanickname来支持的,其在任何“模式”中都不是默认地 
 被支持而需要对“模式”进行修改。本文将不设计如何修改“模式”方面。  
 打开Netscape的地址薄,选择File->New Directory,输入LDAP服务器的信息: 

 Description: Acme Address Book 
 LDAP Server: the IP/hostname address of your LDAP server 
 Server Root: o=Acme, c=US  

 端口号和其他信息不需要修改。而且由于链结将以匿名用户身份进行,因此不需要设置用户名和密码。 

 选择OK按钮,然后在左边的目录栏选中"Acme Address Book",最后在"Show names containing"框中输入一个查询, 
 例如Smith然后回车。你将可以看到返回了一行数据。 

 若希望对每个组织单元得到独立的列表输出,你可以在Netsacpe中创建另外一个新的目录条目: 

 Description: Acme Managers 
 LDAP Server: the IP/hostname address of your LDAP server 
 Server Root: ou=Managers, o=Acme, c=US  

 这将导致仅仅在Acem目录中搜索Nanagers组织单元,也就是实现了一定的过滤。当然可以对Employees进行同样的限制。  

 错误处理 
 可能会在测试中遇到如下问题:  
 若目录服务不能返回数据,则编辑slapd.conf file并添加"Loglevel 1"。将导致slapd服务进程记录所有的信息到 
 syslog LOCAL4。同样需要编辑 /etc/syslog.conf文件来将这些信息定向到一个单独的文件来便于调试。检查该 
 log文件以确保slapd服务器启动正常没有任何错误信息。这同样会详细记录每个请求服务的信息。  
 确保PATH环境包括所有的ldap命令的路径。  
 若导入数据失败,仔细察看文件LDIF文件格式。更高一级的条目必须首先出现,从你的目录数顶端开始,直到叶子节点。  
 需要有root身份来启动slapd,除非改变slapd到超过1024以上的端口。  
 检查slapd.conf文件格式,若你的访问控制列表没有被格式化,则可能导致链结服务器失败。  
 使用Netscape地址薄来访问LDAP是掌握使用LDAP概念一个非常好的方法。下面是一些和LDAP相关的一些链结资源, 
 包括一些使用LDAP认证一些常见服务的方法如:系统登录及Samba等。  

 资源 
 http://www.openldap.org/ - OpenLDAP Web Site 
 http://www.openldap.org/doc/admin/ - OpenLDAP 2.0 Administrators Guide 
 http://www.hklc.com/ldapschema/ - LDAP Schema Browser 
 http://www.padl.com/pam_ldap.html - Pam-LDAP Authentication Module (they also have some Perl migration scripts) 
 http://perl-ldap.sourceforge.net/ - Perl LDAP modules 
 http://www.unav.es/cti/ldap-smb-howto.html - Samba-PDC LDAP Howto 
 http://developer.netscape.com/docs/manuals/communicator/addrapi.htm - Netscape Address Book API Specification 
  
  
 

 

[收藏本文]   [发表评论]  [查看评论我要推荐文章

上一篇:LDAP应用程序接口 下一篇:LDAP介绍,什么是LDAP?

最新参与TOP10
数据库 ' tempdb' 的日志已满
用u盘在pe下安装xp原版镜像的方法
10个重要的算法C语言实现源代码:拉格朗日,牛顿插值,高斯,龙贝格,牛顿迭代,牛顿-科特斯,雅克比,秦九昭,幂法,高斯塞德尔
linux下查看磁盘空间实现代码命令
oracle数据导入导出imp/exp sp2-0734:未知的命令开头' imp 忽略了剩余行默认分类 解决办法
让php开发者事半功倍的十大技巧
sqlserver中得到当前日期(convert函数,getdate函数)
修改metabase.xml文件提升iis性能
sql2000如何完美压缩.mdf文件
浅谈几个sql的日志概念
西安家教网 咸阳家教网 武汉家教网 济南家教网 太原家教网 郑州家教网 南宁家教网 贵阳家教网 成都家教网 重庆家教网 合肥家教网 昆明家教网 杭州家教网 南京家教网 苏州家教网 福州家教网 长沙家教网 南昌家教网 广州家教网

西安信息资源网 版权所有 全球排名

QQ:363694816