OpenLDAP

原文做者: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: [email]headhauncho@acme.com[/email] 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: [email]jonesrd@acme.com[/email] 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: [email]woodses@acme.com[/email] 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模式。能够从[url]http://www.openldap.org/[/url]下载源代码方式或者从[url]http://rpmfind.net/[/url]及光盘上获得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等。 资源 [url]http://www.openldap.org/[/url] - OpenLDAP Web Site [url]http://www.openldap.org/doc/admin/[/url] - OpenLDAP 2.0 Administrators Guide [url]http://www.hklc.com/ldapschema/[/url] - LDAP Schema Browser [url]http://www.padl.com/pam_ldap.html[/url] - Pam-LDAP Authentication Module (they also have some Perl migration scripts) [url]http://perl-ldap.sourceforge.net/[/url] - Perl LDAP modules [url]http://www.unav.es/cti/ldap-smb-howto.html[/url] - Samba-PDC LDAP Howto [url]http://developer.netscape.com/docs/manuals/communicator/addrapi.htm[/url] - Netscape Address Book API
相关文章
相关标签/搜索