一个openldap的问题,高手指教

由 wisher 在 08-30-2002 15:04 发表:

一个openldap的问题,高手指教

我在redhat linux 7.3上装了openldap后,执行ldap的一系列命令,如ldapadd,ldapsearch,都会出现错误提示:

ldap_sasl_interactive_bind_s:no such attribute。

请问是什么原因阿?


由 北南南北 在 08-30-2002 15:26 发表:


兄弟,下次发帖要看说明一下向哪个版面发,另外还要说明一个这个是做什么用的。因为我们不仅要为了自己解决问题, 我们还要让弟兄们知道这是什么。也让弟兄们开一个眼界。

因为不懂,所以只能找点资料给兄弟。请多多研究。多谢!!

如何设置一个基本的OpenLDAP Server 本文出自:

http://www.linuxforum.net

作者:吴阿亭 Jephe wu

一. 目的

本文旨在介绍如何安装OpenLDAP并且设置一个公司内部的集中化的邮件地址薄服务器供客

户端查询。

基本上,OpenLDAPg还应用在其它许多方面,象集中化的用户帐号验证服务器,但邮件地址

薄查询是最常用的。

二. 安装

www.openldap.org 下载最新的openldap软件包,按照编译和安装的步骤,依次运行:

#tar cvfz openldap-stable-20010524.tgz

#cd openldap-2.0.11

#./configure

#make depend

#make

#make test

#make install

我的操作环境是redhat 6.1,如果没有遇到任何错误,最后默认安装LDAP后台程序slapd

到目录/usr/local/libexec;配置文件在目录/usr/local/etc/openldap/ 并且放各种

OpenLDAP工具

ldapadd,ldapdelete,ldapmodify,ldapmodrdn,ldappasswd,ldapsearch 在目录

/usr/local/bin,运行时数据库在/usr/local/var/openldap-ldbm 。

三. 设置

  1. 更改配置文件/usr/local/etc/openldap/slapd.conf

在include /usr/local/etc/openldap/schema/core.schema这行后面加上下面的行,

包括所有的方案。

include /usr/local/etc/openldap/schema/corba.schema

include /usr/local/etc/openldap/schema/cosine.schema

include /usr/local/etc/openldap/schema/inetorgperson.schema

include /usr/local/etc/openldap/schema/java.schema

include /usr/local/etc/openldap/schema/krb5-kdc.schema

include /usr/local/etc/openldap/schema/misc.schema

include /usr/local/etc/openldap/schema/nadf.schema

include /usr/local/etc/openldap/schema/nis.schema

include /usr/local/etc/openldap/schema/openldap.schema

  1. 在文件slapd.conf的"ldbm database definitions"部分更改相应的

suffix,rootdn行如下

database ldbm

suffix "o=yourdomain,c=us"

rootdn "cn=root,o=yourdomain,c=us"

rootpw secret

directory /usr/local/var/openldap-ldbm

有各种格式你可以用,这里我用的是o=yourdomain,c=us 说明你的公司域名和所在的国

家或地区

rootdn的格式安装后默认为cn=Manager,这里改为root完全是自己的喜好,这样符合

Unix/Linux中root具有最高权限的传统。

  1. 现在可以启动slapd了,运行/usr/local/libexec/slapd 。

可以考虑把/usr/local/bin and /usr/local/libexec加到搜索路径中,即加到

/etc/profile

中的PATH行:

PATH="$PATH:/usr/X11R6/bin:/usr/local/bin:/usr/local/libexec"

这样下次登录后只需键入 slapd 。

  1. 测试ldap server是否正常工作。

运行下面的命令检查是否有相应的输出。

#ldapsearch -x -b 'o=yourdomain,c=us' '(objectclass=*)'

  1. 编辑.ldif文本文件,用ldapadd添加记录进入LDAP数据库。

文件内容如下:

dn: o=yourdomain,c=us

objectclass: dcobject

objectclass: organization

o: yourdomain

dc: yourdomain

dn: cn=Jephe Wu,o=yourdomain,c=us

objectclass: inetorgperson

cn: Jephe Wu

sn: Wu

mail: [email protected]

......more users......

依次类推,添加每个人的记录进入该文件中,注意对象类型 inetorgperson 至少必须要

有cn和sn

,这里我们用cn,sn,mail三项定义,这对我们的邮件地址薄功能来说已经足够。你还可以

定义象

mobile, homephone,pager......等等。

然后用下面的命令添加上面的.ldif文件进入LDAP数据库

#ldapadd -x -D "cn=root,o=yourdomain,c=us" -w secret -f

"yourldiffilename"

注:上面的文件的第一部分"dn: o=yourdomain,c=us"是必须的,否则不能添加数据。

用你的公司的域名替换上面的"yourdomain"。

  1. 设置Outlook Express, 允许用LDAP服务器查询邮件地址。

"工具/帐号/添加--目录服务",填入你的服务器的IP地址或者主机全称域名,在下一个屏

幕中选yes以允许用目录服务来查询地址,最后在"目录服务"栏中选中刚才设置的项目击

“属性/高级",在"搜索库"中填入

"o=yourdomain,c=us" 。

Netscape请根据上面的信息设置相应的选项。

四. 常见使用问题

  1. 能启动slapd 没有问题,但不能添加数据库,运行ldapadd添加时出错 "ldap_bind:

cannot contact LDAP Server" 。

答: 最可能的原因是在/etc/hosts中没有127.0.0.1 localhost项目。

  1. 注意查询顺序: 如果在Outlook Express的地址薄中有内容,则检查地址时地址薄优

先,如果在本地地址薄中找不到相应记录,然后再查询LDAP服务器。

  1. 用下面的命令确信客户端与LDAP服务器有通讯,在服务器运行下面的命令,然后在OE中

测试检查地址,你将会得到查询LDAP数据库的连接过程的输出。

tcpdump port 389


===========================

请弟兄们发帖时要写个好标题,多谢!

===========================

每天以1000KM/H的速度在跑,感觉还是时间不够:(

“西学东渐,洋为中用” + 创造 = ?

linux ppc


由 北南南北 在 08-30-2002 15:28 发表:


如何设置一个基本的OpenLDAP Server

本文出自:

http://www.linuxforum.net

作者:吴阿亭 Jephe wu

一. 目的

本文旨在介绍如何安装OpenLDAP并且设置一个公司内部的集中化的邮件地址薄服务器供客

户端查询。

基本上,OpenLDAPg还应用在其它许多方面,象集中化的用户帐号验证服务器,但邮件地址

薄查询是最常用的。

二. 安装

www.openldap.org 下载最新的openldap软件包,按照编译和安装的步骤,依次运行:

#tar cvfz openldap-stable-20010524.tgz

#cd openldap-2.0.11

#./configure

#make depend

#make

#make test

#make install

我的操作环境是redhat 6.1,如果没有遇到任何错误,最后默认安装LDAP后台程序slapd

到目录/usr/local/libexec;配置文件在目录/usr/local/etc/openldap/ 并且放各种

OpenLDAP工具

ldapadd,ldapdelete,ldapmodify,ldapmodrdn,ldappasswd,ldapsearch 在目录

/usr/local/bin,运行时数据库在/usr/local/var/openldap-ldbm 。

三. 设置

  1. 更改配置文件/usr/local/etc/openldap/slapd.conf

在include /usr/local/etc/openldap/schema/core.schema这行后面加上下面的行,

包括所有的方案。

include /usr/local/etc/openldap/schema/corba.schema

include /usr/local/etc/openldap/schema/cosine.schema

include /usr/local/etc/openldap/schema/inetorgperson.schema

include /usr/local/etc/openldap/schema/java.schema

include /usr/local/etc/openldap/schema/krb5-kdc.schema

include /usr/local/etc/openldap/schema/misc.schema

include /usr/local/etc/openldap/schema/nadf.schema

include /usr/local/etc/openldap/schema/nis.schema

include /usr/local/etc/openldap/schema/openldap.schema

  1. 在文件slapd.conf的"ldbm database definitions"部分更改相应的

suffix,rootdn行如下

database ldbm

suffix "o=yourdomain,c=us"

rootdn "cn=root,o=yourdomain,c=us"

rootpw secret

directory /usr/local/var/openldap-ldbm

有各种格式你可以用,这里我用的是o=yourdomain,c=us 说明你的公司域名和所在的国

家或地区

rootdn的格式安装后默认为cn=Manager,这里改为root完全是自己的喜好,这样符合

Unix/Linux中root具有最高权限的传统。

  1. 现在可以启动slapd了,运行/usr/local/libexec/slapd 。

可以考虑把/usr/local/bin and /usr/local/libexec加到搜索路径中,即加到

/etc/profile

中的PATH行:

PATH="$PATH:/usr/X11R6/bin:/usr/local/bin:/usr/local/libexec"

这样下次登录后只需键入 slapd 。

  1. 测试ldap server是否正常工作。

运行下面的命令检查是否有相应的输出。

#ldapsearch -x -b 'o=yourdomain,c=us' '(objectclass=*)'

  1. 编辑.ldif文本文件,用ldapadd添加记录进入LDAP数据库。

文件内容如下:

dn: o=yourdomain,c=us

objectclass: dcobject

objectclass: organization

o: yourdomain

dc: yourdomain

dn: cn=Jephe Wu,o=yourdomain,c=us

objectclass: inetorgperson

cn: Jephe Wu

sn: Wu

mail: [email protected]

......more users......

依次类推,添加每个人的记录进入该文件中,注意对象类型 inetorgperson 至少必须要

有cn和sn

,这里我们用cn,sn,mail三项定义,这对我们的邮件地址薄功能来说已经足够。你还可以

定义象

mobile, homephone,pager......等等。

然后用下面的命令添加上面的.ldif文件进入LDAP数据库

#ldapadd -x -D "cn=root,o=yourdomain,c=us" -w secret -f

"yourldiffilename"

注:上面的文件的第一部分"dn: o=yourdomain,c=us"是必须的,否则不能添加数据。

用你的公司的域名替换上面的"yourdomain"。

  1. 设置Outlook Express, 允许用LDAP服务器查询邮件地址。

"工具/帐号/添加--目录服务",填入你的服务器的IP地址或者主机全称域名,在下一个屏

幕中选yes以允许用目录服务来查询地址,最后在"目录服务"栏中选中刚才设置的项目击

“属性/高级",在"搜索库"中填入

"o=yourdomain,c=us" 。

Netscape请根据上面的信息设置相应的选项。

四. 常见使用问题

  1. 能启动slapd 没有问题,但不能添加数据库,运行ldapadd添加时出错 "ldap_bind:

cannot contact LDAP Server" 。

答: 最可能的原因是在/etc/hosts中没有127.0.0.1 localhost项目。

  1. 注意查询顺序: 如果在Outlook Express的地址薄中有内容,则检查地址时地址薄优

先,如果在本地地址薄中找不到相应记录,然后再查询LDAP服务器。

  1. 用下面的命令确信客户端与LDAP服务器有通讯,在服务器运行下面的命令,然后在OE中

测试检查地址,你将会得到查询LDAP数据库的连接过程的输出。


===========================

请弟兄们发帖时要写个好标题,多谢!

===========================

每天以1000KM/H的速度在跑,感觉还是时间不够:(

“西学东渐,洋为中用” + 创造 = ?

linux ppc


由 北南南北 在 08-30-2002 15:30 发表:


LDAP应用概述与qmail+LDAP安装配置

本文出自:

http://www.linuxforum.net

作者: 一笑

1 概述

计算机网络经过长期的发展,不同的操作系统和应用程序以不同的格式在网络上存储了大

量的信息,一个网络管理员无法在一个集中的信息库中,以方便的方法管理网络信息和资

源。用户必须使用不同的应用程序获取不同的信息和资源,这大大增加了用户的负担,也

使许多信息难于共享,从而在一定程度上制约了网络的发展,因而需要一种新的技术,能

够以通用的格式和方式实现信息的存储和共享,实现网络的共享。

目录服务技术就是用于实现上述需求的。目录服务可以命名、描述和指定一个企业范围内

的用户和资源,从而简化通信与管理;它可以使用户通过简单的搜索查找资源及其他用

户;它可以帮助管理人员收集和控制散布与该机构的信息,并可以使他们通观地审视这些

信息。 目前基于目录服务的各种网上应用越来越多。特别是随着Intranet的崛起以及轻

型目录服务LDAP(Lightweight Directory Access Protocol)的开发,人们对其价值

的认识日趋明朗。

本文档详细描述了Unix中常用的邮件服务器qmail的安装和配置过程,以及qmail和LDAP

的整合,重点在于qmail的基本应用及其通过LDAP Server来进行Pop3认证的配置过程,

对于其它诸如邮件网关、邮件虚拟域、邮件列表、SMTP认证等不做叙述。本文档假定你对

qmail邮件服务器和OpenLDAP的LDAP Server有基本的了解,在各种软件包安装之前,请

认真阅读软件包附带的相关安装说明文档。

邮件服务器基于LDAP的应用扩展,是目前基于LDAP管理Internet信息的应用之一,此外

基于LDAP的WWW网关也是使用LDAP的一个方向,下图给出了这两种应用的总体结构:

2 安装前的准备

操作系统

RedHat Linux 6.2

所需软件包

1. qmail-1.03.tar.gz ( http://www.qmail.org

2. ucspi-tcp-0_88_tar.gz ( http://cr.yp.to/ucspi-tcp.html

3. checkpassword-0_90_tar.gz ( http://cr.yp.to/checkpwd.html

4. qmail-ldap-1_03-20010301_patch.gz ( http://www.nrg4u.com/

5. openldap-2_0_7.tgz ( http://www.openldap.org

主机IP地址和域名配置,在本例中为:

IP:192.168.0.117

DomainName :gloomy.openet.com.cn

(LDAP Server的RootDN为:dc=gloomy dc=openet dc=com dc=cn)

3 安装与配置

1. 卸载SendMail邮件系统

由于大多数Linux发行版本中都预装了SendMail邮件系统,所以在安装qmail 邮件服务器

前最好卸载SendMail邮件服务器,使用如下命令:

#netsysv (取消系统boot时启动SendMail)

#mv /usr/lib/sendmail /usr/lib/sendmail.bak

#mv /usr/sbin/sendmail /usr/sbin/sendmail.bak

#mv /usr/bin/newaliases /usr/bin/newaliases.bak

#mv /usr/bin/mailq /usr/bin/mailq.bak

2. 安装qmail软件包

a) 首先确定qmail的安装路径,若选默认安装的话,使用如下命令,否则需要修改qmail

软件包中相应的conf*文件:

#mkdir /var/qmail

b) 增加qmail所需要的组和用户,使用如下命令:

#groupadd nofiles

#useradd -g nofiles -d /var/qmail/alias alias

#useradd -g nofiles -d /var/qmail qmaild

#useradd -g nofiles -d /var/qmail qmaill

#useradd -g nofiles -d /var/qmail qmailp

#groupadd qmail

#useradd -g qmail -d /var/qmail qmailq

#useradd -g qmail -d /var/qmail qmailr

#useradd -g qmail -d /var/qmail qmails

c) 编译qmail源代码并安装,使用如下命令:

#tar zxvf qmail-1.03.tar.gz

#cd qmail-1.03

#make setup check

d) 建立相应的配置文件,使用如下命令:

#config-fast gloomy.openet.com.cn

#cd /var/qmail/alias

#touch .qmail-postmaster .qmail-mailer-daemon .qmail-root

#chmod 644 qmail*

e) 选择邮件的存储方式:

在qmail中,支持三种邮件存储方式,分别是典型的/var/spool/mail方式、传统的Unix

user/Mailbox方式和新的 user/Maildir方式,其中前两种方式为大多数的邮件客户端

所支持,但是它们均存在安全上的隐患,所以在这里使用了第三种方式,下面分别叙述三

种方式的建立方法:

/var/spool/mail 方式

#cp /var/qmail/boot/proc /var/qmail/rc

user/Mailbox 方式

#cp /var/qmail/boot/home /var/qmail/rc

user/Maildir 方式

1)#cp /var/qmail/boot/home /var/qmail/rc

2)建立相应的邮件用户,例如:#useradd test

#passwd test

3)使用qmail提供的工具建立Maildir,命令如下:

$ /var/qmail/bin/maildirmake Maildir

$ echo ./Maildir/ .qmail

(注意这里必须以用户权限建立邮箱)

4)修改 /var/qmail/rc 文件,把其中的/Mailbox 改为/Maildir/

  1. 为了使root用户也能收发邮件,使用如下命令:

su alias

$ cd

$ /var/qmail/bin/maildirmake Maildir

$ echo ./Maildir/ .qmail

f) 建立启动qmail的shell文件run_mail,其内容为:

#cat run_mail

csh -cf ‘/var/qmail/rc’ &

3. 测试qmail基本邮件系统

首先启动qmail邮件服务器,然后测试邮件的收发,使用如下命令:

#run_mail

#echo to : ReceiverName | /var/qmail/bin/qmail-inject

(其中 ReceiverName 为邮件接受者的ID,例如test)

在邮件发送后,可以查找是否收到邮件,分三种方式,依赖邮件的存储方式:

/var/spool/mail 方式

$cd /var/spool

$vi ReceiverName

或者用

$mail

user/Mailbox 方式

打开用户根目录下的Mailbox文件,看是否收到邮件

user/Maildir 方式

$cd Maildir

$ls new

(注意在以上测试时,如果发生错误,可以查看/var/log/maillog文件获得出错原因)

4. 添加Pop3和SMTP服务

可以使用inetd超级服务器或TcpServer来建立相应的Pop3和SMTP服务,为了支持大容量

的邮件用户,建议使用TcpServer来监听服务端口启动相应的服务,建立命令如下:

#tar zxvf ucspi-tcp-0_88_tar.gz

#cd ucspi-tcp-0.88

#make setup check

#tar zxvf checkpassword-0_90_tar.gz

#cd checkpassword-0.90

#make setup check

修改上面建立的run_mail文件,修改后的内容如下:

#cat run_mail

csh -cf '/var/qmail/rc' &

tcpserver –u 502 –g 501 -c 100 0 smtp /var/qmail/bin/qmail-smtpd &

tcpserver -c100 0 pop3 /var/qmail/bin/qmail-popup gloomy.openet.com.cn

/bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir &

修改/var/qmail/control/rcpthosts文件,来增加SMTP接收邮件的域

例如:#cat /var/qmail/control/rcpthosts

gloomy.openet.com.cn

ldap,openet.com.cn

tbs.openet.com.cn

openet.com.cn

5. 测试Pop3和SMTP服务

首先启动qmail邮件服务器,然后测试,使用如下命令:

  1. 本地测试

#run_mail

#netstat –na | grep 25

#netstat –na | grep 110

#telnet localhost 110

user test

pass test

list

retr 1

  1. 远程测试

利用Windows下的图形邮件客户端(如 outlook、foxmail等)来测试邮件的收发,客户

端邮件帐号的建立请参考附带的帮助文档。

6. 为qmail增加LDAP支持

qmail可以通过LDAP来代替传统的/etc/passwd方式的Pop3认证,以便提高认证效率和有

效的支持大容量的邮件客户,为了使qmail获得LDAP支持,需要在qmail的基础上增加具

备LDAP认证的Patch包,具体操作使用如下命令:

#gunzip qmail-ldap-1_03-20010301_patch.gz

#cd qmail-1.03

#patch -p1 < /path to qmail-ldap patch/qmail-ldap patch name

在patch包打好之后,需要修改qmail的Makefile文件来配置相应的LDAP信息,具体如下

(这里只说明必须修改的,其余的可选项请参考QLDAPINSTALL.TXT文档):

  1. -LDAPFLAGS = -DCLEARTEXTPASSWORD

配置是否在LDAP目录中使用明文密码

  1. -LDAPLIBS =

配置使用的LDAP接口库,在本例中为:

-LDAPLIBS = -L/root/LdapServer/lib -lldap –llber –lldap_r –lpthread

-lresolv

  1. -LDAPINCLUDES =

配置使用的LDAP头文件,在本例中为:

-LDAPINCLUDES = -I/root/LdapServer/include

4)-SHADOWLIBS = -lcrypt –lshadow

-SHADOWOPTS = -DPW_SHADOW

配置使用的密码认证方式

在Makefile设置修改完毕后,重新编译qmail源文件,然后覆盖安装qmail,使用如下命

令:

#make setup check

7. 安装OpenLDAP

本例中采用了OpenLDAP的开放源代码LDAP Server,详细的管理请参考

( http://www.openldap.org )站点的文档以及《LDAP配置手册》,下面概述其安装配置

过程:

#tar zxvf openldap-2_0_7.tgz

#cd openldap-2.0.7

#./configure

#make depend

#make

#make test

#make install

修改OpenLDAP Server的配置文件,启动slapd服务器,具体如下:

#cd path to LDAP Server/

#vi etc/openldap/slapd.conf

主要修改slapd.conf文件中的如下部分,在本例中为:

#############################################

ldbm database definitions

#############################################

database ldbm

suffix "dc=gloomy , dc=openet , dc=com , dc=cn"

rootdn "dc=gloomy , dc=openet , dc=com , dc=cn"

rootpw secret

index objectclass,mail,uid

index qmailUser

8. 配置qmail+LDAP

在LDAP Server安装测试完毕后,修改并建立相应的qmail配置文件,增加对LDAP

LookUp的支持,分为如下几步:

  1. 在/var/qmail/control/下建立相应的LDAP支持文件:

#cat ldapserver

192.168.0.117

#cat ldapbasedn

dc=gloomy , dc=openet , dc=com , dc=cn

#cat ldapobjectclass

qmailUser

  1. 为LDAP添加相应的支持qmail邮件用户的schema:

#cd qmail-1.03

#cp qmail.schema /root/LdapServer/etc/openldap/schema

修改slapd.conf文件,加入下面一行:

include /root/LdapServer/etc/openldap/schema/qmai.schema

  1. 修改前面建立的run_mail启动脚本,修改后的内容如下:

#cat run_mail

csh -cf '/var/qmail/rc' &

tcpserver –u 502 –g 501 -c 100 0 smtp /var/qmail/bin/qmail-smtpd &

tcpserver -c100 0 pop3 /var/qmail/bin/qmail-popup gloomy.openet.com.cn

/var/qmail/bin/auth_pop /var/qmail/bin/qmail-pop3d Maildir &

9. 在LDAP DIT中增加qmail邮件用户目录

首先启动LDAP服务器,然后创建相应的*.ldif文件(有关LDIF文件的格式,请参考

RFC2849的描述),插入LDAP数据库中,具体的命令如下:

#/root/LdapServer/libexec/slapd

在本例中建立的的交换文件为mailer.ldif,其具体内容如下:

#cat mailer.ldif

dn: cn=testUser , dc=gloomy , dc=openet , dc=com , dc=cn

cn: testUser

sn: testUser

objectClass: top

objectClass: person

objectClass: inetOrgPerson

objectClass: qmailUser

mail: [email protected]

mailHost: gloomy.openet.com.cn

mailMessageStore: /home/test/Maildir/

mailQuota: 1000000S,100C

uid: test

userPassword: test

插入qmail用户目录到LDAP的目录信息树中,使用如下命令:

#/root/LdapServer/bin/ldapadd –x –D”dc=gloomy,dc=openet,dc=com,dc=cn”

–W –f mailer.ldif

10. 测试基于LDAP的Pop3认证

在上述步骤完成后,从新测试qmail邮件系统的运行状况,主要从以下三个方面测试,具

体命令如下:

  1. 本地测试

具体请参考上面小节3的方法

  1. Pop3+SMTP测试

具体请参考上面小节5的方法

  1. 测试工具

#/var/qmail/bin/qmail-ldaplookup –u test

#/var/qmail/bin/qmail-ladplookup –m [email protected]

4 参考资料

  1. Life with qmail ( http://www.lifewithqmail.org/lwq.html )

  2. Life with qmail-LDAP ( http://www.lifewithqmail.org/ldap/ )

  3. QLDAPINSTALL ( http://www.nrg4u.com/ )

  4. Open LDAP 2.0 Administrator’s Guide

( http://www.openldap.org/doc/admin/ )

  1. 《LDAP配置手册》

5 总结

LDAP使得过去杂乱无序的网络资源和信息管理呈现出一种树状的有序体系,不但使

Internet资源的管理和控制变得易于进行,而且同时在另外一方面也提高了各种信息和资

源的使用效率,LDAP用10%的代价实现了X.500 DAP 90%的功能,是目前Internet上越来

越广泛的应用之一,本文通过对qmail邮件服务器和LDAP整合应用的安装和配置的描述,

希望能够对掌握LDAP这个下一代因特网服务与应用的基础提供一定的帮助。


===========================

请弟兄们发帖时要写个好标题,多谢!

===========================

每天以1000KM/H的速度在跑,感觉还是时间不够:(

“西学东渐,洋为中用” + 创造 = ?

linux ppc


由 北南南北 在 08-30-2002 15:32 发表:


LDAP简介:什么是目录

本文出自:

http://www.china-pub.com

作者: 应雷

一、 大纲和目标

此文为理解什么是LDAP打下一个基础。目标是使你掌握基本的术语和概念,不作为深入学习LDAP的材料。LDAP,它的

全称为轻量级目录访问协议。

此文包括以下几方面的内容:

  • 目录的基本定义

  • 理解目录能做什么和不能做什么

  • 2个目录例子

  • 总结使用目录服务的校验表

二、 基本定义

目录是一种专门的数据库,它服务于各种应用程序,包括LDAP(轻量级目录访问协议)目录和基于X.500的目录。这些

目录都是通用的标准的目录。它们不适合于特定的操作系统、应用目的。

不管她们知不知道这里的目录是什么意思,大多数人熟悉各种各样的目录,像电话簿、黄页,电视指南、购物目录和图

书馆卡片目录。我们把这一类目录归为日常目录。在计算机中的目录被称为在线目录。

目录服务是软件、硬件、策论以及管理的集合体。目录服务至少包括以下几个方面:

  • 包含在目录中的信息

  • 保存信息的软件服务端

  • 扮演存取信息的软件客户端

  • 跑服务端,客户端软件的硬件

  • 支撑系统,像操作系统、设备驱动等

  • 连接客户端到服务端以及各个服务端之间的网络基础设施

  • 策略。规定谁能访问,谁能更新,谁能存取等

  • 维护和监视目录服务的软件

术语目录和目录服务经常可换用。

三、 目录是什么以及它能做什么

下面的应用类型不能被归为目录:

  • 数据库

  • 文件系统

  • web服务

  • FTP服务

  • DNS服务

与数据库比较

虽然目录也被称为特殊的数据库,但它不同于真正的数据库。目录的大部分操作为读操作。假如你的应用程序要写大

量的数据,你应该考虑选择使用数据库来实现。目录支持相对简单的事务处理。相反,数据库被设计成处理大量的各

种各样的事务处理。假如你的应用要求这种重负荷的事务支持,你该选择数据库而不是目录。

在另一方面,假如你的应用不要求这样的大负荷事务处理,而是偶尔的写一些简单的事务信息。这时,目录是理想的

选择。它会更有效,更简单。

与文件系统比较

目录被认为是很差的文件系统。文件通常很大,有几兆甚至更大,虽然目录被优化成存取很小的信息。应用程序以块

的方式存取文件。文件系统支持各种调用--像seek(),read()和write(),这样可以写大文件的一部分的信息。目录

不能提供这种随机的存取访问。目录条目被分成各种属性。你可以分别获取各种属性。你不能取得一个条目的部分值,

如从第几个字节开始。

与web的比较

不象web服务器一样,目录不适合推送JPEG图象或Java程序给客户端。Web服务通常作为开发web应用的跳板。这些平

台从CGI(公用网关接口)到更复杂的像Netscape应用服务平台。目录一般不提供这种形式的应用开发,甚至它不提

供目录应用开发平台服务。

与FTP比较

与FTP的主要区别在于:数据量的大小和客户的类型。另外一点就是FTP是一个非常简单的协议,它专于做一件事情并

把它做好。假如你想做的是把文件从一个地方传送到另一个地方,那么额外的目录下层结构也需要,如复制、查询、

更新等。

与DNS比较

因特网的域名系统和目录有相似之处,它们都提供对分层式数据库的访问。但其它一些不同把它们区分开来。

DNS的主要目的是把主机名转换成IP地址。比较而言,大多数目录有更普通的作用。DNS有一套专门的、固定的计划,

而目录允许被扩展。DNS不允许更新它的信息,而目录可以。DNS可通过UDP的无连接的方式访问,而目录通常是连接

访问的。

四、 目录举例

X.500

在八十年代中期,两个不同的团体--CCITT和ISO,各自开始在目录服务方面的研究工作。最后,两个国际性的目录规

范融合成一个规范,这就是X.500。X.500的优势在于它的信息模型,它的多功能性和开放性。

LDAP

1993年7月,第一个LDAP规范是由密歇根大学开发的,也就是RFC1487。LDAP的开发者们简化了笨重的X.500目录访问

协议,他们在功能性、数据表示、编码和传输方面做了改建。目前,LDAP的版本是第3版本,相对以前版本来说,

第3版本在国际化、提名、安全、扩展性和特性方面更加完善。1997年,第3版本成为因特网标准。

五、 目录服务校验表

下面是简要的总结:为你是否选择目录或其它技术提供导航。

  • 信息量大小。目录适合于存放相对小的信息量,而不是几兆大小的文件。可以利用指针,它可以指向大的文件,

但绝不是文件本身。

  • 信息的类型。目录通常是基于属性的信息。

  • 读写比。目录适合于读操作更多的应用。如需要用到大量的写操作,数据库是一个选择。

  • 搜寻能力。目录能搜寻他自身包含的信息。

  • 标准访问。假如你需要标准的访问信息。目录是一个好的选择。

六、 参考文献

X.500 Lightweight Directory Access Protocol

http://www.cis.ohio-state.edu/rfc/rfc1487.txt

A String Representation of LDAP Search Filters

http://www.cis.ohio-state.edu/rfc/rfc1558.txt


===========================

请弟兄们发帖时要写个好标题,多谢!

===========================

每天以1000KM/H的速度在跑,感觉还是时间不够:(

“西学东渐,洋为中用” + 创造 = ?

linux ppc


由 北南南北 在 08-30-2002 15:32 发表:


什么是LDAP?

本文出自: http://www.sczg.com/

LDAP的英文全称是Lightweight Directory Access Protocol,一般都简称为LDAP。它是基于X.500标准的,

但是简单多了并且可以根据需要定制。与X.500不同,LDAP支持TCP/IP,这对访问Internet是必须的。LDAP

的核心规范在RFC中都有定义,所有与LDAP相关的RFC都可以在LDAPman RFC网页中找到。现在LDAP技术不仅

发展得很快而且也是激动人心的。在企业范围内实现LDAP可以让运行在几乎所有计算机平台上的所有的应

用程序从LDAP目录中获取信息。LDAP目录中可以存储各种类型的数据:电子邮件地址、邮件路由信息、人力

资源数据、公用密匙、联系人列表,等等。通过把LDAP目录作为系统集成中的一个重要环节,可以简化员工

在企业内部查询信息的步骤,甚至连主要的数据源都可以放在任何地方。

LDAP目录的优势

如果需要开发一种提供公共信息查询的系统一般的设计方法可能是采用基于WEB的数据库设计方式,即前端

使用浏览器而后端使用WEB服务器加上关系数据库。后端在Windows的典型实现可能是Windows NT + IIS + Acess

数据库或者是SQL服务器,IIS和数据库之间通过ASP技术使用ODBC进行连接,达到通过填写表单查询数据的功能;

后端在Linux系统的典型实现可能是Linux+ Apache + postgresql,Apache和数据库之间通过PHP3提供的函数进

行连接。使用上述方法的缺点是后端关系数据库的引入导致系统整体的性能降低和系统的管理比较繁琐,因为需

要不断的进行数据类型的验证和事务的完整性的确认;并且前端用户对数据的控制不够灵活,用户权限的设置一

般只能是设置在表一级而不是设置在记录一级。

目录服务的推出主要是解决上述数据库中存在的问题。目录与关系数据库相似,是指具有描述性的基于属性的记

录集合,但它的数据类型主要是字符型,为了检索的需要添加了BIN(二进制数据)、CIS(忽略大小写)、CES

(大小写敏感)、TEL(电话型)等语法(Syntax),而不是关系数据库提供的整数、浮点数、日期、货币等类型,

同样也不提供象关系数据库中普遍包含的大量的函数,它主要面向数据的查询服务(查询和修改操作比一般是大于

10:1),不提供事务的回滚(rollback)机制,它的数据修改使用简单的锁定机制实现All-or-Nothing,它的目标

是快速响应和大容量查询并且提供多目录服务器的信息复制功能。

现在该说说LDAP目录到底有些什么优势了。现在LDAP的流行是很多因数共同作用的结果。可能LDAP最大的优势是:

可以在任何计算机平台上,用很容易获得的而且数目不断增加的LDAP的客户端程序访问LDAP目录。而且也很容易

定制应用程序为它加上LDAP的支持。

LDAP协议是跨平台的和标准的协议,因此应用程序就不用为LDAP目录放在什么样的服务器上操心了。实际上,LDAP

得到了业界的广泛认可,因为它是Internet的标准。产商都很愿意在产品中加入对LDAP的支持,因为他们根本不用

考虑另一端(客户端或服务端)是怎么样的。LDAP服务器可以是任何一个开发源代码或商用的LDAP目录服务器(或

者还可能是具有LDAP界面的关系型数据库),因为可以用同样的协议、客户端连接软件包和查询命令与LDAP服务器

进行交互。与LDAP不同的是,如果软件产商想在软件产品中集成对DBMS的支持,那么通常都要对每一个数据库服务

器单独定制。不象很多商用的关系型数据库,你不必为LDAP的每一个客户端连接或许可协议付费 大多数的LDAP服务

器安装起来很简单,也容易维护和优化。

LDAP服务器可以用“推”或“拉”的方法复制部分或全部数据,例如:可以把数据“推”到远程的办公室,以增加

数据的安全性。复制技术是内置在LDAP服务器中的而且很容易配置。如果要在DBMS中使用相同的复制功能,数据库

产商就会要你支付额外的费用,而且也很难管理。

LDAP允许你根据需要使用ACI(一般都称为ACL或者访问控制列表)控制对数据读和写的权限。例如,设备管理员可

以有权改变员工的工作地点和办公室号码,但是不允许改变记录中其它的域。ACI可以根据谁访问数据、访问什么数

据、数据存在什么地方以及其它对数据进行访问控制。因为这些都是由LDAP目录服务器完成的,所以不用担心在客

户端的应用程序上是否要进行安全检查。

LDAP(Lightweight Directory Acess Protocol)是目录服务在TCP/IP上的实现(RFC 1777 V2版和RFC 2251

V3版)。它是对X500的目录协议的移植,但是简化了实现方法,所以称为轻量级的目录服务。在LDAP中目录是按照

树型结构组织,目录由条目(Entry)组成,条目相当于关系数据库中表的记录;条目是具有区别名DN(Distinguished

Name)的属性(Attribute)集合,DN相当于关系数据库表中的关键字(Primary

Key);属性由类型(Type)和多个值(Values)组成,相当于关系数据库中的域(Field)由域名和数据类型组成,

只是为了方便检索的需要,LDAP中的Type可以有多个Value,而不是关系数据库中为降低数据的冗余性要求实现的各

个域必须是不相关的。LDAP中条目的组织一般按照地理位置和组织关系进行组织,非常的直观。LDAP把数据存放在

文件中,为提高效率可以使用基于索引的文件数据库,而不是关系数据库。LDAP协议集还规定了DN的命名方法、存

取控制方法、搜索格式、复制方法、URL格式、开发接口等

LDAP对于这样存储这样的信息最为有用,也就是数据需要从不同的地点读取,但是不需要经常更新。

例如,这些信息存储在LDAP目录中是十分有效的:

l 公司员工的电话号码簿和组织结构图

l 客户的联系信息

l 计算机管理需要的信息,包括NIS映射、email假名,等等

l 软件包的配置信息

l 公用证书和安全密匙

什么时候该用LDAP存储数据

大多数的LDAP服务器都为读密集型的操作进行专门的优化。因此,当从LDAP服务器中读取数据的时候会比从专门为

OLTP优化的关系型数据库中读取数据快一个数量级。也是因为专门为读的性能进行优化,大多数的LDAP目录服务器

并不适合存储需要需要经常改变的数据。例如,用LDAP服务器来存储电话号码是一个很好的选择,但是它不能作为

电子商务站点的数据库服务器。

如果下面每一个问题的答案都是“是”,那么把数据存在LDAP中就是一个好主意。

l 需要在任何平台上都能读取数据吗?

l 每一个单独的记录项是不是每一天都只有很少的改变?

l 可以把数据存在平面数据库(flat database)而不是关系型数据库中吗?换句话来说,也就是不管什么范式不

范式的,把所有东西都存在一个记录中(差不多只要满足第一范式)。

最后一个问题可能会唬住一些人,其实用平面数据库去存储一些关系型的数据也是很一般的。例如,一条公司员工

的记录就可以包含经理的登录名。用LDAP来存储这类信息是很方便的。一个简单的判断方法:如果可以把保数据存

在一张张的卡片里,就可以很容易地把它存在LDAP目录里。

安全和访问控制

LDAP提供很复杂的不同层次的访问控制或者ACI。因这些访问可以在服务器端控制,这比用客户端的软件保证数据的

安全可安全多了。

用LDAP的ACI,可以完成:

l 给予用户改变他们自己的电话号码和家庭地址的权限,但是限制他们对其它数据(如,职务名称,经理的登录名,

等等)只有“只读”权限。

l 给予“HR-admins"组中的所有人权限以改变下面这些用户的信息:经理、工作名称、员工号、部门名称和部门号。

但是对其它域没有写权限。

l 禁止任何人查询LDAP服务器上的用户口令,但是可以允许用户改变他或她自己的口令。

l 给予经理访问他们上级的家庭电话的只读权限,但是禁止其他人有这个权限。

l 给予“host-admins"组中的任何人创建、删除和编辑所有保存在LDAP服务器中的与计算机主机有关的信息

l 通过Web,允许“foobar-sales"组中的成员有选择地给予或禁止他们自己读取一部分客户联系数据的读权限。这

将允许他们把客户联系信息下载到本地的笔记本电脑或个人数字助理(PDA)上。(如果销售人员的软件都支持LDAP,

这将非常有用)

l 通过Web,允许组的所有者删除或添加他们拥有的组的成员。例如:可以允许销售经理给予或禁止销售人员改变Web

页的权限。也可以允许邮件假名(mail aliase)的所有者不经过IT技术人员就直接从邮件假名中删除或添加用户。

“公用”的邮件列表应该允许用户从邮件假名中添加或删除自己(但是只能是自己)。也可以对IP地址或主机名加以

限制。例如,某些域只允许用户IP地址以192.168.200.*开头的有读的权限,或者用户反向查找DNS得到的主机名必须

为*.foobar.com。

LDAP目录树的结构

LDAP目录以树状的层次结构来存储数据。如果你对自顶向下的DNS树或UNIX文件的目录树比较熟悉,也就很容易掌握

LDAP目录树这个概念了。就象DNS的主机名那样,LDAP目录记录的标识名(Distinguished Name,简称DN)是用来读取

单个记录,以及回溯到树的顶部。后面会做详细地介绍。

为什么要用层次结构来组织数据呢?原因是多方面的。下面是可能遇到的一些情况:

l 如果你想把所有的美国客户的联系信息都“推”到位于到西雅图办公室(负责营销)的LDAP服务器上,但是你不想

把公司的资产管理信息“推”到那里。

l 你可能想根据目录树的结构给予不同的员工组不同的权限。在下面的例子里,资产管理组对“asset-mgmt"部分有完

全的访问权限,但是不能访问其它地方。

l 把LDAP存储和复制功能结合起来,可以定制目录树的结构以降低对WAN带宽的要求。位于西雅图的营销办公室需要每

分钟更新的美国销售状况的信息,但是欧洲的销售情况就只要每小时更新一次就行了。

刨根问底:基准DN

LDAP目录树的最顶部就是根,也就是所谓的“基准DN"。基准DN通常使用下面列出的三种格式之一。假定我在名为FooBar

的电子商务公司工作,这家公司在Internet上的名字是foobar.com。

o="FooBar, Inc.", c=US

(以X.500格式表示的基准DN)

在这个例子中,o=FooBar, Inc. 表示组织名,在这里就是公司名的同义词。c=US 表示公司的总部在美国。以前,一般

都用这种方式来表示基准DN。但是事物总是在不断变化的,现在所有的公司都已经(或计划)上Internet上。随着

Internet的全球化,在基准DN中使用国家代码很容易让人产生混淆。现在,X.500格式发展成下面列出的两种格式。

o=foobar.com

(用公司的Internet地址表示的基准DN)

这种格式很直观,用公司的域名作为基准DN。这也是现在最常用的格式。

dc=foobar, dc=com

(用DNS域名的不同部分组成的基准DN)

就象上面那一种格式,这种格式也是以DNS域名为基础的,但是上面那种格式不改变域名(也就更易读),而这种格式

把域名:foobar.com分成两部分 dc=foobar, dc=com。在理论上,这种格式可能会更灵活一点,但是对于最终用户来说

也更难记忆一点。考虑一下foobar.com这个例子。当foobar.com和gizmo.com合并之后,可以简单的把“dc=com"当作基

准DN。把新的记录放到已经存在的dc=gizmo, dc=com目录下,这样就简化了很多工作(当然,如果foobar.com和wocket.edu

合并,这个方法就不能用了)。如果LDAP服务器是新安装的,我建议你使用这种格式。再请注意一下,如果你打算使用活动

目录(Actrive Directory),Microsoft已经限制你必须使用这种格式。

更上一层楼:在目录树中怎么组织数据

在UNIX文件系统中,最顶层是根目录(root)。在根目录的下面有很多的文件和目录。象上面介绍的那样,LDAP目录也是

用同样的方法组织起来的。

在根目录下,要把数据从逻辑上区分开。因为历史上(X.500)的原因,大多数LDAP目录用OU从逻辑上把数据分开来。OU

表示“Organization Unit",在X.500协议中是用来表示公司内部的机构:销售部、财务部,等等。现在LDAP还保留ou=这

样的命名规则,但是扩展了分类的范围,可以分类为:ou=people, ou=groups, ou=devices,等等。更低一级的OU有时用

来做更细的归类。例如:LDAP目录树(不包括单独的记录)可能会是这样的:

dc=foobar, dc=com

ou=customers

ou=asia

ou=europe

ou=usa

ou=employees

ou=rooms

ou=groups

ou=assets-mgmt

ou=nisgroups

ou=recipes

单独的LDAP记录

DN是LDAP记录项的名字

在LDAP目录中的所有记录项都有一个唯一的“Distinguished Name",也就是DN。每一个LDAP记录项的DN是由两个部分

组成的:相对DN(RDN)和记录在LDAP目录中的位置。

RDN是DN中与目录树的结构无关的部分。在LDAP目录中存储的记录项都要有一个名字,这个名字通常存在cn(Common Name)

这个属性里。因为几乎所有的东西都有一个名字,在LDAP中存储的对象都用它们的cn值作为RDN的基础。如果我把最喜欢的

吃燕麦粥食谱存为一个记录,我就会用cn=Oatmeal Deluxe作为记录项的RDN。

l 我的LDAP目录的基准DN是dc=foobar,dc=com

l 我把自己的食谱作为LDAP的记录项存在ou=recipes

l 我的LDAP记录项的RDN设为cn=Oatmeal Deluxe

上面这些构成了燕麦粥食谱的LDAP记录的完整DN。记住,DN的读法和DNS主机名类似。下面就是完整的DN:

cn=Oatmeal Deluxe,ou=recipes,dc=foobar,dc=com

举一个实际的例子来说明DN

现在为公司的员工设置一个DN。可以用基于cn或uid(User ID),作为典型的用户帐号。例如,FooBar的员工Fran Smith

(登录名:fsmith)的DN可以为下面两种格式:

uid=fsmith,ou=employees,dc=foobar,dc=com

(基于登录名)

LDAP(以及X.500)用uid表示“User ID",不要把它和UNIX的uid号混淆了。大多数公司都会给每一个员工唯一的登录名,

因此用这个办法可以很好地保存员工的信息。你不用担心以后还会有一个叫Fran Smith的加入公司,如果Fran改变了她的

名字(结婚?离婚?或宗教原因?),也用不着改变LDAP记录项的DN。

cn=Fran Smith,ou=employees,dc=foobar,dc=com

(基于姓名)

可以看到这种格式使用了Common Name(CN)。可以把Common Name当成一个人的全名。这种格式有一个很明显的缺点就是:

如果名字改变了,LDAP的记录就要从一个DN转移到另一个DN。但是,我们应该尽可能地避免改变一个记录项的DN。

定制目录的对象类型

你可以用LDAP存储各种类型的数据对象,只要这些对象可以用属性来表示,下面这些是可以在LDAP中存储的一些信息:

l 员工信息:员工的姓名、登录名、口令、员工号、他的经理的登录名,邮件服务器,等等。

l 物品跟踪信息:计算机名、IP地址、标签、型号、所在位置,等等。

l 客户联系列表:客户的公司名、主要联系人的电话、传真和电子邮件,等等。

l 会议厅信息:会议厅的名字、位置、可以坐多少人、电话号码、是否有投影机。

l 食谱信息:菜的名字、配料、烹调方法以及准备方法。

因为LDAP目录可以定制成存储任何文本或二进制数据,到底存什么要由你自己决定。LDAP目录用对象类型

(object classes)的概念来定义运行哪一类的对象使用什么属性。在几乎所有的LDAP服务器中,你都要根据

自己的需要扩展基本的LDAP目录

的功能,创建新的对象类型或者扩展现存的对象类型。

LDAP目录以一系列“属性对”的形式来存储记录项,每一个记录项包括属性类型和属性值(这与关系型数据库

用行和列来存取数据有根本的不同)。下面是我存在LDAP目录中的一部分食谱记录:

dn: cn=Oatmeal Deluxe, ou=recipes, dc=foobar, dc=com

cn: Instant Oatmeal Deluxe

recipeCuisine: breakfast

recipeIngredient: 1 packet instant oatmeal

recipeIngredient: 1 cup water

recipeIngredient: 1 pinch salt

recipeIngredient: 1 tsp brown sugar

recipeIngredient: 1/4 apple, any type

请注意上面每一种配料都作为属性recipeIngredient值。LDAP目录被设计成象上面那样为一个属性保存多个值的,

而不是在每一个属性的后面用逗号把一系列值分开。

因为用这样的方式存储数据,所以数据库就有很大的灵活性,不必为加入一些新的数据就重新创建表和索引。更

重要的是,LDAP目录不必花费内存或硬盘空间处理“空”域,也就是说,实际上不使用可选择的域也不会花费你

任何资源。

作为例子的一个单独的数据项

让我们看看下面这个例子。我们用Foobar, Inc.的员工Fran Smith的LDAP记录。这个记录项的格式是LDIF,用来

导入和导出LDAP目录的记录项。

dn: uid=fsmith, ou=employees, dc=foobar, dc=com

objectclass: person

objectclass: organizationalPerson

objectclass: inetOrgPerson

objectclass: foobarPerson

uid: fsmith

givenname: Fran

sn: Smith

cn: Fran Smith

cn: Frances Smith

telephonenumber: 510-555-1234

roomnumber: 122G

o: Foobar, Inc.

mailRoutingAddress: [email protected]

mailhost: mail.foobar.com

userpassword: {crypt}3x1231v76T89N

uidnumber: 1234

gidnumber: 1200

homedirectory: /home/fsmith

loginshell: /usr/local/bin/bash

属性的值在保存的时候是保留大小写的,但是在默认情况下搜索的时候是不区分大小写的。某些特殊的

Published At
Categories with 服务器类
Tagged with
comments powered by Disqus