简介:
LDAP(轻量级目录服务访问协议,Lightweight Directory Access Protocol)基于X.500标准,支持TCP/IP,使用简单方便。现在越来越多的网络应用系统都支持LDAP。
目录是一个为查询、浏览和搜索而优化的专业分布式数据库,它成树状结构组织数据,就好象Linux/Unix系统中的文件目录一样。目录数据库和关系数据库不同,它有优异的读性能,但写性能差,并且没有事务处理、回滚等复杂功能,不适于存储修改频繁的数据。所以目录天生是用来查询的,就好象它的名字一样。目录服务是由目录数据库和一套访问协议组成的系统。类似以下的信息适合储存在目录中: 企业员工和企业客户之类人员信息;公用证书和安全密钥;邮件地址、网址、IP等电脑信息;电脑配置信息。
目录是一个为查询、浏览和搜索而优化的专业分布式数据库,它成树状结构组织数据,就好象Linux/Unix系统中的文件目录一样。目录数据库和关系数据库不同,它有优异的读性能,但写性能差,并且没有事务处理、回滚等复杂功能,不适于存储修改频繁的数据。所以目录天生是用来查询的,就好象它的名字一样。目录服务是由目录数据库和一套访问协议组成的系统。类似以下的信息适合储存在目录中: 企业员工和企业客户之类人员信息;公用证书和安全密钥;邮件地址、网址、IP等电脑信息;电脑配置信息。
而且在我们的日常生活中,很多的应用都是基于LDAP的,比如Microsoft服务器的AD管理以及IBM的邮件Lotus都是基于LDAP的,并且Linux下的Postfix也可以设计成支持LDAP的形式,这篇文单权当是入门之用吧.以前有试过做基于Mysql的Postfix邮件系统( [url]http://waringid.blog.51cto.com/65148/58580[/url]),也打算用LDAP来实现,我会把我的安装经历整理出来的.
支持软件:
安装OpenLDAP的相关支持软件是Berkeley DB,有了它就可以进行了,当然,如果你要求Sasl的支持的话那cyrus-sasl这个支持包也是少不了的.不过这个软件包一般系统中会自带,而且OpenLDAP在编译时默认会加入此功能支持.这些软件的下载地址可以参考我以前写过的一篇文章( [url]http://waringid.blog.51cto.com/65148/58144[/url]),其中有列出下载地址.而OpenLDAP的下载地址则是: [url]ftp://ftp.openldap.org/pub/OpenLDAP/openldap-release[/url].
系统相关:
在Linux下不同版本的系统在设置上可能会有很小的差异,所以这里交待一下我的系统:RedHat AS 4,安装时所选的系统组件只有"开发工具",其它的所有软件包都没有选取.如果你是Linux新手,对装系统还有一些困难的话,请参考这篇文章([url]http://waringid.blog.51cto.com/65148/47655[/url]).
下载相关软件:
查询并卸载系统中原有的相关软件:
rpm -qa |grep ldap rpm -e --nodeps 显示的组件
安装BerkeleyDB:
tar zxvf db-4.5.20.tar.gz cd db-4.5.20/build_unix ../dist/configure --prefix=/usr/local/BerkeleyDB make make install echo "/usr/local/BerkeleyDB/lib" >> /etc/ld.so.conf ldconfig -v
安装Cyrus-Sasl:
tar zxvf cyrus-sasl-2.1.21.tar.gz cd cyrus-sasl-2.1.21 ./configure --prefix=/usr/local/sasl --enable-cram --enable-plain \ --enable-digest --disable-anon --enable-krb4 --enable-ntlm make make install echo "/usr/local/sasl/lib/" >> /etc/ld.so.conf ldconfig -v ln -sv /usr/local/sasl/include/sasl/* /usr/local/include/ ln -sv /usr/local/sasl/lib/* /usr/local/lib/ ln -sv /usr/local/sasl/lib/sasl2/* /usr/local/lib/
安装OpenLDAP:
gunzip -c openldap-2.4.9.tgz | tar xvfB - cd openldap-2.4.9 env CPPFLAGS="-I/usr/local/BerkeleyDB/include" LDFLAGS="-L/usr/local/BerkeleyDB/lib" \ ./configure --prefix=/usr/local/openldap --sysconfdir=/etc --enable-ldbm \ --enable-lmpasswd --enable-spasswd --enable-bdb --enable-ldap make depend make make install echo /usr/local/openldap/lib >> /etc/ld.so.conf ldconfig -v
配置LADP:
LDAP的配置中,我们要实现的功能如图所示.需要增加一个用户"Ben".
生成LDAP管理密码:
/usr/local/openldap/sbin/slappasswd -h {md5} {MD5}X03MO1qnZdYdgyfeuILPmQ==##此密码是LDAP管理密码,和系统密码无关增加相关查询记录:
echo "127.0.0.1 ldap.test.com" >> /etc/hosts echo "127.0.0.1 ldap-master.test.com" >> /etc/hosts
设置slapd.conf文件:
vi /etc/openldap/slapd.conf include /etc/openldap/schema/core.schema include /etc/openldap/schema/cosine.schema include /etc/openldap/schema/inetorgperson.schema include /etc/openldap/schema/nis.schema pidfile /var/run/openldap/slapd.pid argsfile /var/run/openldap/slapd.args database bdb suffix "dc=test,dc=com" rootdn "cn=Manager,dc=test,dc=com" rootpw {MD5}X03MO1qnZdYdgyfeuILPmQ== directory /var/lib/ldap
设置ldap.conf文件:
vi /etc/openldap/ldap.conf HOST 127.0.0.1 BASE dc=test,dc=com URI ldap://ldap.test.comldap://ldap-master.test.com:389 SIZELIMIT 12 TIMELIMIT 15 DEREF nerver
启动LDAP:
/usr/local/openldap/libexec/slapd
增加用户资料:
vi test.ldif #root node ##建立DN dn:dc=test,dc=com dc:test objectclass:dcObject objectclass:organizationalUnit ou:test Dot com #login top ##建立RDN dn:ou=login,dc=test,dc=com ou:login objectclass:organizationalUnit #user,uid,password dn:ou=user,ou=login,dc=test,dc=com ou:user objectclass:organizationalUnit #group dn:ou=group,ou=login,dc=test,dc=com ou:group objectclass:organizationalUnit #company organization top dn:ou=company,dc=test,dc=com ou:company objectclass:organizationalUnit #for company organization(unit) dn:ou=unit,ou=company,dc=test,dc=com ou:unit objectclass:organizationalUnit #human resource(under unit) dn:ou=hr,ou=unit,ou=company,dc=test,dc=com ou:hr objectclass:organizationalUnit #MIS(under unit) dn:ou=mis,ou=unit,ou=company,dc=test,dc=com ou:mis objectclass:organizationalUnit #Editorial(under unit) dn:ou=editorial,ou=unit,ou=company,dc=test,dc=com ou:editorial objectclass:organizationalUnit vi user.ldif ##建立用户数据#User-Ben Chan dn:cn=ben,ou=editorial,ou=unit,ou=company,dc=test,dc=com cn:ben sn:chan objectclass:organizationalUnit givenName:ben mail:ming@test.com telephoneNumber:1234678 mobile:98765432 postalAddress:dongguan postalCode:86 ou:editorial o:test Corp labeledURL:[url]http://waringid.blog.51cto.com[/url] title:Editor postalCode: 区号 ou:部门 o:机构 title:职位
解决中文符号问题:
dos2unix user.ldif iconv -f gb2312 -t UTF-8 -o user.ldif.utf8 user.ldif file user.ldif.utf8 ldapmodify -D "cn=Manager,dc=test,dc=com" -w secret -x -a -f user.ldif.utf8
测试:
ldapsearch -x -b "ou=unit,ou=company,dc=test,dc=com"
通过web方式管理LADP:
以命令的方式来管理LDAP是最快最直接的方法,但是需要用户有一定的Linux管理能力及对LDAP结构深入的理解.还有一种方式就是通过WEB的方式进行管理,这种方式和phpmyadmin管理mysql差不多,用它则是最方便讯速了.下载地址为: [url]http://sourceforge.net/project/showfiles.php?group_id=61828[/url].它的配置方法和phpmyadmin的配置方法差不多,这里就不过多描述了,参考以前的文件应可以自行设置( [url]http://waringid.blog.51cto.com/65148/58210[/url]),需要注意的是要将配置文件从config目录中copy到它的上一级目录,然后需要设置以下一些地方:
$ldapservers->SetValue($i,'server','auth_type','session'); $ldapservers->SetValue($i,'login','dn','cn=Manager,dc=test.com'); $ldapservers->SetValue($i,'login','pass','');