近几年,随着LDAP(Light Directory Access Protocol,轻量级目录访问协议)技术的兴起和应用领域的不断扩展,目录服务技术成为许多新型技术实现信息存储、管理和查询的首选方案,特别是在网络资源查找、用户访问控制与认证信息的查询、新型网络服务、网络安全、商务网的通用数据库服务和安全服务等方面,都需要应用目录服务技术来实现一个通用、完善、应用简单和可以扩展的系统
目录服务就是按照树状信息组织模式,实现信息管理和服务接口的一种方法。目录服务系统一般由两部分组成:第一部分是数据库,一种分布式的数据库,且拥有一个描述数据的规划;第二部分则是访问和处理数据库有关的详细的访问协议。
目录服务与关系型数据库不同的是,目录不支持批量更新所需要的事务处理功能,目录一般只执行简单的更新操作,适合于进行大量数据的检索;目录具有广泛复制信息的能力,从而在缩短响应时间的同时,提高了可用性和可靠性。目前,目录服务技术的国际标准有两个,即较早的X.500标准和近年迅速发展的LDAP标准。
X.500是一个协议族
X.500实际上不是一个协议,它是由一个协议族组成:X.501模型强调目录服务基本模型和概念;X.509认证框架是如何在X.500中处理目录客户和服务器的认证;X.511 抽象服务定义X.500被要求提供的功能性服务;X.518 分布式操作过程表明如何跨越多台服务器处理目录服务;X.519 协议规范即是X.500协议,包括目录访问协议DAP、目录系统协议DSP、目录操作绑定协议DOP和目录信息Shadowing协议DISP;X.520 选定的属性类型要求是X.500自己使用的属性类型;X.521选定的对象类即为X.500自己使用的对象类;X.525复制是如何在目录服务器之间复制目录内容。
在这些X.500标准中主要定义有多种内容。一个信息模型:确定目录中信息的格式和字符集,如何在项中表示目录信息(定义对象类、属性等模式);一个命名空间:确定对信息进行的组织和引用,如何组织和命名项——目录信息树DIT和层次命名模型;一个功能模型:确定可以在信息上执行的操作;一个认证框架:保证目录中信息的安全,如何实现目录中信息的授权保护——访问控制模型;一个分布操作模型:确定数据如何进行分布和如何对分布数据执行操作,如何将全局目录树划分为管理域进行管理——目录管理模型,客户端与服务器通信的协议—目录访问协议DAP,将用户请求在服务器之间进行链接所需的目录系统协议DSP,将选定的信息在服务器之间进行复制所需的目录信息映像协议DISP,用于自动在服务器之间协商连接配置的目录操作绑定协议DOP。
X.500虽然是一个完整的目录服务协议,但在实际应用的过程中,却存在着不少障碍。由于目录访问协议DAP这种应用层协议是严格遵照复杂的ISO七层协议模型制定的,对相关层协议环境要求过多,主要运行在UNIX机器上,在许多小系统上,如PC和Macintosh上无法使用,因此没有多少人按照DAP开发应用程序,TCP/IP协议体系的普及,更使得这种协议越来越不适应需要。
LDAP目录访问标准
LDAP协议从1993年批准,产生了LDAP V1版本,随后于1997年发布了第三个版本LDAP V3,它的出现是LDAP协议发展的一个里程碑性标志,它使LDAP协议不仅仅作为X.500的简化版,同时提供了LDAP协议许多自有的特性,使LDAP协议功能更为完备,具有了更大的生命力。
LDAP V3协议也不是一个协议,而是一个协议族。RFC 2251——LDAP V3核心协议,定义了LDAP V3协议的基本模型和基本操作;RFC 2252——定义了LDAP V3中的基本数据模式(Schema)(包括语法、匹配规则、属性类型和对象类)以及标准的系统数据模式;RFC 2253——定义了LDAP V3中的分辨名(DN)表达方式;RFC 2254——定义了LDAP V3中的过滤器的表达方式;RFC 2255——LDAP统一资源地址的格式;RFC 2256——在LDAP V3中使用X.500的Schema列表;RFC 2829——定义了LDAP V3中的认证方式;RFC 2830——定义了如何通过扩展使用TLS服务;RFC 1823——定义了C的LDAP客户端API开发接口;RFC 2847——定义了LDAP数据导入、导出文件接口LDIF。
在这些协议中,主要定义了LDAP的内容,同时主要定义了一个信息模型:确定LDAP目录中信息的格式和字符集,如何表示目录信息(定义对象类、属性、匹配规则和语法等模式);一个命名空间:确定对信息进行的组织方式——目录信息树DIT,以DN和RDN为基础的命名方式,以及LDAP信息的Internet表示方式;一个功能模型:确定可以在信息上执行的操作的通讯协议以及在客户端进行这些操作的API接口;一个安全框架:保证目录中信息的安全,匿名、用户名/密码、SASL等多种认证方式,以及与TLS结合的通讯保护框架;一个分布式操作模型:基于Referral方式的分布式操作框架;一个LDAP扩展框架:基于控制和扩展操作的LDAP扩展框架 。
但在LDAP协议中尚未定义通用的访问控制模型和复制协议(对应X.500的映射协议DISP),尽管不同的LDAP厂商均实现了自己的控制模型和复制机制,但是LDAP标准的发展正集中在访问控制模型、复制协议(DUP)以及扩展操作上,这些扩展操作包括查询的分页和排序、语言标签、动态目录、LDAP服务发现等。
信息模型:描述LDAP的信息表示方式
在LDAP中信息以树状方式组织,在树状信息中的基本数据单元是条目,而每个条目由属性构成,属性中存储有属性值;LDAP中的信息模式,类似于面向对象的概念,在LDAP中每个条目必须属于某个或多个对象类(Object Class),每个Object Class由多个属性类型组成,每个属性类型有所对应的语法和匹配规则;对象类和属性类型的定义均可以使用继承的概念。每个条目创建时,必须定义所属的对象类,必须提供对象类中的必选属性类型的属性值,在LDAP中一个属性类型可以对应多个值。
在LDAP中把对象类、属性类型、语法和匹配规则统称为Schema,在LDAP中有许多系统对象类、属性类型、语法和匹配规则,这些系统Schema在LDAP标准中进行了规定,同时不同的应用领域也定义了自己的Schema,同时用户在应用时,也可以根据需要自定义Schema。这有些类似于XML,除了XML标准中的XML定义外,每个行业都有自己标准的DTD或DOM定义,用户也可以自扩展;也如同XML,在LDAP中也鼓励用户尽量使用标准的Schema,以增强信息的互联互通。
在Schema中最难理解的是匹配规则,这是LDAP中为了加快查询的速度,针对不同的数据类型,可以提供不同的匹配方法,如针对字符串类型的相等、模糊、大于小于均提供自己的匹配规则。
命名模型:描述LDAP中的数据如何组织
LDAP中的命名模型,也即LDAP中的条目定位方式。在LDAP中每个条目均有自己的DN和RDN。DN是该条目在整个树中的唯一名称标识,RDN是条目在父节点下的唯一名称标识,如同文件系统中,带路径的文件名就是DN,文件名就是RDN。
功能模型:描述LDAP中的数据操作访问
在LDAP中共有四类10种操作:查询类操作,如搜索、比较;更新类操作,如添加条目、删除条目、修改条目、修改条目名;认证类操作,如绑定、解绑定;其它操作,如放弃和扩展操作。除了扩展操作,另外9种是LDAP的标准操作;扩展操作是LDAP中为了增加新的功能,提供的一种标准的扩展框架,当前已经成为LDAP标准的扩展操作,有修改密码和StartTLS扩展,在新的RFC标准和草案中正在增加一些新的扩展操作,不同的LDAP厂商也均定义了自己的扩展操作。
安全模型:描述LDAP中的安全机制
LDAP中的安全模型主要通过身份认证、安全通道和访问控制来实现。
身份认证 在LDAP中提供三种认证机制,即匿名、基本认证和SASL(Simple Authentication and Secure Layer)认证。匿名认证即不对用户进行认证,该方法仅对完全公开的方式适用;基本认证均是通过用户名和密码进行身份识别,又分为简单密码和摘要密码认证;SASL认证即LDAP提供的在SSL和TLS安全通道基础上进行的身份认证,包括数字证书的认证。
通讯安全 在LDAP中提供了基于SSL/TLS的通讯安全保障。SSL/TLS是基于PKI信息安全技术,是目前Internet上广泛采用的安全服务。LDAP通过StartTLS方式启动TLS服务,可以提供通讯中的数据保密性、完整性保护;通过强制客户端证书认证的TLS服务,同时可以实现对客户端身份和服务器端身份的双向验证。
访问控制 虽然LDAP目前并无访问控制的标准,但从一些草案中或是事实上LDAP产品的访问控制情况,我们不难看出:LDAP访问控制异常的灵活和丰富,在LDAP中是基于访问控制策略语句来实现访问控制的,这不同于现有的关系型数据库系统和应用系统,它是通过基于访问控制列表来实现的,无论是基于组模式或角色模式,都摆脱不了这种限制。
在使用关系型数据库系统开发应用时,往往是通过几个固定的数据库用户名访问数据库。对于应用系统本身的访问控制,通常是需要建立专门的用户表,在应用系统内开发针对不同用户的访问控制授权代码,这样一旦访问控制策略变更时,往往需要代码进行变更。总之一句话,关系型数据库的应用中用户数据管理和数据库访问标识是分离的,复杂的数据访问控制需要通过应用来实现。
而对于LDAP,用户数据管理和访问标识是一体的,应用不需要关心访问控制的实现。这是由于在LDAP中的访问控制语句是基于策略语句来实现的,无论是访问控制的数据对象,还是访问控制的主体对象,均是与这些对象在树中的位置和对象本身的数据特征相关。
在LDAP中,可以把整个目录、目录的子树、制定条目、特定条目属性集或符合某过滤条件的条目作为控制对象进行授权;可以把特定用户、属于特定组或所有目录用户作为授权主体进行授权;最后,还可以定义对特定位置(例如IP地址或DNS名称)的访问权。
由于LDAP所具有的查询效率高、树状的信息管理模式、分布式的部署框架以及灵活而细腻的访问控制,使LDAP广泛地应用于基础性、关键性信息的管理,如用户信息、网络资源信息等。LDAP的应用主要涉及几种类型。信息安全类:数字证书管理、授权管理、单点登录;科学计算类:DCE(Distributed Computing Envirionment,分布式计算环境)、UDDI (Universal Description,Discovery and Integration, 统一描述、发现和集成协议);网络资源管理类:MAIL系统、DNS系统、网络用户管理、电话号码簿;电子政务资源管理类:内网组织信息服务、电子政务目录体系、人口基础库、法人基础库。
目前,LDAP已应用在北京大学校园网络用户管理系统、Novell的eProvision应用解决方案、上海公务网统一用户管理、中国数字图书馆系统的用户管理部分,以及北京、上海、天津、福建等省级CA等。
某市公务网中的LDAP应用案例:在该市公务网中具有三个LDAP服务器,一个LDAP服务器为公务网项目中CA的主,一个LDAP服务器为公务网项目中CA的从,第三个目录服务器存储有上海公务网中的所有用户信息。在该系统中建立了一个基于Web方式的用户管理系统,各个局维护自己的数据,CA系统中的用户信息以及办公自动化系统、电子邮件系统、授权管理系统、共享资源管理系统,通过RMI接口实现与用户组织树目录服务系统中信息的同步。
从目录服务技术的发展来看,LDAP标准实际上是在X.500标准基础上产生的一个简化版本,两者之间的关系与那种为解决同一个问题出现的两个独立发展的技术有很大的不同之处,因此需要在此基础上对这两个标准进行理解和分析。
首先,作为IETF(Internet Engineering Task Force)一个正式的标准,LDAP是X.500标准中的目录访问协议DAP的一个子集,可用于建立X.500目录。因此这两个目录服务技术标准有着许多的共同之处,即在平台上,都实现了一个通用的平台结构,提供了一个操作系统和应用程序需要的信息服务类型,可以被许多平台和应用程序接收和实现;在信息模型上,都使用了项、对象类、属性等概念和模式来描述信息;在命名空间方面,都使用了目录信息树结构和层次命名模型;在功能模型上,都使用了相似的操作命令来管理目录信息;在认证框架方面,都可以实现用户名称和密码,或者基于安全加密方式的认证机制;在灵活性上,它们的目录规模都可大可小,大到全球目录树,小到只有一台目录服务器;在分布性方面,目录信息都可以分布在多个目录服务器中,这些服务器可以由各组织管理,既保证了目录信息总体结构一致性,又满足了分级管理的需要。
LDAP与X.500的DAP相同之处是,LDAP也是被设计用来从分层目录中提取信息。但与之不同的是,为保持网络的带宽,LDAP对来自X.500目录询问的应答次数加以限制。最初LDAP只是一种访问X.500目录的简单方法,是X.500的功能子集,但随着它的成熟和独立发展,已经增加了许多在X.500中没有的新特性。现在的LDAP既可以为X.500目录服务提供一个轻型前端,也可以实现一个独立的目录服务。
LDAP的独特之处
首先,AP(Access Protocol)既是一个X.500的访问协议,又是一个灵活的可以独立实现的目录系统。
其次,DAP(Directory Access Protocol)基于Internet协议,X.500基于OSI(开放式系统互联)协议:建立在应用层上的X.500 目录访问协议DAP,需要在OSI会话层和表示层上进行许多的建立连接和包处理的任务,需要特殊的网络软件实现对网络的访问;LDAP则直接运行在更简单和更通用的TCP/IP或其它可靠的传输协议层上,避免了在OSI会话和表示层的开销,使连接的建立和包的处理更简单、更快,对于互联网和企业网应用更理想。
再者,LDAP协议更为简单:LDAP继承了X.500最好的特性,同时去掉了它的复杂性。LDAP通过使用查找操作实现列表操作和读操作,另一方面省去了X.500中深奥的和很少使用的服务控制和安全特性,只保留常用的特性,简化了LDAP的实现。
其它,LDAP通过引用机制实现分布式访问:X.500 DSA通过服务器之间的链操作实现分布式的访问,这样查询的压力集中于服务器端;而LDAP通过客户端API实现分布式操作(对于应用透明)平衡了负载;
最后,LDAP实现具有低费用、易配置和易管理的特点。经过性能测试,LDAP比X.500具有更少的响应时间;LDAP提供了满足应用程序对目录服务所需求的特性。