- 浏览: 2265552 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (423)
- FileNet相关 (3)
- 应用服务器相关 (22)
- Java综合 (77)
- 持久层 (24)
- struts (11)
- webservice (8)
- 虚拟机 (2)
- 光盘刻录 (0)
- AD及AD集群 (1)
- JS (33)
- F5 (0)
- loadrunner8.1 (0)
- Java 反编译工具 (2)
- DataBase (62)
- ant (1)
- 操作系统 (29)
- 我的任务 (3)
- 平台架构 (16)
- 业务规则引擎 (2)
- 模板 (1)
- EJB (5)
- spring (24)
- CMMI (1)
- 项目管理 (20)
- LDAP (13)
- JMS (10)
- JSP (19)
- JBPM (2)
- web MVC框架设计思想 (2)
- 第三方支付平台 (2)
- BUG管理工具 (1)
- 垃圾站 (2)
- php (1)
- swing (1)
- 书籍 (1)
- QQ qq (2)
- 移动互联网 (26)
- 爱听的歌曲 (0)
- hadoop (4)
- 数据库 (9)
- 设计模式 (1)
- 面试经验只谈 (1)
- 大数据 (9)
- sp (1)
- 缓存数据库 (8)
- storm (2)
- taobao (2)
- 分布式,高并发,大型互联网,负载均衡 (6)
- Apache Ignite (0)
- Docker & K8S (0)
最新评论
-
wangyudong:
新版本 Wisdom RESTClienthttps://gi ...
spring rest mvc使用RestTemplate调用 -
wangyudong:
很多API doc生成工具生成API文档需要引入第三方依赖,重 ...
spring rest mvc使用RestTemplate调用 -
zhaoshijie:
cfying 写道大侠,还是加载了两次,怎么解决啊?求。QQ: ...
spring容器加载完毕做一件事情(利用ContextRefreshedEvent事件) -
xinglianxlxl:
对我有用,非常感谢
spring容器加载完毕做一件事情(利用ContextRefreshedEvent事件) -
k_caesar:
多谢,学习了
利用maven的resources、filter和profile实现不同环境使用不同配置文件
OpenLDAP是LDAP的一种开源实现
Table of Contents
1. 目录服务简介
1.1. X.500和LDAP
1.2. LDAP产品
2. OpenLDAP安装笔记
2.1. 源码安装
2.2. 数据录入
2.2.1. 手动录入方法
2.2.2. 文件方式
2.2.3. 脚本方式
2.3. 常用命令介绍
2.4. 启用sasl验证
2.5. 配置服务器复制
3. 管理工具
3.1. phpldapadmin
3.2. gq
3.3. CPU
3.4. JXplore
3.5. LAM
4. HowTo
4.1. 禁止整个服务器的匿名访问
Chapter 1. 目录服务简介
Table of Contents
1.1. X.500和LDAP
1.2. LDAP产品
目录是一个为查询、浏览和搜索而优化的专业分布式数据库,它成树状结构组织数据,就好象Linux/Unix系统中的文件目录一样。目录数据库和关系数据库不同,它有优异的读性能,但写性能差,并且没有事务处理、回滚等复杂功能,不适于存储修改频繁的数据。所以目录天生是用来查询的,就好象它的名字一样。目录服务是由目录数据库和一套访问协议组成的系统。类似以下的信息适合储存在目录中:
企业员工和企业客户之类人员信息;
公用证书和安全密钥;
邮件地址、网址、IP等电脑信息;
电脑配置信息。
...
1.1. X.500和LDAP
现在国际上的目录服务标准有两个,一个是较早的X.500标准,一个是较新的LDAP标准。
X.500是一个协议族,由一系列的概念和协议组成,包括:
X.501是模型定义,定义目录服务的基本模型和概念;
X.509是认证框架,定义如何处理目录服务中客户和服务器认证;
X.511是抽象服务定义,定义X.500提供的功能性服务;
X.518是分布式操作过程定义,定义如何跨平台处理目录服务;
X.519 是协议规范,定义了X.500协议,包括DAP(Directory Access Protocol,目录访问协议)、DSP(Directory System Protocol,目录系统协议)、DOP(Directory Operator Protocol,目录操作绑定协议)、DISP(Directory Information Shadowing Protocol,目录信息阴影协议 );
X.520定义属性类型要求;
X.521定义对象类型;
X.525定义如果在目录服务器间复制内容。
X.500标准中定义了很多内容,包括:
定义了信息模型,确定目录中信息的格式和字符集,如何在项中表示目录信息(定义对象类、属性等模式);
定义命名空间,确定对信息进行的组织和引用,如何组织和命名项-目录信息树DIT和层次命名模型;
定义功能模型,确定可以在信息上执行的操作;
定义认证框架,保证目录中信息的安全,如何实现目录中信息的授权保护-访问控制模型;
定义分布操作模型,确定数据如何分布和如何对分布数据执行操作,如何将全局目录树划分为管理域,以便管理。
定义客户端与服务器之间的通信的各种协议。
由于X.500较复杂,且需严格遵照OSI七层协议模型。造成应用开发较困难。所以开发了LDAP,以便在INTERNET上使用。
LDAP协议于1993年获批准,产生LDAPv1版,1997年发布最新的LDAPv3版,该版本是LDAP协议发展的一个里程碑,它作为X.500的简化版提供了很多自有的特性,使LDAP功能更为完备,具有更强大的生命力。
LDAP也是一个协议族,包含以下内容:
RFC 2251--LDAPv3核心协议,定义了LDAPv3协议的基本模型和基本操作;
RFC 2252--定义LDAPv3基本数据模式(Schema)(包括语法、匹配规则、属性类型和对象类)以及标准的系统数据模式;
RFC 2253--定义LDAPv3中的分辩名(DN)表达式;
RFC 2254--定义了LDAPv3中的过滤表达式;
RFC 2255--定义LDAPv3统一资源地址的格式;
RFC 2256--定义LDAPv3中使用X.500的Schema列表;
RFC 2829--定义了LDAPv3中的认证方式;
RFC 2830--定义了如何通过扩展使用TLS服务;
RFC 1823--定义了C的LDAP客户端API开发接口;
RFC 2847--定义了LDAP数据导入、导出文件接口LDIF。
这些协议定义了LDAP的内容,包括:
定义了一个信息模型,确定了LDAP目录中信息的格式和字符集,如何表示目录信息(定义对象类、属性、匹配规则和语法等模式);
定义了命名空间,确定信息的组织方式--目录树DIT,以DN和RDN为基础的命名方式,以及LDAP信息的Internet表示方式;
定义了功能模型,确定在可以在信息上执行的操作及API。
定义了安全框架,保证目录中信息的安全,定义匿名、用户名/密码、SASL等多种认证方式,以及与TLS结合的通讯保护框架;
定义分布式操作模型,基于指引方式的分布式操作框架;
定义了LDAP扩展框架。
1.2. LDAP产品
现在市场上有关LDAP的产品已有很多,各大软件公司都在他们的产品中集成了LDAP服务,如Microsoft的ActiveDirectory、 Lotus的Domino Directory、IBM的WebSphere中也集成了LDAP服务。LDAP的开源实现是OpenLDAP,它比商业产品一点也不差,而且源码开放。
Chapter 2. OpenLDAP安装笔记
Table of Contents
2.1. 源码安装
2.2. 数据录入
2.2.1. 手动录入方法
2.2.2. 文件方式
2.2.3. 脚本方式
2.3. 常用命令介绍
2.4. 启用sasl验证
2.5. 配置服务器复制
2.1. 源码安装
我的安装方法是以源码编译的方式进行的,以root用户进行安装。安装所需软件如下:
openldap-2.1.29
Berkeley DB 4.2.52
具体的安装步骤如下:
由于openldap需要Berkeley DB来存放数据,所以需先安装Berkeley DB 4.2.52,可到它的网站下载,网址见上面。运行下面的命令解压:
# tar -zxvf db-4.2.52.tar.gz
解完压后,会生成一个db-4.2.52目录,进行该目录下的build_unix目录。执行以下命令进行配置安装。
# ../dist/configure# make# make install
也是按linux源码安装的三步曲完成,没有什么好说的了。该软件默认是安装在/usr/local/BerkeleyDB.4.2目录下。安装完成后,要把/usr/local/BerkeleyDB.4.2/lib的库路径加到/etc/ld.so.conf文件内,添加完成后执行一次ldconfig,使配置文件生效。这样编译openldap时才能找到相应的库文件。这样资料库就安装完成了,接下来可以安装openldap了。 ld.so.conf是什么东西?它就是系统动态链接库的配置文件。此文件内,存放着可被LINUX共享的动态链接库所在目录的名字(系统目录/lib, /usr/lib除外),各个目录名间以空白字符(空格,换行等)或冒号或逗号分隔。一般的LINUX发行版中,此文件均含一个共享目录 /usr/X11R6/lib,为X window窗口系统的动态链接库所在的目录。 ldconfig是它的管理命令,具体操作方法可查询man手册,这里就不细讲了。
到openldap官方网站下载最新的稳定版源码,并解压。查看INSTALLT 和README文档,这个很重要,因为安装方法和一些注意事项都在里面有介绍。认真弄明白文档内容能节省你不少的安装调试时间。这也是开源软件的一个特点,给用户提供了最大的灵活性和可配置性。但也增加了系统安装配置的难度,需要有相关的文档配置说明和指导。在官方网站上还有详细的帮助文件,在整个系统配置中需要经常查询。
# tar -zxvf openldap-stable-20040329.tgz
解压完成后,会生成一个openldap-2.1.29目录。进行该目录,执行以下命令进行配置安装。
# env CPPFLAGS="-I/usr/local/BerkeleyDB.4.2/include" LDFLAGS="-L/usr/local/BerkeleyDB.4.2/lib" ./configure --prefix=/usr/local/openldap --enable-ldbm
注意以上配置语句,要设置资料库的include和lib路径,否则在配置到资料库相关内容时会提示Berkeley DB版本不兼容,并中断配置。如果没有--enable-ldbm选项,在make test时会提示ldbm找不到。为了减少出错,还是加上为好。
#make depens#make#make test
在make test阶段要花费较长时间进行测试,好像有16项吧。你可以放松一下,上上网,聊聊天,听听歌,呵呵,开玩笑了,这个时间应该是最紧张的了。成与不成就看这下的了,如果没问题就可安装了。
#make install
通过配置命令可以看出,我们把openldap安装到/usr/local/openldap目录下。建议以源码安装的软件都放到独立的目录下,不要放到软件默认的目录。好处是方便管理和控制,所有文件在统一的目录下,卸载软件只要删除整个目录就可以了。
安装完相关软件后就可以着手配置了。Berkeley DB资料库没什么好配置的。主要是配置openldap 服务。配置文件在软件的安装目录的etc/openldap下,有四个文件,主要的是slapd.conf and ldap.conf,其它两个是backup文件。首先,我们先来配置slapd.conf文档。系统默认的slapd.conf文件如下:
# $OpenLDAP: pkg/ldap/servers/slapd/slapd.conf,v 1.23.2.8 2003/05/24 23:19:14 kurt Exp $# # See slapd.conf(5) for details on configuration options.# This file should NOT be world readable. # include /usr/local/openldap/etc/openldap/schema/core.schema #设置schema配置文档包含# Define global ACLs to disable default read access.# Do not enable referrals until AFTER you have a working directory# service AND an understanding of referrals.#referral ldap://root.openldap.orgpidfile /usr/local/openldap/var/slapd.pid #设置pid和args文档位置argsfile /usr/local/openldap/var/slapd.args# Load dynamic backend modules:# modulepath /usr/local/openldap/libexec/openldap# moduleload back_bdb.la # moduleload back_ldap.la# moduleload back_ldbm.la # moduleload back_passwd.la# moduleload back_shell.la# Sample security restrictions # Require integrity protection (prevent hijacking)# Require 112-bit (3DES or better) encryption for updates# Require 63-bit encryption for simple bind# security ssf=1 update_ssf=112 simple_bind=64# Sample access control policy: # Root DSE: allow anyone to read it# Subschema (sub)entry DSE: allow anyone to read it# Other DSEs: # Subschema (sub)entry DSE: allow anyone to read it# Other DSEs:# Allow self write access# Allow authenticated users read access# Allow anonymous users to authenticate# Directives needed to implement policy:# access to dn.base="" by * read# access to dn.base="cn=Subschema" by * read# access to *# by self write# by users read# by anonymous auth## if no access controls are present, the default policy is:# Allow read by all## rootdn can always write!######################################################################## ldbm database definitions#######################################################################database bdb #设置使用的资料库,也可用lbdm。suffix "dc=my-domain,dc=com" #设置目录后缀rootdn "cn=Manager,dc=my-domain,dc=com" #设置目录管理员# Cleartext passwords, especially for the rootdn, should# be avoid. See slappasswd(8) and slapd.conf(5) for details.# Use of strong authentication encouraged.rootpw secret #设置管理密码,这里用了明文的“secret”密码。这样设置不安全,需使用加密的密码,下面会讲到如何设置加密密码。# The database directory MUST exist prior to running slapd AND # should only be accessible by the slapd and slap tools.# Mode 700 recommended.directory /usr/local/openldap/var/openldap-data #设置资料库路径# Indices to maintainindex objectClass eq #设置目录项索引
要服务器正常动作,要修改一些始初参数和设置,修改后的配置文档如下:
# $OpenLDAP: pkg/ldap/servers/slapd/slapd.conf,v 1.23.2.8 2003/05/24 23:19:14 kurt Exp $## See slapd.conf(5) for details on configuration options.# This file should NOT be world readable.##为了有效使用目录服务,包含相关的文件。注意,在包含文件时是要按一定顺序的,因为#文件里的属性存在依赖关系。如果顺序不对,服务器启动不了,文档间的依赖关系在文档#中都有说明,请仔细查看一下。如果懒得看也可以按我的顺序。include /usr/local/openldap/etc/openldap/schema/core.schemainclude /usr/local/openldap/etc/openldap/schema/corba.schemainclude /usr/local/openldap/etc/openldap/schema/cosine.schemainclude /usr/local/openldap/etc/openldap/schema/inetorgperson.schema include /usr/local/openldap/etc/openldap/schema/misc.schema include /usr/local/openldap/etc/openldap/schema/openldap.schemainclude /usr/local/openldap/etc/openldap/schema/nis.schemainclude /usr/local/openldap/etc/openldap/schema/samba.schema# Define global ACLs to disable default read access.# Do not enable referrals until AFTER you have a working directory# service AND an understanding of referrals.#referral ldap://root.openldap.orgpidfile /usr/local/openldap/var/slapd.pidargsfile /usr/local/openldap/var/slapd.argsloglevel 1 #增加了日志功能,需修改syslog配置文件,在文件中增加一项:local4.* /var/log/ldap.log日志级别定义可查相官方网站的文档。#1级记录的信息很多,可用于调试。# Load dynamic backend modules:# modulepath /usr/local/openldap/libexec/openldap# moduleload back_bdb.la# moduleload back_ldap.la# moduleload back_ldbm.la# moduleload back_passwd.la# moduleload back_shell.la# Sample security restrictions# Require integrity protection (prevent hijacking)# Require 112-bit (3DES or better) encryption for updates# Require 63-bit encryption for simple bind# security ssf=1 update_ssf=112 simple_bind=64# Sample access control policy:# Root DSE: allow anyone to read it# Subschema (sub)entry DSE: allow anyone to read it# Other DSEs:# Allow self write access# Allow authenticated users read access# Allow anonymous users to authenticate# Directives needed to implement policy:# access to dn.base="" by * read# access to dn.base="cn=Subschema" by * read# access to *# by self write# by users read# by anonymous auth## if no access controls are present, the default policy is:# Allow read by all## rootdn can always write!######################################################################## ldbm database definitions#######################################################################database bdbsuffix "dc=it,dc=com"#改成你自已的目录后缀,rootdn "cn=root,dc=it,dc=com"#设置root为管理员,与linux的root没有什么关系。# Cleartext passwords, especially for the rootdn, should# be avoid. See slappasswd(8) and slapd.conf(5) for details.# Use of strong authentication encouraged.rootpw {MD5}mjkiuPt0wXhpxxkdiOOO+0000000AKq0by#设置root密码,用MD5加密。密码串用slappasswd -h {MD5}指令生成# The database directory MUST exist prior to running slapd AND # should only be accessible by the slapd and slap tools.# Mode 700 recommended.directory /usr/local/openldap/var/openldap-data # Indices to maintainindex objectClass eq#这里可根据你的需要设置相关索引,以加快查询速度。具体内容可查询官方网站管理手册。#ACL configure以下内容定义访问控制access to attr=userPassworduserPassword#只能由自已修改,有效验证用户查询。 by self write by anonymous authaccess to attr=mail by dn="cn=root,dc=it,dc=tigerhead" writemail#只能由自已修改,有效验证用户查询。 by self write by anonymous authaccess to dn=".*,dc=it,dc=tigerhead"#允许所有人查询没受控制访问限制的信息。 by self write by * read
到现在为止,服务器基本就配置完成了,可以启动了,服务器程序是位于安装目录的libexec下的slapd程序。注意,不是 sldap哦。ok,到现在为止,服务器基本就配置完成了,可以启动了,服务器程序是位于安装目录的libexec下的slapd程序。注意,不是 sldap哦。启动服务器执行以下命令:
# ./slapd
如果没有提示什么出错信息,直接返回shell状态,就说明服务器正常启动了,你可以查询日志或用ps -aux查看。或用以下命令查询服务器:
ldapsearch -x -b '' -s base '(objectclass=*)' namingContexts
如果命令执行成功,返回一些信息,则说明服务器正常运行了。如果启动不成功,它会提示一些出错信息,多数是slapd.conf配置出错。回头仔细核查一下配置文档。
客户端配置文档是ldap.conf。该文档相当简单,其实不用配置也能正常操作。
# $OpenLDAP: pkg/ldap/libraries/libldap/ldap.conf,v 1.9 2000/09/04 19:57:01 kurt Exp $## LDAP Defaults## See ldap.conf(5) for details# This file should be world readable but not world writable.BASE dc=it, dc=com设置目录起点#URI ldap://ldap.example.com ldap://ldap-master.example.com:666#SIZELIMIT 12#TIMELIMIT 15#DEREF never
2.2. 数据录入
服务器正常运作后,就可以录入信息了。信息的录入有三种方法,一种是手工录入,一种是.ldif文件格式录入,一种是脚本自动录入。我们先从最基础的手工录入方式开始介绍,了解录入信息的格式。明白了手工录入的格式,其它两种方式都很容易明白。信息录入用到ldapadd这个程序。可在安装目录的bin目录下找到。
2.2.1. 手动录入方法
第一步是要建立DN:
# ldapadd -x -D 'cn=root,dc=it,dc=com' -Wdn: dc=it,dc=comobjectClass: dcObjectobjectClass: organizationdc: ito: Corporationdescription: d Corporation注意:如果你用复制/粘贴功能把以上内容拷贝过去,一定要注意每行后面不要有空格,建议还是手工输入,按Ctrl+d存盘。
第二步是建立RDN:
# ldapadd -x -D 'cn=root,dc=it,dc=com' -W #-x表示用简单验证,-D表示指定目录,-W表示弹出密码输入提示
输入密码,这里的密码是在配置文件中rootpw项设置的密码,不是操作系统中root用户的密码。验证通过后就可输入以下内容:
dn: uid=qq,dc=it,dc=comobjectClass: personobjectClass: organizationalPersonobjectClass: inetOrgPersonuid: qqcn: qqsn: qqtelephoneNumber: 138888888description: openldap testtelexNumber: tex-8888888street: my streetpostOfficeBox: postofficeboxdisplayName: qqdisplayhomePhone: home1111111mobile: mobile99999mail:qq@qq.com
输入完所有信息后,按Ctrl+d结束存盘。如果出现出错信息,请查一下对象类和属性的对应关系有没有错或输入失误。初学者就容易出错的地方是对象类和属性的对应关系没有处理好。对象类和属性是在schema文档中定义的。它们之间的关系是这样的,对象类中有些属性是必选的,有些属性是可选的。录入信息的属性必须在对象类中有定义才能用。
输入以下命令可查询到刚才输入的信息。
# ldapsearch -x -b 'dc=it,dc=com' -b选项是设置目录起点,如果设置了客户端的BASE配置参数,该项可不用。
如果按以上配置文件设置了acl,用上面的查询命令是查询不到受保护的内容的。如上面的userPassword and mail。要查询到这些受限内容,需要通过验证才可以:
# ldapsearch -x -LLL -h it.com -b 'dc=it,dc=com' -D 'uid=qq,dc=it,dc=com' -W 'uid=qq'接着提示输入密码。输入userPassword的密码回车,所有信息就都出来了。
2.2.2. 文件方式
.ldif文件方式也就是把以上手工输入的内容先写入一个.ldif文件中,然后,用ldapadd命令的-f参数导入。
# ldapadd -x -D "cn=root,dc=it,dc=com" -W -f test.ldif
一个完整的global.ldif文件例子:
dn: dc=info, dc=netobjectClass: topobjectClass: organizationo: info.netdn: ou=People, dc=info, dc=netobjectClass: topobjectClass: organizationalUnitou: Peopledescription: User Infodn: cn=Admin, dc=info, dc=netobjectClass: topobjectClass: personobjectClass: organizationalPersoncn: Adminsn: AdminuserPassword: Admindescription: Administrator for info.netdn: id=1, ou=People, dc=info, dc=netobjectclass: topobjectclass: InfoPersonid: 1username: 张三tel:021-63138990card_id:ABC001
我们也可用slapadd命令来导入数据。该命令可以导入包含一些系统信息的ldif文件,如:
dn: dc=it,dc=comobjectClass: topobjectClass: dcObjectobjectClass: organizationdc: itstructuralObjectClass: organizationentryUUID: d97b06da-d77e-1028-9866-d4ec7ac00d12creatorsName: cn=anonymous #系统信息createTimestamp: 20041201005115Z #系统信息o:: 5bm/5bee5biC6JmO5aS055S15rGg6ZuG5Zui5pyJ6ZmQ5YWs5Y+4userPassword:: e01ENX14TXBDT0tDNUk0SU56RkNhYjNXRW13PT0=entryCSN: 2004120603:50:08Z#0x0001#0#0000 #系统信息modifiersName: cn=admin,dc=it,dc=com #系统信息modifyTimestamp: 20041206035008Z #系统信息
再次提醒,注意每行后面不要留有空格。
2.2.3. 脚本方式
脚本录入方式需要自已编写脚本,或到网上下载。有一个用PHP写的LDAP管理工具不错,叫phpLDAPadmin。可以到以下网址下载:http://phpldapadmin.sourceforge.net。安装方法也很简单,只要解压出来,拷贝到apache的web目录下,按说明配置一下设定文档,就ok了。
2.3. 常用命令介绍
接着为大家介绍一下几个常用的ldap命令,如果你用了phpLDAPadmin程序,其实它已经有一个很好的图形介面帮你完成这些命令了。但了解一下还是对你还是很有益的,因为命令方法才是最根本的。
删除命令ldapdelete
# ldapdelete -x -D 'cn=root,dc=it,dc=com' -W 'uid=qq1,dc=it,dc=com'
重新索引ldap数据库命令slapindex
# slapindex -f slapd.conf
设置使用者密码,当然了,你的用户需要有userPassword项了。
#ldappasswd -x -D "cn=root,dc=it,dc=com" -W "uid=qq1,dc=it,dc=com" -S New password: Re-enter new password: Enter bind password: Result: Success (0)
"Enter bind password" 是 "cn=root,dc=it,dc=com"管理员的密码。
管理员密码更改
#slappasswd New password Re-enter new password {SSHA}83DJ4KVwqlk1uh9k2uDb8+NT1U4RgkEs
接下再拷贝到 path/to/sldap.conf 的 rootpw 即可,重启使用配置文件生效
通过ldapmodify修改目录内容
# ldapmodify -x -D "cn=root,dc=it,dc=com" -W -f modify.ldif
通过ldif文件修改ldap数据,ldif文件格式如下:
dn: cn=qq,dc=it,dc=comchangetype: modifyreplace: mailmail: modme@example.com-add: titletitle: Grand Poobah-add: jpegPhotojpegPhoto:< file:///tmp/modme.jpeg-delete: description-
2.4. 启用sasl验证
前提是你在系统中安装了sasl认证库,并在编译openldap时支持它,默认就支持了。到http://asg.web.cmu.edu/cyrus下载。安装方法见我写的sendmail安装笔记。安装好之后,需要在sasl中建立相应的帐号,用以下命令可完成。
# saslpasswd2 -c test
接着配置slapd.conf文件,加入以下内容。
sasl-regexp uid=(.*),cn=.*,cn=auth uid=$1,dc=it,dc=com
重启服务器使配置文件生效。这个配置是最大权限的配置,如果要细化请查阅相关文档。用以下命令测试。
# ldapsearch -U qq -b 'uid=qq,dc=it,dc=com' -D 'dc=it,dc=com' -Y DIGEST-MD5
采用digest-md5验证,提示密码,输入saslpasswd2的密码。
2.5. 配置服务器复制
在一些关键的应用场合,我们需设置多个ldap服务器实例,且数据要保持同步。当一台服务器出现故障或被黑客攻击时,我们就能继续保持应用的正常运行。通过 DNS的轮流查询功能,还能实现服务器的负载均衡,提高响应速度。在openldap中有一个slurpd进程,利用slurpd进程可帮助我们实现多台 ldap服务器数据的同步功能。下面简单介绍一下主、从ldap服务器的配置。
slurpd运行在主服务器上,它能把主服务器上的变化通过 LDAP协议传送到从服务器上。从服务器上的变化不能传送到主服务器上,也就是说是单向同步的。主从服务器的版本最好一样,以减少兼容性问题。主从服务器的安装方法是一样的,关键是配置文件有所不同。我的操作系统是debian sarge,在确保主从服务器能正常运行的前提下进行以下配置:
首先,把主从服务器关闭。通过以下三步操作静态同步主从服务器上的数据:
把主服务器上/var/lib/ldap目录下的所有数据库文件全部拷贝到从服务器的同目录中,覆盖原有文件。
把主服务器上的/etc/ldap/schema目录下的所有schema文件拷贝到从服务器的同目录中,覆盖原有文件。
把主服务器上/etc/ldap/slapd.conf文件拷贝到从服务器的同目录中,覆盖原有文件。
配置主服务器上的slapd.conf文件,取消replogfile指令前的注释符号,取消后的结果如下:
# Where to store the replica logs for database #1replogfile /var/lib/ldap/replog
增加replica指令,如:
#replace configreplica uri=ldap://192.168.6.195:389 #指定从服务器主机名和端口号 binddn="cn=admin,dc=com" #指定需同步的DN的管理员 bindmethod=simple credentials=1 #指定验证方式和需同步的DN的管理员密码
配置从服务器上的slapd.conf文件,增加updatedn指令,如:
updatedn "cn=admin,dc=com" #与主服务器的binddn对应
在从服务器的配置文件中,不要包含replica和replogfile指令。
先启动主服务器的slapd和slurpd,再启动从服务器的slapd。
配置完成后,我们可测试一下,在主服务器上修改一个目录项,在从服务器上可查看目录项的数据已同步。
Chapter 3. 管理工具
Table of Contents
3.1. phpldapadmin
3.2. gq
3.3. CPU
3.4. JXplore
3.5. LAM
开源的目录服务管理工具有很多,包括phpldapadmin,gq,CPU,JXplore等。这些工具可帮助我们方便维护目录服务器上的数据。这些工具各有优缺点,下面简要介绍一下,详细的内容可参考相关的官方网站。
3.1. phpldapadmin
3.2. gq
3.3. CPU
3.4. JXplore
3.5. LAM
官方网站:http://lam.sourceforge.net/index.htm
Chapter 4. HowTo
Table of Contents
4.1. 禁止整个服务器的匿名访问
4.1. 禁止整个服务器的匿名访问
在slapd.conf配置文件中加入disallow bind_anon即可。
Table of Contents
1. 目录服务简介
1.1. X.500和LDAP
1.2. LDAP产品
2. OpenLDAP安装笔记
2.1. 源码安装
2.2. 数据录入
2.2.1. 手动录入方法
2.2.2. 文件方式
2.2.3. 脚本方式
2.3. 常用命令介绍
2.4. 启用sasl验证
2.5. 配置服务器复制
3. 管理工具
3.1. phpldapadmin
3.2. gq
3.3. CPU
3.4. JXplore
3.5. LAM
4. HowTo
4.1. 禁止整个服务器的匿名访问
Chapter 1. 目录服务简介
Table of Contents
1.1. X.500和LDAP
1.2. LDAP产品
目录是一个为查询、浏览和搜索而优化的专业分布式数据库,它成树状结构组织数据,就好象Linux/Unix系统中的文件目录一样。目录数据库和关系数据库不同,它有优异的读性能,但写性能差,并且没有事务处理、回滚等复杂功能,不适于存储修改频繁的数据。所以目录天生是用来查询的,就好象它的名字一样。目录服务是由目录数据库和一套访问协议组成的系统。类似以下的信息适合储存在目录中:
企业员工和企业客户之类人员信息;
公用证书和安全密钥;
邮件地址、网址、IP等电脑信息;
电脑配置信息。
...
1.1. X.500和LDAP
现在国际上的目录服务标准有两个,一个是较早的X.500标准,一个是较新的LDAP标准。
X.500是一个协议族,由一系列的概念和协议组成,包括:
X.501是模型定义,定义目录服务的基本模型和概念;
X.509是认证框架,定义如何处理目录服务中客户和服务器认证;
X.511是抽象服务定义,定义X.500提供的功能性服务;
X.518是分布式操作过程定义,定义如何跨平台处理目录服务;
X.519 是协议规范,定义了X.500协议,包括DAP(Directory Access Protocol,目录访问协议)、DSP(Directory System Protocol,目录系统协议)、DOP(Directory Operator Protocol,目录操作绑定协议)、DISP(Directory Information Shadowing Protocol,目录信息阴影协议 );
X.520定义属性类型要求;
X.521定义对象类型;
X.525定义如果在目录服务器间复制内容。
X.500标准中定义了很多内容,包括:
定义了信息模型,确定目录中信息的格式和字符集,如何在项中表示目录信息(定义对象类、属性等模式);
定义命名空间,确定对信息进行的组织和引用,如何组织和命名项-目录信息树DIT和层次命名模型;
定义功能模型,确定可以在信息上执行的操作;
定义认证框架,保证目录中信息的安全,如何实现目录中信息的授权保护-访问控制模型;
定义分布操作模型,确定数据如何分布和如何对分布数据执行操作,如何将全局目录树划分为管理域,以便管理。
定义客户端与服务器之间的通信的各种协议。
由于X.500较复杂,且需严格遵照OSI七层协议模型。造成应用开发较困难。所以开发了LDAP,以便在INTERNET上使用。
LDAP协议于1993年获批准,产生LDAPv1版,1997年发布最新的LDAPv3版,该版本是LDAP协议发展的一个里程碑,它作为X.500的简化版提供了很多自有的特性,使LDAP功能更为完备,具有更强大的生命力。
LDAP也是一个协议族,包含以下内容:
RFC 2251--LDAPv3核心协议,定义了LDAPv3协议的基本模型和基本操作;
RFC 2252--定义LDAPv3基本数据模式(Schema)(包括语法、匹配规则、属性类型和对象类)以及标准的系统数据模式;
RFC 2253--定义LDAPv3中的分辩名(DN)表达式;
RFC 2254--定义了LDAPv3中的过滤表达式;
RFC 2255--定义LDAPv3统一资源地址的格式;
RFC 2256--定义LDAPv3中使用X.500的Schema列表;
RFC 2829--定义了LDAPv3中的认证方式;
RFC 2830--定义了如何通过扩展使用TLS服务;
RFC 1823--定义了C的LDAP客户端API开发接口;
RFC 2847--定义了LDAP数据导入、导出文件接口LDIF。
这些协议定义了LDAP的内容,包括:
定义了一个信息模型,确定了LDAP目录中信息的格式和字符集,如何表示目录信息(定义对象类、属性、匹配规则和语法等模式);
定义了命名空间,确定信息的组织方式--目录树DIT,以DN和RDN为基础的命名方式,以及LDAP信息的Internet表示方式;
定义了功能模型,确定在可以在信息上执行的操作及API。
定义了安全框架,保证目录中信息的安全,定义匿名、用户名/密码、SASL等多种认证方式,以及与TLS结合的通讯保护框架;
定义分布式操作模型,基于指引方式的分布式操作框架;
定义了LDAP扩展框架。
1.2. LDAP产品
现在市场上有关LDAP的产品已有很多,各大软件公司都在他们的产品中集成了LDAP服务,如Microsoft的ActiveDirectory、 Lotus的Domino Directory、IBM的WebSphere中也集成了LDAP服务。LDAP的开源实现是OpenLDAP,它比商业产品一点也不差,而且源码开放。
Chapter 2. OpenLDAP安装笔记
Table of Contents
2.1. 源码安装
2.2. 数据录入
2.2.1. 手动录入方法
2.2.2. 文件方式
2.2.3. 脚本方式
2.3. 常用命令介绍
2.4. 启用sasl验证
2.5. 配置服务器复制
2.1. 源码安装
我的安装方法是以源码编译的方式进行的,以root用户进行安装。安装所需软件如下:
openldap-2.1.29
Berkeley DB 4.2.52
具体的安装步骤如下:
由于openldap需要Berkeley DB来存放数据,所以需先安装Berkeley DB 4.2.52,可到它的网站下载,网址见上面。运行下面的命令解压:
# tar -zxvf db-4.2.52.tar.gz
解完压后,会生成一个db-4.2.52目录,进行该目录下的build_unix目录。执行以下命令进行配置安装。
# ../dist/configure# make# make install
也是按linux源码安装的三步曲完成,没有什么好说的了。该软件默认是安装在/usr/local/BerkeleyDB.4.2目录下。安装完成后,要把/usr/local/BerkeleyDB.4.2/lib的库路径加到/etc/ld.so.conf文件内,添加完成后执行一次ldconfig,使配置文件生效。这样编译openldap时才能找到相应的库文件。这样资料库就安装完成了,接下来可以安装openldap了。 ld.so.conf是什么东西?它就是系统动态链接库的配置文件。此文件内,存放着可被LINUX共享的动态链接库所在目录的名字(系统目录/lib, /usr/lib除外),各个目录名间以空白字符(空格,换行等)或冒号或逗号分隔。一般的LINUX发行版中,此文件均含一个共享目录 /usr/X11R6/lib,为X window窗口系统的动态链接库所在的目录。 ldconfig是它的管理命令,具体操作方法可查询man手册,这里就不细讲了。
到openldap官方网站下载最新的稳定版源码,并解压。查看INSTALLT 和README文档,这个很重要,因为安装方法和一些注意事项都在里面有介绍。认真弄明白文档内容能节省你不少的安装调试时间。这也是开源软件的一个特点,给用户提供了最大的灵活性和可配置性。但也增加了系统安装配置的难度,需要有相关的文档配置说明和指导。在官方网站上还有详细的帮助文件,在整个系统配置中需要经常查询。
# tar -zxvf openldap-stable-20040329.tgz
解压完成后,会生成一个openldap-2.1.29目录。进行该目录,执行以下命令进行配置安装。
# env CPPFLAGS="-I/usr/local/BerkeleyDB.4.2/include" LDFLAGS="-L/usr/local/BerkeleyDB.4.2/lib" ./configure --prefix=/usr/local/openldap --enable-ldbm
注意以上配置语句,要设置资料库的include和lib路径,否则在配置到资料库相关内容时会提示Berkeley DB版本不兼容,并中断配置。如果没有--enable-ldbm选项,在make test时会提示ldbm找不到。为了减少出错,还是加上为好。
#make depens#make#make test
在make test阶段要花费较长时间进行测试,好像有16项吧。你可以放松一下,上上网,聊聊天,听听歌,呵呵,开玩笑了,这个时间应该是最紧张的了。成与不成就看这下的了,如果没问题就可安装了。
#make install
通过配置命令可以看出,我们把openldap安装到/usr/local/openldap目录下。建议以源码安装的软件都放到独立的目录下,不要放到软件默认的目录。好处是方便管理和控制,所有文件在统一的目录下,卸载软件只要删除整个目录就可以了。
安装完相关软件后就可以着手配置了。Berkeley DB资料库没什么好配置的。主要是配置openldap 服务。配置文件在软件的安装目录的etc/openldap下,有四个文件,主要的是slapd.conf and ldap.conf,其它两个是backup文件。首先,我们先来配置slapd.conf文档。系统默认的slapd.conf文件如下:
# $OpenLDAP: pkg/ldap/servers/slapd/slapd.conf,v 1.23.2.8 2003/05/24 23:19:14 kurt Exp $# # See slapd.conf(5) for details on configuration options.# This file should NOT be world readable. # include /usr/local/openldap/etc/openldap/schema/core.schema #设置schema配置文档包含# Define global ACLs to disable default read access.# Do not enable referrals until AFTER you have a working directory# service AND an understanding of referrals.#referral ldap://root.openldap.orgpidfile /usr/local/openldap/var/slapd.pid #设置pid和args文档位置argsfile /usr/local/openldap/var/slapd.args# Load dynamic backend modules:# modulepath /usr/local/openldap/libexec/openldap# moduleload back_bdb.la # moduleload back_ldap.la# moduleload back_ldbm.la # moduleload back_passwd.la# moduleload back_shell.la# Sample security restrictions # Require integrity protection (prevent hijacking)# Require 112-bit (3DES or better) encryption for updates# Require 63-bit encryption for simple bind# security ssf=1 update_ssf=112 simple_bind=64# Sample access control policy: # Root DSE: allow anyone to read it# Subschema (sub)entry DSE: allow anyone to read it# Other DSEs: # Subschema (sub)entry DSE: allow anyone to read it# Other DSEs:# Allow self write access# Allow authenticated users read access# Allow anonymous users to authenticate# Directives needed to implement policy:# access to dn.base="" by * read# access to dn.base="cn=Subschema" by * read# access to *# by self write# by users read# by anonymous auth## if no access controls are present, the default policy is:# Allow read by all## rootdn can always write!######################################################################## ldbm database definitions#######################################################################database bdb #设置使用的资料库,也可用lbdm。suffix "dc=my-domain,dc=com" #设置目录后缀rootdn "cn=Manager,dc=my-domain,dc=com" #设置目录管理员# Cleartext passwords, especially for the rootdn, should# be avoid. See slappasswd(8) and slapd.conf(5) for details.# Use of strong authentication encouraged.rootpw secret #设置管理密码,这里用了明文的“secret”密码。这样设置不安全,需使用加密的密码,下面会讲到如何设置加密密码。# The database directory MUST exist prior to running slapd AND # should only be accessible by the slapd and slap tools.# Mode 700 recommended.directory /usr/local/openldap/var/openldap-data #设置资料库路径# Indices to maintainindex objectClass eq #设置目录项索引
要服务器正常动作,要修改一些始初参数和设置,修改后的配置文档如下:
# $OpenLDAP: pkg/ldap/servers/slapd/slapd.conf,v 1.23.2.8 2003/05/24 23:19:14 kurt Exp $## See slapd.conf(5) for details on configuration options.# This file should NOT be world readable.##为了有效使用目录服务,包含相关的文件。注意,在包含文件时是要按一定顺序的,因为#文件里的属性存在依赖关系。如果顺序不对,服务器启动不了,文档间的依赖关系在文档#中都有说明,请仔细查看一下。如果懒得看也可以按我的顺序。include /usr/local/openldap/etc/openldap/schema/core.schemainclude /usr/local/openldap/etc/openldap/schema/corba.schemainclude /usr/local/openldap/etc/openldap/schema/cosine.schemainclude /usr/local/openldap/etc/openldap/schema/inetorgperson.schema include /usr/local/openldap/etc/openldap/schema/misc.schema include /usr/local/openldap/etc/openldap/schema/openldap.schemainclude /usr/local/openldap/etc/openldap/schema/nis.schemainclude /usr/local/openldap/etc/openldap/schema/samba.schema# Define global ACLs to disable default read access.# Do not enable referrals until AFTER you have a working directory# service AND an understanding of referrals.#referral ldap://root.openldap.orgpidfile /usr/local/openldap/var/slapd.pidargsfile /usr/local/openldap/var/slapd.argsloglevel 1 #增加了日志功能,需修改syslog配置文件,在文件中增加一项:local4.* /var/log/ldap.log日志级别定义可查相官方网站的文档。#1级记录的信息很多,可用于调试。# Load dynamic backend modules:# modulepath /usr/local/openldap/libexec/openldap# moduleload back_bdb.la# moduleload back_ldap.la# moduleload back_ldbm.la# moduleload back_passwd.la# moduleload back_shell.la# Sample security restrictions# Require integrity protection (prevent hijacking)# Require 112-bit (3DES or better) encryption for updates# Require 63-bit encryption for simple bind# security ssf=1 update_ssf=112 simple_bind=64# Sample access control policy:# Root DSE: allow anyone to read it# Subschema (sub)entry DSE: allow anyone to read it# Other DSEs:# Allow self write access# Allow authenticated users read access# Allow anonymous users to authenticate# Directives needed to implement policy:# access to dn.base="" by * read# access to dn.base="cn=Subschema" by * read# access to *# by self write# by users read# by anonymous auth## if no access controls are present, the default policy is:# Allow read by all## rootdn can always write!######################################################################## ldbm database definitions#######################################################################database bdbsuffix "dc=it,dc=com"#改成你自已的目录后缀,rootdn "cn=root,dc=it,dc=com"#设置root为管理员,与linux的root没有什么关系。# Cleartext passwords, especially for the rootdn, should# be avoid. See slappasswd(8) and slapd.conf(5) for details.# Use of strong authentication encouraged.rootpw {MD5}mjkiuPt0wXhpxxkdiOOO+0000000AKq0by#设置root密码,用MD5加密。密码串用slappasswd -h {MD5}指令生成# The database directory MUST exist prior to running slapd AND # should only be accessible by the slapd and slap tools.# Mode 700 recommended.directory /usr/local/openldap/var/openldap-data # Indices to maintainindex objectClass eq#这里可根据你的需要设置相关索引,以加快查询速度。具体内容可查询官方网站管理手册。#ACL configure以下内容定义访问控制access to attr=userPassworduserPassword#只能由自已修改,有效验证用户查询。 by self write by anonymous authaccess to attr=mail by dn="cn=root,dc=it,dc=tigerhead" writemail#只能由自已修改,有效验证用户查询。 by self write by anonymous authaccess to dn=".*,dc=it,dc=tigerhead"#允许所有人查询没受控制访问限制的信息。 by self write by * read
到现在为止,服务器基本就配置完成了,可以启动了,服务器程序是位于安装目录的libexec下的slapd程序。注意,不是 sldap哦。ok,到现在为止,服务器基本就配置完成了,可以启动了,服务器程序是位于安装目录的libexec下的slapd程序。注意,不是 sldap哦。启动服务器执行以下命令:
# ./slapd
如果没有提示什么出错信息,直接返回shell状态,就说明服务器正常启动了,你可以查询日志或用ps -aux查看。或用以下命令查询服务器:
ldapsearch -x -b '' -s base '(objectclass=*)' namingContexts
如果命令执行成功,返回一些信息,则说明服务器正常运行了。如果启动不成功,它会提示一些出错信息,多数是slapd.conf配置出错。回头仔细核查一下配置文档。
客户端配置文档是ldap.conf。该文档相当简单,其实不用配置也能正常操作。
# $OpenLDAP: pkg/ldap/libraries/libldap/ldap.conf,v 1.9 2000/09/04 19:57:01 kurt Exp $## LDAP Defaults## See ldap.conf(5) for details# This file should be world readable but not world writable.BASE dc=it, dc=com设置目录起点#URI ldap://ldap.example.com ldap://ldap-master.example.com:666#SIZELIMIT 12#TIMELIMIT 15#DEREF never
2.2. 数据录入
服务器正常运作后,就可以录入信息了。信息的录入有三种方法,一种是手工录入,一种是.ldif文件格式录入,一种是脚本自动录入。我们先从最基础的手工录入方式开始介绍,了解录入信息的格式。明白了手工录入的格式,其它两种方式都很容易明白。信息录入用到ldapadd这个程序。可在安装目录的bin目录下找到。
2.2.1. 手动录入方法
第一步是要建立DN:
# ldapadd -x -D 'cn=root,dc=it,dc=com' -Wdn: dc=it,dc=comobjectClass: dcObjectobjectClass: organizationdc: ito: Corporationdescription: d Corporation注意:如果你用复制/粘贴功能把以上内容拷贝过去,一定要注意每行后面不要有空格,建议还是手工输入,按Ctrl+d存盘。
第二步是建立RDN:
# ldapadd -x -D 'cn=root,dc=it,dc=com' -W #-x表示用简单验证,-D表示指定目录,-W表示弹出密码输入提示
输入密码,这里的密码是在配置文件中rootpw项设置的密码,不是操作系统中root用户的密码。验证通过后就可输入以下内容:
dn: uid=qq,dc=it,dc=comobjectClass: personobjectClass: organizationalPersonobjectClass: inetOrgPersonuid: qqcn: qqsn: qqtelephoneNumber: 138888888description: openldap testtelexNumber: tex-8888888street: my streetpostOfficeBox: postofficeboxdisplayName: qqdisplayhomePhone: home1111111mobile: mobile99999mail:qq@qq.com
输入完所有信息后,按Ctrl+d结束存盘。如果出现出错信息,请查一下对象类和属性的对应关系有没有错或输入失误。初学者就容易出错的地方是对象类和属性的对应关系没有处理好。对象类和属性是在schema文档中定义的。它们之间的关系是这样的,对象类中有些属性是必选的,有些属性是可选的。录入信息的属性必须在对象类中有定义才能用。
输入以下命令可查询到刚才输入的信息。
# ldapsearch -x -b 'dc=it,dc=com' -b选项是设置目录起点,如果设置了客户端的BASE配置参数,该项可不用。
如果按以上配置文件设置了acl,用上面的查询命令是查询不到受保护的内容的。如上面的userPassword and mail。要查询到这些受限内容,需要通过验证才可以:
# ldapsearch -x -LLL -h it.com -b 'dc=it,dc=com' -D 'uid=qq,dc=it,dc=com' -W 'uid=qq'接着提示输入密码。输入userPassword的密码回车,所有信息就都出来了。
2.2.2. 文件方式
.ldif文件方式也就是把以上手工输入的内容先写入一个.ldif文件中,然后,用ldapadd命令的-f参数导入。
# ldapadd -x -D "cn=root,dc=it,dc=com" -W -f test.ldif
一个完整的global.ldif文件例子:
dn: dc=info, dc=netobjectClass: topobjectClass: organizationo: info.netdn: ou=People, dc=info, dc=netobjectClass: topobjectClass: organizationalUnitou: Peopledescription: User Infodn: cn=Admin, dc=info, dc=netobjectClass: topobjectClass: personobjectClass: organizationalPersoncn: Adminsn: AdminuserPassword: Admindescription: Administrator for info.netdn: id=1, ou=People, dc=info, dc=netobjectclass: topobjectclass: InfoPersonid: 1username: 张三tel:021-63138990card_id:ABC001
我们也可用slapadd命令来导入数据。该命令可以导入包含一些系统信息的ldif文件,如:
dn: dc=it,dc=comobjectClass: topobjectClass: dcObjectobjectClass: organizationdc: itstructuralObjectClass: organizationentryUUID: d97b06da-d77e-1028-9866-d4ec7ac00d12creatorsName: cn=anonymous #系统信息createTimestamp: 20041201005115Z #系统信息o:: 5bm/5bee5biC6JmO5aS055S15rGg6ZuG5Zui5pyJ6ZmQ5YWs5Y+4userPassword:: e01ENX14TXBDT0tDNUk0SU56RkNhYjNXRW13PT0=entryCSN: 2004120603:50:08Z#0x0001#0#0000 #系统信息modifiersName: cn=admin,dc=it,dc=com #系统信息modifyTimestamp: 20041206035008Z #系统信息
再次提醒,注意每行后面不要留有空格。
2.2.3. 脚本方式
脚本录入方式需要自已编写脚本,或到网上下载。有一个用PHP写的LDAP管理工具不错,叫phpLDAPadmin。可以到以下网址下载:http://phpldapadmin.sourceforge.net。安装方法也很简单,只要解压出来,拷贝到apache的web目录下,按说明配置一下设定文档,就ok了。
2.3. 常用命令介绍
接着为大家介绍一下几个常用的ldap命令,如果你用了phpLDAPadmin程序,其实它已经有一个很好的图形介面帮你完成这些命令了。但了解一下还是对你还是很有益的,因为命令方法才是最根本的。
删除命令ldapdelete
# ldapdelete -x -D 'cn=root,dc=it,dc=com' -W 'uid=qq1,dc=it,dc=com'
重新索引ldap数据库命令slapindex
# slapindex -f slapd.conf
设置使用者密码,当然了,你的用户需要有userPassword项了。
#ldappasswd -x -D "cn=root,dc=it,dc=com" -W "uid=qq1,dc=it,dc=com" -S New password: Re-enter new password: Enter bind password: Result: Success (0)
"Enter bind password" 是 "cn=root,dc=it,dc=com"管理员的密码。
管理员密码更改
#slappasswd New password Re-enter new password {SSHA}83DJ4KVwqlk1uh9k2uDb8+NT1U4RgkEs
接下再拷贝到 path/to/sldap.conf 的 rootpw 即可,重启使用配置文件生效
通过ldapmodify修改目录内容
# ldapmodify -x -D "cn=root,dc=it,dc=com" -W -f modify.ldif
通过ldif文件修改ldap数据,ldif文件格式如下:
dn: cn=qq,dc=it,dc=comchangetype: modifyreplace: mailmail: modme@example.com-add: titletitle: Grand Poobah-add: jpegPhotojpegPhoto:< file:///tmp/modme.jpeg-delete: description-
2.4. 启用sasl验证
前提是你在系统中安装了sasl认证库,并在编译openldap时支持它,默认就支持了。到http://asg.web.cmu.edu/cyrus下载。安装方法见我写的sendmail安装笔记。安装好之后,需要在sasl中建立相应的帐号,用以下命令可完成。
# saslpasswd2 -c test
接着配置slapd.conf文件,加入以下内容。
sasl-regexp uid=(.*),cn=.*,cn=auth uid=$1,dc=it,dc=com
重启服务器使配置文件生效。这个配置是最大权限的配置,如果要细化请查阅相关文档。用以下命令测试。
# ldapsearch -U qq -b 'uid=qq,dc=it,dc=com' -D 'dc=it,dc=com' -Y DIGEST-MD5
采用digest-md5验证,提示密码,输入saslpasswd2的密码。
2.5. 配置服务器复制
在一些关键的应用场合,我们需设置多个ldap服务器实例,且数据要保持同步。当一台服务器出现故障或被黑客攻击时,我们就能继续保持应用的正常运行。通过 DNS的轮流查询功能,还能实现服务器的负载均衡,提高响应速度。在openldap中有一个slurpd进程,利用slurpd进程可帮助我们实现多台 ldap服务器数据的同步功能。下面简单介绍一下主、从ldap服务器的配置。
slurpd运行在主服务器上,它能把主服务器上的变化通过 LDAP协议传送到从服务器上。从服务器上的变化不能传送到主服务器上,也就是说是单向同步的。主从服务器的版本最好一样,以减少兼容性问题。主从服务器的安装方法是一样的,关键是配置文件有所不同。我的操作系统是debian sarge,在确保主从服务器能正常运行的前提下进行以下配置:
首先,把主从服务器关闭。通过以下三步操作静态同步主从服务器上的数据:
把主服务器上/var/lib/ldap目录下的所有数据库文件全部拷贝到从服务器的同目录中,覆盖原有文件。
把主服务器上的/etc/ldap/schema目录下的所有schema文件拷贝到从服务器的同目录中,覆盖原有文件。
把主服务器上/etc/ldap/slapd.conf文件拷贝到从服务器的同目录中,覆盖原有文件。
配置主服务器上的slapd.conf文件,取消replogfile指令前的注释符号,取消后的结果如下:
# Where to store the replica logs for database #1replogfile /var/lib/ldap/replog
增加replica指令,如:
#replace configreplica uri=ldap://192.168.6.195:389 #指定从服务器主机名和端口号 binddn="cn=admin,dc=com" #指定需同步的DN的管理员 bindmethod=simple credentials=1 #指定验证方式和需同步的DN的管理员密码
配置从服务器上的slapd.conf文件,增加updatedn指令,如:
updatedn "cn=admin,dc=com" #与主服务器的binddn对应
在从服务器的配置文件中,不要包含replica和replogfile指令。
先启动主服务器的slapd和slurpd,再启动从服务器的slapd。
配置完成后,我们可测试一下,在主服务器上修改一个目录项,在从服务器上可查看目录项的数据已同步。
Chapter 3. 管理工具
Table of Contents
3.1. phpldapadmin
3.2. gq
3.3. CPU
3.4. JXplore
3.5. LAM
开源的目录服务管理工具有很多,包括phpldapadmin,gq,CPU,JXplore等。这些工具可帮助我们方便维护目录服务器上的数据。这些工具各有优缺点,下面简要介绍一下,详细的内容可参考相关的官方网站。
3.1. phpldapadmin
3.2. gq
3.3. CPU
3.4. JXplore
3.5. LAM
官方网站:http://lam.sourceforge.net/index.htm
Chapter 4. HowTo
Table of Contents
4.1. 禁止整个服务器的匿名访问
4.1. 禁止整个服务器的匿名访问
在slapd.conf配置文件中加入disallow bind_anon即可。
发表评论
-
AD新增用户默认禁用的解决办法
2013-02-21 16:56 2596ajax文件上传 博客http://aokunsang.ite ... -
LDAP成功配置一个集团组织机构案例(继续更新及深层研究中...)
2010-12-11 21:07 2800...LDAP成功配置案例(继续更新及深层研究) 正在进行 ... -
OpenLDAP 综合技术相关网站
2010-12-10 19:49 1363OpenLDAP下载 ( openldap-2.2.29 fo ... -
Openldap安装配置详细记录(Linux )
2010-12-10 19:45 4387#安装zlib # tar xvfz zlib-1.2.3.t ... -
LDAP快速入门
2010-12-01 15:11 12111. LDAP简介 LDAP(轻 ... -
解析LDAP的Schema(v3)
2010-12-01 13:59 27412. Abstract This documen ... -
LDAP之objectClass
2010-12-01 13:46 2449自定义schema的时候不仅要定义attributetype还 ... -
自定义OpenLDAP的schema
2010-12-01 13:44 2433自定义schema的时候要注意定义的名字不能和已有的名字重复, ... -
LDAP基本语法
2010-11-26 20:54 1794基本 LDAP 语法 • =(等 ... -
OpenLDAP+LdapBrowser配置
2010-11-22 09:44 14408相关软件下载: Berkeley-Db: http://dow ... -
LDAP
2010-11-07 12:52 964附件是LDAP相关jar包!!! -
Ldap安装配置
2010-10-22 21:49 2415linux下: 安装openldap ...
相关推荐
首先,我们来详细讲解OpenLDAP的安装过程: 1. **下载OpenLDAP**: 你需要从OpenLDAP的官方网站或者可靠的第三方源获取适合Windows系统的安装包。 2. **安装OpenLDAP**: 运行下载的安装程序,按照向导提示进行操作...
内涵openldap详细功能讲解,以及openldap的实际操作讲解。
6. **认证与授权**:讲解如何设置用户认证机制,如简单绑定、SASL(Simple Authentication and Security Layer)绑定,以及基于角色的访问控制(RBAC)。 7. **OpenLDAP复制与同步**:介绍多服务器部署时的复制策略...
此外,书中还会讲解如何使用OpenLDAP进行数据迁移和同步。这包括导入导出数据、与其他目录服务的互操作性,以及使用Slapd-Config工具和 slapo-overlay模块进行高级配置。对于那些需要处理大规模数据的读者,这部分...
首先,书中会讲解OpenLDAP的基础知识,包括LDAP协议的工作原理、目录服务在企业架构中的作用,以及OpenLDAP相较于其他目录服务的优势。读者将学习到如何安装和配置OpenLDAP服务器,理解配置文件的结构和用途,以及...
- **使用SASL**:详细讲解了SASL安全方面的考虑、SASL认证方法(如GSSAPI、KERBEROS_V4)以及如何将认证身份映射到LDAP条目。 - **使用TLS**:介绍如何启用传输层安全性来保护数据传输的安全。 - **构建分布式目录...
### OpenLDAP:配置、安全与集成目录服务 #### 一、引言 《Mastering OpenLDAP:配置、安全与集成目录服务》是一本由Matt Butcher编写的实用指南,旨在帮助应用开发者掌握如何使用OpenLDAP目录服务器。本书不仅适合...
在本压缩包文件“OpenLdap-install-and-config.rar”中,包含了一份关于OpenLDAP的入门文档,主要针对OpenLDAP 2.2.29版本的安装与配置进行了详细讲解。以下将对这一主题进行深入探讨。 1. **OpenLDAP简介** ...
此章节讲解了slapd配置文件的格式和各种指令的具体用法。 - **配置文件格式**:解释了配置文件的语法。 - **配置文件指令**:详细列举了全局指令、通用后端指令、通用数据库指令以及特定于BDB和HDB的指令。 - **...
本文将详细讲解如何在 CentOS7 上安装和配置 OpenLDAP 2.4.40 版本。 首先,我们来看一下提供的压缩包文件内容: 1. `openldap-servers-2.4.40-8.el7.x86_64.rpm`:这是 OpenLDAP 服务器的主要组件,包含了 slapd...
这部分深入讲解了访问控制的概念及其实现方法,包括静态配置和动态控制。 - **8.1 引言**:概述了访问控制的重要性。 - **8.2 通过静态配置进行访问控制**:描述了如何通过配置文件设置访问规则。 - **8.2.1 控制...
本教程将详细讲解如何在LXC环境中配置和安装OpenLDAP服务器,以实现高效且安全的身份管理和目录服务。 首先,我们需要在宿主机上安装bash shell环境,这是Linux系统的默认命令行界面,也是执行脚本的主要工具。确保...
本章讲解了如何启动、停止和监控 slapd 服务器,包括: - **命令行选项**:列出启动 slapd 时可使用的选项。 - **启动 slapd**:指导如何启动 slapd 服务器。 - **停止 slapd**:说明如何安全地关闭 slapd 服务器。 ...
本套系统旨在 ” 带领大家搭建起公司内部的一套高可用支持TLS/SSL加密的统一账号管理系统OpenLDAP” ,但同样也如实告诉大家一点:这个教程并没有特深入的讲解 OpenLDAP 的理论知识,更加深入的学习,任重而道远,让...
本文将详细讲解在Windows环境下安装并配置OpenLDAP的过程,以及安装JDK环境,以便进行LDAP操作。 一、安装准备 在开始安装OpenLDAP之前,你需要准备以下组件: 1. 下载openldap for windows,这是一个适用于Windows...
下面将详细讲解如何进行管理员密码的修改,以及相关注意事项。 首先,我们要了解在不同操作系统中修改管理员密码的方法。在Windows系统中,可以通过以下步骤进行: 1. 启动电脑,在启动画面出现时按F8键进入“高级...
3. **应用实例**:`BA000004 Radius协议ISSUE1.0.ppt` 可能包含关于Radius协议的详细讲解,包括其常见问题和解决方案。 4. **编程接口**:`LDAPtest.java.txt` 可能是一个示例代码,展示了如何在Java中使用LDAP API...
本文将详细讲解如何在Windows 7操作系统上安装和配置OpenLDAP服务器,并利用Java Naming and Directory Interface (JNDI)进行访问。 LDAP(Lightweight Directory Access Protocol)是一种应用层协议,用于查询和...