LDAP协议
背景
- X.400
- X.500(X.519 DAP)
- LDAP
1、在ITU制定X.400系列Email标准时,标准制定者们发现,需要一种通过网络获取通讯录的标准化方法。这种通过网络访问目录服务的需求,推动了X.500系列标准的开发,尤其是其核心标准X.519 DAP目录访问协议。由于X.500标准严格遵循了OSI七层网络架构,因此实现复杂,效率也成问题,所以业界采用情况不理想。
2、IETF意识到X.500系列标准的问题后,对DAP协议进行了改造和简化提出了轻量级目录访问协议LDAP。LDAP几乎保留了所有的X.519标准要求的功能,但网络协议选择了最常用的TCP/IP协议。
概念
1、LDAP
- 轻量目录访问协议(Lightweight Directory Access Protocol)的缩写�LDAP标准
- 实际上是在X.500标准基础上产生的一个简化版本
2、目录服务
- 什么是目录服务?
目录服务就是按照树状存储信息的模式 - 目录服务的特点? 目录服务与关系型数据库不同?
(1)目录服务的数据类型主要是字符型, 而不是关系数据库提供的整数、浮点数、日期、货币等类型
(2)目录有很强的查询(读)功能,适合于进行大量数据的检索
但目录一般只执行简单的更新(写)操作,不支持批量更新所需要的事务处理功能
(3)它主要面向数据的查询服务(查询和修改操作比一般是大于10:1),不提供事务回滚(rollback)机制.
(4)目录具有广泛复制信息的能力,适合于多个目录服务器同步/更新
目录是一组具有类似属性、以一定逻辑和层次组合的信息。常见的例子是通讯簿,由以字母顺序排列的名字、地址和电话号码组成。
目录服务是一种在分布式环境中发现目标的方法。目录具有两个主要组成部分:
- 第一部分是数据库,数据库是分布式的,且拥有一个描述数据的规划。
- 第二部分则是访问和处理数据的各种协议。
目录服务其实也是一种数据库系统,只是这种数据库是一种树形结构,而不是通常使用的关系数据库。目录服务与关系数据库之间的主要区别在于:二者都允许对存储数据进行访问,只是目录主要用于读取,其查询的效率很高,而关系数据库则是为读写而设计的。
提示:目录服务不适于进行频繁的更新,属于典型的分布式结构。
LDAP是一个目录服务协议,目前存在众多版本的LDAP,而最常见的则是V2和V3两个版本,它们分别于1995年和1997年首次发布。
特点
- LDAP的结构用树来表示,而不是用表格。
- LDAP可以很快地得到查询结果,不过在写方面,就慢得多。
- LDAP提供了静态数据的快速查询方式。
- LDAP不支持事务、不能进行回滚。
- Client/Server模型,支持分布式结构。
- LDAP是一种开放Internet标准,LDAP协议是跨平台的Interent协议。
其中,对于Client/Server模型,Server 用于存储数据,Client提供操作目录信息树的工具,数据库操作client用于对ldap server库进行操作。
(1)工具:ldapadd, ldapsearch,ldapdelete
实用client:用于将ldap server库在实际工作中使用
(2)工具:radius+ldap, pam+ldap
这些工具可以将数据库的内容以文本格式(LDAP 数据交换格式,LDIF)呈现在您的面前。
认证机制
- 基本认证
通过用户名和密码进行身份识别,又分为简单密码和MD5密码认证 - SASL(Simple Authentication and Secure Layer)
一种在网络协议中用于认证和数据安全的框架 - SSL和TLS
分布式LDAP 是以明文的格式通过网络来发送信息的,包括client访问ldap的密码。TLS(SSL的后继者,由OpenSSL 包)加密机制来解决这个问题。
端口号
Ldap端口号(显然提供分布式ldap)——389,636
[root@vmmac modules]# cat /etc/services | grep ldap
ldap 389/tcp 明文
ldap 389/udp 明文
ldaps 636/tcp # LDAP over SSL
ldaps 636/udp # LDAP over SSL
基本模型
LDAP的基本模型是建立在“条目”(Entry)的基础上。一个条目是一个或多个属性的集合,并且具有一个全局唯一的“可区分名称”(用dn表示)。与关系型数据(后面简称数据库)进行类比,一个条目相当于数据库中的一条记录,而dn相当于数据库中记录的关键字,属性相当于数据库中的字段。
提示:dn必须是全局唯一的。
LDAP中,将数据组织成一个树形结构,这与现实生活中的很多数据结构可以对应起来,而不像设计关系型数据库的表,需要进行多种变化。例如,下图就是一个树形结构的数据。
1、在上图所示的树形结构中,树的根结点是一个组织的域名(dlw.com),其下分为3个部分,分别是managers、people和group,可将这3个组看作组织中的3个部门,如managers用来管理所有管理人员,people用来管理登录系统的用户,group用来管理系统中的用户组。当然,在该图中还可继续增加其他分支。
2、对于上图所示的树形结构,使用关系数据库来保存数据的话,需要设置多个表,一层一层分别保存,当需要查找某个信息时,再逐层进行查询,最终得到结果。
3、若使用目录来保存该图中的数据,则更直观。图中每个结点用一个条目来保存,不同类型的结点需要保存的数据可能不同,在LDAP中通过一个称为objectClass的类型来控制不同结点需要的数据(称为属性)。
(1)用户组可以配置
objectClass: posixGroup
objectClass: top
(2)用户可以配置
objectClass: top
objectClass: posixAccount
objectClass: inetOrgPerson
4、对于目录中的数据怎样进行引用呢?前面提到过,每一个条目都有一个dn,因为dn是唯一的,因此就可找到需要结点的数据。dn的构造方式如下:
首先得到条目自己的名称(rdn,称为相对dn),然后开始向上逐级查找父结点,一直到根项为止。例如,对于上图中最右下方的结点,其dn为:
dn: cn=ldap, ou=group, o=dlw.com
通过这样的方式,即可唯一标识每一个结点。
在现实生活中,有很多这种树形结构的数据,如计算机文件系统的目录结构、Internet中的域名等。这些类型的数据,只要不需要频繁的更新,都适合用目录来保存。
功能
在LDAP的功能模型中定义了一系列利用LDAP协议的操作,主要包含以下4部分:
- 查询操作 :允许查询目录和取得数据,其查询性能比关系数据库好。
- 更新操作 :目录的更新操作没关系数据库方便,更新性能较差,但也同样允许进行添加、删除、修改等操作。
- 复制操作 :前面也提到过,LDAP是一种典型的分布式结构,提供复制操作,可将主服务器的数据的更新复制到设置的从服务器中。
- 认证和管理操作 :允许客户端在目录中识别自己,并且能够控制一个会话的性质。
OpenLDAP
- LDAP协议的自由和开源的实现。
- 并不包括后台数据库存储,OpenLDAP配合Berkeley DB可使其读操作的效率得到很大提高。
Berkeley DB是一个开源的文件数据库,介于关系数据库与内存数据库之间,使用方式与内存数据库类似,它提供的是一系列直接访问数据库的函数,而不是像关系数据库那样需要网络通讯、SQL解析等步骤。
安装
- 通过下载tar包,解压编译安装
- 通过挂载方式,yum,zypper安装
配置
- 配置slapd.conf
--了解LDAP Schema - 配置LDIF文件
--LDIF文本条目格式
--了解objectClass
--了解Attribute
--创建LDIF文件