LDAP 2


[技术]目录服务中关于LADP协议 http://blog.sina.com.cn/u/44d43f98010002yl
 
2006-04-25 10:50:01
 

目录服务
目录服务就是按照树状模式组织信息,实现信息管理和服务接口的一种方式。目录服务中一般包括两个方面的内容:第一个组成部分是:数据库,这种数据库有别于日常所用到的关系型数据库,它是一种分布型的数据库,并且需要一个描述数据的规则;第二个组成部分是:访问和处理数据库的相关的协议。
目录服务和关系数据库不同,目录服务不支持批量更新事务处理能力,目录一般只执行简单的更新操作,适合于进行大量数据的检索;目录具有广泛的复制信息的能力,从而在缩短响应时间的同时,提高了可用性和可靠性;目前,目录服务技术的国际标准有两个,即较早的X.500标准和近年迅速发展的LDAP标准。

X.500虽然是一个完整协议群组,但是其目录访问协议DAP这种应用层的协议是严格按照复杂的ISO七层协议模型制定的,对相关层协议环境要求过多,主要运行在unix机器上,在许多小系统上,如PC和Macintosh(苹果机)上无法使用,因此没有多少人按照DAP开发应用程序,TCP/IP协议体系的普及,更使得这种协议越来越不适应需要。
LDAP协议

LDAP全称为Light Directory Access Protocol,轻量级目录访问协议,LDAP协议从1993年批准,有了V1版本,1997年发布了第三个版本LDAP v3,使得LDAP协议不仅仅做为X.500的简化版,同时提供了LDAP协议许多自有功能特性,LDAP V3协议也不是一个单一的协议,而是一个协议群组,包括内容如下:

RFC2251-LDAP V3协议核心协议,定义了LDAP V3协议的基本模型和操作;
RFC2252-定义了LDAP V3基本数据模式(Schema)以及标准的系统数据模式,Schema包括语法、匹配规则、属性类型和对象类;
RFC2253-定义了LDAP V3中的分辨名(Differentiate Name, DN)表达方式;
RFC2254-定义了LDAP V3中过滤器的表达方式;
RFC2255-定义了LDAP V3中统一资源地址格式;
RFC2256-定义了在LDAP V3中使用X.500的Schema列表;
RFC2829-定义了LDAP V3的认证方式;
RFC2830-定义了LDAP V3如何通过扩展使用TLS服务;
RFC1823-定义了C的关于LDAP V3客户端开发接口;
RFC2847-定义了LDAP数据导入、导出的文件接口LDIF;

在这些协议中,主要定义了LDAP的内容,同时定义了信息模型,确定了LDAP目录中所存储的信息的格式和字符集,如何表示目录信息(定义对象类、属性、匹配规则和语法等模式)。
一个命名空间:确定对信息进行的组织方式即就是目录信息树DIT,以DN和RDN为基础的命名方式,以及LDAP信息的Internet表示方式;
一个功能模型:确定可以在信息上执行的操作的通讯协议以及在客户端尽心这些操作的API接口;
一个安全框架:保证目录中信息的安全,匿名、用户名/密码、SASL等多种认证方式以及与TLS结合的通讯保护框架;
一个操作模型:分布式的操作模型,基于Referral方式的分布式操作框架;
一个LDAP扩展框架:基于控制和扩展操作的LDAP扩展框架 。

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 Server http://blog.sina.com.cn/u/44d43f98010008gc
 
2007-03-11 09:32:41
 
大中小
 随着存储技术的不断进步,越来越多的公司采用LDAP Server存储数据,其高效和方便性使得其成为实现NGN必不可少的技术之一。

下面是关于几种常用的LDAP Server的简单介绍。

1,openldap 2.X:

  OpenLDAP Project由一个志愿者小组组成,其下载地址是http://www.openldap.org/software/download/

.(1). 支持LDAPv3 - OpenLDAP 2.0 除了其它改善外还支持SAS(SimpleAuthentication and Security Layer)、TLS(Transport Layer Security)以及SSL(Secure Sockets Layer)。LDAPv2 之后通讯协议很多的改变都是为了加强LDAP 的安全性。

 (2). 支持IPv6 - OpenLDAP 支持新一代的因特网通讯协议第6 版。

 (3). LDAP Over IPC - OpenLDAP 能够使用IPC 在系统内进行通讯。这可以避免使用网络通讯以增加安全性。

 (4). 使用新的应用程序界面:改善程序设计人员联机及使用程序的方法。

 

2,openldap for win32

  与openldap2.X的功能基本一样,只是安装在windows下面的,有关其文档介绍和下载地址请看

http://lucas.bergmans.us/hacks/openldap/

 

3,IBM Directory Server 5.1

   IBM Directory 实现了 Internet Engineering Task Force (IETF) LDAP V3 规范,在功能和性能方面做了改进。IBM Directory Server 5.1 使用 IBM DB2 作为存储支持,为每个 LDAP 操作提供了事务完整性、高性能操作以及在线备份和恢复功能。

IBM Directory Server 是作为独立式常驻程式执行的 (LDAP)目录。在 WebSphere Portal 环境中,此目录可存储、更新及获取与识别的使用者特定资料,例如使用者 ID 及密码。

 

4,iPlanet(SUN directory) 

iPlanet适于实现外联网的全球目录服务器。iPlanet Directory Server 为管理大量用户信息的企业,提供用户管理基础服务。iPlanet Directory Server 能够与现存的系统集成,并发挥中央仓库的作用,以适应合并雇员、客户、供应商和伙伴的需要,适应保存信息,保存各种灵活的个性化用户概况和优先选择需要,适应外联网用户验证需要。在托管环境中,伙伴、客户和供应商能够管理他们自己的那部分目录,从而减少内部管理成本,并有利于保障提供精确的最新信息.并具有简化外联网应用开发;目录特性增强可用性;与企业系统相集成;减少管理成本;LDAP v2 和 v3 的实现;高性能服务器;灵活的复制模式;   先进的安全特性;高可用性;可扩展体系结构。

 

5,微软活动目录(AD) 

   微软活动目录(AD)是Windows 2000操作系统平台的中心组件之一,是一种完善的、适应性强的目录服务,它允许用户进行很高程度上的修改以便满足特殊的商业和机构需求。

   活动目录可以让企业有效地共享和管理网络资源和用户信息。此外,活动目录担当网络安全的管理中枢,允许操作系统方便地验证用户身份并控制其对网络资源的访问。同样重要的是,活动目录还担当集中系统和合并管理任务的集成点。使用活动目录服务的好处:为网络管理员、开发者和用户提供了访问目录服务的能力; 简化管理任务 ;加强网络安全性; 通过互操作使用现存网络 。

 

6,Novell eDirectory:

  Novell eDirectory 与许多开放标准和新兴标准是兼容的。它得到了 Open Group 的 LDAP 认可 表示符合轻量目录访问协议版本 3 (LDAP v3) 标准。eDirectory 还支持可扩展标记语言 (XML)、目录服务标记语言 (DSML)、简单对象访问协议 (SOAP) 和许多其它开放标准。这一特性可以帮助企业实现其技术投资的最大化并避免“受制”于任何特定提供商的产品。同样重要的是,eDirectory 真正支持多平台:它运行于 Linux、Windows、Solaris、AIX、NetWare 和 HP-UX 上,因此 eDirectory 是在异构网络中提供身份服务的理想方案。 Novell eDirectory 是一种支持 Lightweight Directory Access Protocol (LDAP)、基于目录的身份管理系统,它对用户身份、访问特权和其他网络资源实行集中管理。eDirectory 可帮助公司以领先于对手的速度将产品和服务推向市场,在因特网经济中占据竞争优势。

 

7,Sun ONE Directory Server 5.2

Sun" ONE Directory Server 5.2 是功能强大且具伸缩性的分布式目录服务器,它基于符合工业标准的轻型目录访问协议 (LDAP)。

Sun ONE Directory Server 软件是 Sun Open Net Environment (Sun ONE) 的组成部分,后者是 Sun 推出的基于标准的软件界面、体系结构、平台和专门技术,用于构建和部署按需服务。Sun ONE Directory Server 是构建集中化与分布式数据库的基础,这样建立的数据库可用于内部网,也可跨越外联网从而实现与商业合作伙伴共享数据资源,或者可跨越公用 Internet 做到与客户进行交流。

8,IBM secureWay

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

异构环境下的Single Sign On 解决方法 http://www.cnblogs.com/jeet/archive/2005/03/30/128288.html

    在Microsoft平台Single Sign On(单点登录)的解决方案中,大多数是采用Active Directory(活动目录)来实现。但在现实的环境中,很多企业出于各种各样的原因(或者是原来用的是Unix、Linux的环境,或是原来有其它的目录服务)而不愿使用AD服务。这样一来,当使用.net技术来做EAI的时候,会碰到一个问题,怎么样才能实现统一的用户管理与授权?采用数据库的方式,需要维护不同系统中的用户映射,管理不便,实现也较为麻烦。Jeet最近做的一个项目就碰到一个问题,用户原来的BI系统采用的Sun的目录服务,并要求我们所做的系统整合需要与LDAP集成的单点登录,实现用户的统一认证与授权。
     本来以为使用System.DirectoryServices就可以很容易的实现访问LDAP服务器,没想到System.DirectoryServices只适合于以LDAP方式表示访问Microsoft的AD,根本不能做到访问其它LDAP标准的服务器。 
      JAVA有因为其实跨平台的特性,对LDAP的支持是生来俱有的,但.net不知是否微软有意不提供对其它LDAP服务器的支持。没有办法只能自己找解决方法。多亏了jeet一向喜欢的Novell公司,提供了LDAP Libraries for C#,有基于MIT License的源代码,让我们有可能在.net下操作LDAP服务器,支持Linux与windows平台,是实现EAI不错的选择。因为LDAP Libraireis for C#需要Mono.Security,所以要先安装Mono,可以到http://www.mono-project.com/Main_Page下载最新的版本的mono并安装。在使用时Jeet碰到一个有趣的问题,下载了一个据说是稳定版本的1.0.6,但在编译LDAP Libraies的代码时却报错,搞了半天才知道是因为mono的问题,重新下载Mono 1.1.4版本把Mono.Security.dll引入工程终于可以成功编译。
       结合LDAP Libraries的示例代码与自己的实现方法,成功为客户实现了基于LDAP服务器的单点登录安案。

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

 LDAP技术报告 


  一、目录和目录服务
       LDAP(Lightweight Directory Access Protocol)轻型目录访问协议是目录访问协议的一种。因此下面首先介绍什么是目录和目录服务。
       目录是一个以一定规则排列的对象的属性集合,是一个存储着关于对象各种属性的特殊数据库,这些属性可以供访问和管理对象时使用,类似电话簿和图书馆卡片分类系统。这里,我们所谈的目录服务是指网络目录服务。目录服务是指一个存储着用于访问、管理或配置网络资源信息的特殊数据库(also called data repository),它把网络环境中的各种资源都作为目录信息,在目录树结构中分层存储,对这些信息可以存储、访问、管理并使用。网络中的这些资源包括用户、各个应用系统、硬件设备、网络设备、数据、信息等。目录服务是为有效的集成管理网络目录中的信息提供服务,是支持网络系统的重要底层基础技术之一。
目录服务将分布式系统中的用户、资源和组成分布式系统的其它对象统一的组织起来,提供一个单一的逻辑视图,允许用户和应用透明地访问网络上的资源。一个由目录服务支持的网络系统是一个集成的、网络化的、统一的系统,而不是各个独立功能部分的简单聚合。在目录服务系统中对象可以根据名字或功能、属性访问,而不是根据机器地址、文件服务器名字和mail地址等访问。在目录服务的基础上开发的应用,易于使用、功能增强和易于管理,目录信息的共享为应用的开发提供了方便。下一代分布式网络的信息模型和模式是一种基于目录的,当我们进入网络时,是登录到一个基于目录的网络中,而不是登录到某个机器上。
目录服务可以存储信息种类:
用户帐户信息(登入名、口令、权限)
用户个人信息(电话号码、地址、雇员ID号)
外围设备配置信息(打印机、调制借调器、传真)
应用程序配置信息
安全信息
网络基础设施配置信息(路由器、代理服务器、INTERNET访问设置)
人们可以想得到的,网络目录中都可以存储
这些信息集中在一个标准数据库中,就可以有多种不同的使用方法。其中,最普通的是供系统管理员用于网络访问控制和网络资源访问控制。目录将成为对许多网络活动进行集中控制的地方。

       控制的例子:
用户登入进入一个网络,系统进行认证和权限判定;
用户进入网络后,访问网络中的资源,系统向目录服务查询该用户是否具有使用该资源的权限,并返回所请求资源的物理地址。
个人用户可以使用目录服务存储个人设置信息,并可以对其所有环境进行集中存储和控制。
随着目录服务技术的成熟,人们可以使用该技术通过一些网络设备监视和控制网络传输情况。

    目录服务的基本功能:
资源信息的目录式表示、分布存储、资源定位和查找、用户的统一认证、系统资源的统一授权、系统资源信息的共享、系统资源的单点统一管理、安全传输的保证、资源的统一监控等。
目录服务的主要优点:
网络管理工作大大减轻,包括管理网络上的各个应用;
网络的集中管理点;
访问用户信息的集中控制点;
存储在其它条件下很难处理的管理信息
系统资源信息的利用率高、管理的可扩展性好
简单地说,目录的发展经历了书面目录(电话目录、医士列表)——基于计算机的目录(PIM,不易共享、必须访问到响应的软件和计算机)——网络目录(公共的、共享的、统一的)。
传统的目录是计算机或网络基础结目录的一个构件,它向其它应用程序提供服务,但没有提供集成管理的机制,网络上的计算和服务需要一种公共的、分布式的目录,能够跨平台地对应用程序和用户提供集中、统一的服务。目录服务将使网络上的系统资源管理朝着单一的、全网络的目标发展,并能够让用户、管理员以更容易的方式来管理网络环境。目录服务作为一种工具来减少大型网络的管理负担,提供了集中的单点管理和适应复杂环境所必须的灵活性,减轻了非目录服务系统中存在的冗余管理。
通过网络资源逻辑接口,目录服务(ADS)减少了人们为了利用网络功能而必须对网络掌握的程度。也就是说,普通用户只需要很少的网络知识,就可以通过复杂网络访问和使用资源。用户不需要再了解资源的物理分布,访问本地打印机的方法和访问远程网络资源的方法相同。目录服务(ADS)提供了逻辑表示与资源的网络上的物理位置的连接,从用户的角度看,这可能是转移到基于目录的网络操作系统具有的最大优点。)
目录服务和数据库的区别:
读多于写
一般不支持事务处理
信息访问方式不同(一个是SQL、一个是LDAP的API)
目录中的信息一般不要求严格的一致性
传统的数据库是平面的,无法表示资源之间及资源使用控制的复杂逻辑关系而远远不能满足当前资源信息管理的各种要求。
目录服务与DNS系统的相同之处和不同之处
相同之处:
分布存储
树型层次结构
容错
不同之处:
DNS的功能和目录服务不同,DNS功能单一,本质上是将主机名解析成IP地址。目录服务是可以为多个应用提供网络资源的信息存储和管理,具有广泛的应用特性;
DNS是以一系列文本文件为基础,是一种纯文本式的数据库,无法进行扩展,适应其它功能的要求;
与分布式文件系统的相同在于采用了准树型层次结构,具有一定的授权功能,区别在于:
目录服务表示资源的各种属性信息,可为各种应用提供服务,文件不能表示;
目录服务有很强的逻辑表示和分类,文件的组织逻辑性单一,主要按存储位置;
文件系统的认证功能较差
独立性强
目录服务的应用举例
C4ISR系统:由多个大的子系统构成,管理问题更为复杂和严重
新的应用:电子商务(IBM)、操作系统(WINDOWS2000)
网络的监控管理
会议系统和PIM
搜索功能
太多的应用——基于目录的应用
原有应用的资源管理的重新开发

二、  LDAP协议的特点

X.500协议是为了便于建立全局、分布式的目录信息而设计的一套协议。它是一种C---S(Client—Server)结构的应用协议,支持用户通过网络访问和维护资源信息,另外还具有几个突出的特点:
支持分布式的目录信息维护,所以每一个运行X.500的服务器都只需负责自己所管辖的资源信息,只需在本地就可完成信息的更新;
提供强大查询能力,可以让用户随心所欲的设计查询方式;
全局的信息标示,通过这种标示可以唯一的定位信息位置,获取内容;
结构化的信息模式,支持开发者的本地扩展;
遵循统一的标准,所以可以通过标准的方式访问任何一个X.500服务器,获取信息;
X.500协议中包含了这诸多的强大功能,可以说在很大的程度上满足了用户和开发者的要求,但是在用户和开发制的使用过程中却逐渐暴露出其许多的不足之处,阻碍了它的应用和推广,主要集中在使用方式和性能开销上这两个方面,由于X.500是在OSI协议栈上实现的,虽然X.500提供了强大的信息查询功能,但是协议所要求的访问格式却十分复杂,往往难以掌握;其次在运行X.500服务器时对系统的开销要求较高。为了兼顾保留协议的优点和克服这些不尽人意的地方,推出了由X.500目录服务协议延伸发展而来的轻型目录访问协议(Lightweight Drectory Access Protocol,简称LDAP)。LDAP协议继承了X.500的90%左右的功能,同时兼容所有使用X.500协议建立的服务端数据库,避免了重复开发的浪费;在运行开销上却只是X.500的10%。正是由于LDAP具有巨大的优越性,它从一开始仅仅是作为X.500客户层的另一种实现方式,到现在在许多应用中完全替代了X.500协议,成为一个完整实用的应用开发协议。
LDAP在以下四个方面对X.500进行了简化:
传输 :   LDAP直接运行在TCP上,避免了OSI多层通信的高层开销;
功能:    LDAP简化了X.500的功能,抛弃了较少用到的功能和冗余的操作;
数据表示:X.500的数据表示结构复杂,LDAP采用简单的字符串对数据进行表示;
编码:    LDAP用于网络传输的编码规则比 X.500的编码规则更加简单。
总到来说,基于LDAP的目录服务有以下特点。
目的是存储网络资源的信息
结构化的信息框架(面向对象的信息存储方法),采用树型层次式结构表示
在系统中的单点集中(不指物理位置)管理资源,可实现单一登入点
读多于写
基于TCP 协议
Client/Server逻辑结构
标准的访问协议LDAP
强大的搜索功能,允许用户组织复杂的查询要求
维护的分散性(信息可分布存储,具有集中式数据库无可比拟的优越性)
可全球唯一的命名
动态添加和修改信息
容错功能
自动更新和维护存储的信息
方便的备份和恢复功能
安全访问和信息传输的安全
易对资源进行授权管理

三、  LDAP协议的内容

        LDAP定义了四种基本模型:
信息模型说明了LDAP目录中可以存储哪些信息;
命名模型说明了如何组织和引用LDAP目录中的信息;
功能模型说明了LDAP目录中的信息处理,特别是如何访问和更新信息;
安全模型说明如何保护LDAP目录中的信息不受非授权访问和修改。
信息模型
       LDAP的信息模型是以模式(Schema)为基础的,以项目(Entry)为核心的。模式由若干项目组成,项目是描述客观实体的基本单位,项目(如图3)由描述客观实体具体信息的一组属性(Attribute)构成。属性(如图3)只能有一种类型(Type),可以有一个或多个值(Value)。属性的类型具体说明属性值可以存储哪些信息,以及这些信息的行为特性。例如,属性cn的类型是caseIgnoreString,它意味着属性值是按照词典排序的字符串,并且在比较时忽略大小写,如BEIJING和Beijing是相同的;属性tele的类型是telephoneNumber,它具有caseIgnoreString的全部特性,另外在比较时忽略空格和破折号,如0731-4573670和07314573670是相同的。每个项目都有一个属性objectClass,用于说明项目的类型,以及项目中的必选属性和可选属性。属性objectClass的取值可以是一个或多个,其中必须有一个用于说明项目的基本结构的结构对象类(Structural object class),结构对象类不能轻易改变;除此之外,还可以有若干个对项目结构进行辅助说明的辅助对象类(Auxiliary object class),在访问控制允许的范围内可以新增或删除辅助对象类。

命名模型
        在LDAP目录中,项目是按照树形结构组织的,根据项目在树形结构中的位置对项目进行命名,这样的命名通常称为标识(Distinguished name),简称DN。DN由若干元素构成,每个元素称为相对标识(Relative distinguished name),简称RDN。RDN由项目的一个或多个属性构成。

       LDAP的命名模型(如图4)与我们熟悉的文件系统有很多相似之处,RDN与文件系统中的文件名很相似,DN与文件的绝对路径名很相似。另外,与文件系统一样,兄弟项目(即,具有相同父项目的子项目)必然具有不同的RDN。LDAP的命名模型与文件系统之间的区别主要有:
在LDAP目录中,位于叶节点和非叶节点的项目都拥有各自的属性;在文件系统中,只有位于叶节点的文件拥有较丰富的内容,而位于非叶节点的目录的内容相对简单。
在LDAP目录中,DN中各元素的排序是从叶到根;在文件系统中,文件绝对路径名中各元素的排序是从根到叶。
在LDAP目录中,DN中各元素之间的分隔符是“,”;在文件系统中,文件绝对路径名中各元素之间的分隔符是“/”或“\”。
在LDAP目录中,允许超越树形结构的别名项目(Alias entry),它指向其它项目。

功能模型
        LDAP的功能模型涉及以下三个方面:
询问(Interrogation)
LDAP在信息询问方面主要定义了查找(Search)和比较(Compare)两个操作。在查找操作中,根据选取标准在指定范围内选择项目,这个选取标准通常称作查找过滤器(Search filter),并且可以规定一组需要返回的属性。另外,还可以规定查找结果的大小和客户端等待结果的时间。比较操作主要是判断指定项目是否包含指定属性(包括类型和值)。
更新(Update)
LDAP在信息更新方面定义了新增(Add)、删除(Delete)、修改(Modify)和修改RDN(Modify RDN)等四个操作。新增操作主要是在LDAP目录中插入一个新的项目。删除操作主要是从LDAP目录中删除已有项目。修改操作主要是修改已有项目的属性,具体地说,可以增加、删除、修改属性或属性值。修改RDN操作主要是修改项目的名字。
身份验证(Authentication)
LDAP在身份验证方面定义了连接(Bind)、断接(Unbind)和作废(Abandon)等三个操作。连接操作主要是客户端向服务器提供身份信息,包括DN和口令,以便于服务器验证客户端的身份,身份验证成功即建立客户端与服务器之间的会话(session)。断接操作主要是结束客户端与服务器的会话。作废操作主要是中止正在执行的操作。
       
        安全模型
如何控制从网络上来的各种访问请求,防止非授权的访问发生?这对于一个系统而言,也是十分重要的,因为许多的用户信息(如密码、费用)以及许多系统的配置数据等都属于敏感信息,它们不希望被随便一个普通的使用者访问,而只允许管理员拥有查询和修改的权限。LDAP的安全模型是以客户端的身份信息为基础的。客户端的身份信息通过连接操作提供给服务器,服务器根据身份信息对客户端提出的访问请求进行控制。在LDAP中存在一个被称为访问控制列表(Access Control List,以下简称ACL)的文件,控制各类访问请求具有的权限。ACL文件中的控制方式具有极大的弹性:即可以在大范围上控制某一类资源可以被某类甚至某个用户访问,还可以具体到资源类中的任何一个属性。其授权的种类有读、搜索、比较、写这几种,可以单独,也可以组合使用。一般的格式是
access to “cn=*,ou=nudt,o=cs,c=cn”
by    “cn=tom,ou=nudt,o=cs,c=cn”   write
上面的控制设置就赋予了Tom对NUDT部门下的所有资源信息写的权利,当然也就有了读等这些权利了。详细的定制和完善ACL文件,可以使目录服务系统提供较好的安全性。此外,开发者还可以根据安全程度的需要,在LDAP中集成其它的安全工具,如KERBOUS, SSL等应用广泛的安全技术,适用不同层次用户的需要。

四、 LDAP如何工作以及如何开发LDAP的应用

LDAP是以服务器—客户端方式工作的,目录服务将数据库软件的逻辑结构分为前端(客户端)和后端(服务端和仓库)(图1)                   


       客户端是直接面对一般开发者和用户的;服务端是用于接收和解释客户请求,然后以客户的身份完成请求,并将完成结果返回给用户;仓库则是真正存储信息的地方。在LDAP中,服务端和仓库之间的连接采用了ODBC机制,所以可以使用任何支持和具有ODBC驱动程序的数据库软件,简单的可以是Linux系统中自带的GDBM或Alpha中的NDBM等数据库管理系统;也可以选用在功能和性能上更优越的Oracle和Sybase等系统,这样,可以提高系统的可移植性。
       现在已经有了许多基于LDAP协议开发出的资源管理系统和工具,如Openldap、NDS(Novell Directory Service)和ADS(Active Directory Service)等。它们已经逐渐的被使用在了各个需要目录服务的领域,并且应用的趋势在增强。
      Openldap是Michigan大学发布的免费软件,实现了LDAP v2的功能,并部分支持LDAP v3。它提供原代码,可以在大多数的Unix和Linux系统中安装。开发者能够直接利用它所附带的一些SHELL工具开发简单的应用,这些SHELL包括了查询(ldapsearch)、修改(ldapmodify)、删除(ldapdelete)、增加(ldapadd)等,关于他们的使用方法可以参照帮助文件;也可以调用它提供的程序接口(API)来开发应用,接口包括了查询(ldap_search)、修改(ldap_modify)、增加(ldap_add)、删除(ldap_delete)等。从模版的定制到资源信息的组织和输入都可以按照用户的要求进行,开发出满足你要求的应用软件。
我们以openldap1.2.7为例,进一步说明LDAP的工作方式。也就是如何使用openldap1.2.7来建立一个基于LDAP应用开发。Openldap1.2.7的后台数据库选用gdbm 1.8.0,Openldap实现了与gdbm的接口ldbm。SLAPD是Openldap实现的独立的LDAP服务的守护进程,SLURPD是Openldap实现的独立的LDAP更新和复制的守护进程。gdbm 是GNU发布的免费dbm,使用哈希排序的数据库例程集,与标准的UNIX下的dbm例程一样工作。gdbm有比Berkeley dbm更快的快速排序,并且它是可重入的。
进行开发前,先要安装gdbm和openldap。
得到gdbm1.8.0.tar,tar xvf gdbm1.8.0.tar
cd ./gdbm
./configure
make
make install
然后安装openldap:
tar xvf openldap.tar
cd ./ldap
./configure - - with-ldbm-api=gdbm,使ldap服务进程在后端使用gdbm数据库
make depend
make
make install
        接下来,进行基于LDAP协议的应用开发,大致分为四个步骤,这四个步骤同时也分别对应了建立协议中四种基本模型的过程:信息模型、命名模型、功能模型和安全模型。
       首先是建立信息模型,既计划需要管理的资源范围,在LDAP中所建立的信息以“实体”(entry)为单位,数据库的框架被称为“模版”(schema),每个实体的属性范围都会在模版中说明。模版的内容可以根据你的需要随意定制,可以将具有类似属性范围的信息归为一类,对于一类实体的说明采用了基于面向对象的机制,将模版中的每一个信息框架称为一个类“class”,而可以用这个类定义出你需要的事例,也就是一个个信息实体。
例如在模版文件中写入这样内容:
                        objectclass  person
{
requires
account,
userpassword
allows
sex,
……
}
        其中requires所包含的属性是每一个登记的用户都必须填写的属性范围,而allows所包含的则是可有可无的内容,这也给信息的存储控制增添了许多灵活性;其中,象系统管理员这种资源可以与一般用户合并,只是需要在属性中加入“类型”这样的属性用以区分是用户还是,为了安全,也可以将管理员单独设置为一类资源,在他的属性范围中包括帐号名、密码、管辖的范围(机器等设备的标示)、和联系方式等。对于其它的资源则根据实际情况分别设计,最后生成一个完整的模版文件。在openldap中,模版文件包括编辑yourname.oc.conf(定义信息对象类的文件)和yourname.at.conf(定义对象类中属性的文件)。
        对照上面的信息模型所建立的信息库还仅仅是一个个零散的资源记录,为了表现出它们之间的逻辑联系,需要完成LDAP中的命名模型。在平面式数据库中定位信息记录是通过每一条记录前面的标号或通过某些域的关键字匹配来完成的,实现过程大多是通过轮询,这在提高处理性能上就造成了许多障碍。LDAP中采用了更加合理的树形存储方式,将资源信息记录分别放置在树的根到叶的位置上,这种方式总是从不同的方面表现出了信息记录之间的某种从属的逻辑关系。
    对于每一个信息实体的定位使用全球唯一的命名方式既“可区分的名字”(DN:Distinguished Name),信息间的逻辑关系同时从DN中得到体现。可以参照Internet中的域名来理解DN的表示方法,如果你将所管理的信息按照地域进行分类,那么DN中就回包含你的分类标准,如从国家,到地区,在具体到某个部门中的人或者机器等等,格式是“cn=  ,ou=  ,o=  ,c=  ”。(其中的cn、ou、o、c都是一些标示关键字,分别表示用户名字、部门、地区和国家)这样当用户需要寻找某人的一些信息(如电话号码、Email地址等),如果知道他的工作地址,那么可以查找这个单位中所有符合条件的人员信息,如果查找的条件较具体,那么可以直接找到这个人的信息实体,即使是给的查找条件比较模糊,也可以找出单位中所有符合条件的人员信息,然后由用户从中挑选出需要的,信息的逻辑结构见(图2)
  cn            中国
 
  o             长沙              上海     北京
 
  ou           国防科大      市政府
 
 cn           张三               李四
        当然,分类方式完全可以按照你的需要进行选择,将所有的信息组织在数据库中。建立了信息模版之后,就可以开始生成数据库本身了。添加数据库信息可以是先写一个LDIF(Ldap Data Information Format)格式的文档,(每个ldif文件对应一个数据库,在LDAP中可以有多个数据库,)这种格式是与模版是对应的,将一个个信息实体罗列在文件中,然后使用SHELL工具“ldif2ldbm”将其转换为当前使用的数据库软件的格式,并且在启动服务端时告诉这些数据库文件的存储路径;
         如何真正的访问LDAP信息库中的记录则是在其功能模型中定义的内容,在应用开发中即开发一个LDAP的客户端和该客户端如何访问LDAP服务器。Openldap提供的仅仅是一系列的shell命令和API,我们要依靠这些底层调用来建立一个完整的用户访问和显示环境。如果不进行这方面的开发,可以使用普通的浏览器或者直接通过shell命令来操作,不过这种操作方式需要对LDAP的环境,配置情况,存储内容都有相当详细的了解,还要记住LDAP中复杂而又繁琐命令格式。普通用户根本不可能掌握。
         一个完整的访问过程包括四个步骤:初始化、绑定服务器、访问资源信息和断开连接。其中初始化是分配一个操作句柄;绑定服务器是向服务端提供自己的身份标示(含用户名和密码等);访问资源信息则是提出自己的访问请求(如查询和更新,他们分别有对应的标准API),等待并获取访问结果;断开连接是在所有的访问工作完成之后断开与服务端的连接,释放占用的资源。LDAP是简化了X.500中的许多操作,它在访问资源的方式中主要提供与“读”和“写”相关的操作手段。与“读”相关的有查找(search)和比较(compare),在查找时可以通过设置不同的“过滤器”(filter)达到获得自己需要的结果,过滤器中的内容可以涉及到任何相关属性的名称及取值范围等,并且支持与、或、非等关系表达式;“比较”则是将特定记录中某属性的值取出与自己的设定进行关系比较。与“写”相关的操作有增加、删除、修改和更名。增加是在信息库中增加新的信息记录,当然不能有相同唯一标示的记录存在;删除是将被认定为无用的信息记录从库中删除;修改是对于库中资源信息的某些属性值进行修改;更名则是更替唯一标示中最后一部分的内容,往往使用在仅仅这个资源的名称有了改变的情况下。
        如何防止资源信息的非授权访问和处理数据备份以及恢复是在安全模型中解决的问题。我们在下一章进行详细说明。
在处理好以上四个方面后 ,我们就可以启动LDAP服务了,在openldap中,启动服务器端的SLAPD(LDAP服务器进程),就可以响应用户的访问了。

 五、LDAP中的访问控制

        LDAP通过安全控制列表ACL(Access Control List)可以对信息库中的所有资源进行访问控制,甚至可以具体到一个资源记录中的某个属性。在openldap中,是在slapd.conf中定义的。Slapd.conf是LDAP最主要的配置文件,它说明了LDAP中使用的模板文件、日志文件、数据库位置、系统管理员帐号、系统管理员口令和各种安全机制等,其中主要是定义用户访问权限和建立LDAP的主从和主备关系。
对于用户访问权限,举例说明,我们可以将用户信件信息只授权给收件人,那么当该用户在绑定服务器并提供正确的帐号名和密码之后可以访问所有寄给他的信件,而其他用户试图超越自身的权限,获取其他用户的信件信息时会被立即拒绝。可以这样来描述权限的设置:
access to dn=”.*, User=Tom, o=XY, c=A”   by  dn=”User=Tom, o=XY, c=A”。
通过这条限制就将信件的访问权限完全的赋给了信件的收取者。同样,设备的访问权限是授予了相应的设备管理员,而用户这类资源则只能由系统管理员来控制。
对于用户密码这个属性,可以这样定义。
access to dn=".*,grp=general,ou=nudt,o=cs,c=cn" attr=userpassword
        by self                                       write
        by *                                         none

在slapd.conf中还可以定义referral配置,它的值应是另一个LDAP服务器或多个LDAP服务器的 URL,当用户进行查询时,没在本地找到,就会去referral指定的其它LDAP服务器进行查找。openldap直接在服务器上实现了referral,而是返回给客户referral地址,如图1。①向server发出请求;需要指向其它server时,②返回referral地址;③客户需重新向referral地址发出请求;④返回结果。为了网格用户的方便,需要屏蔽掉信息所在地址即referral,实现Chaining,即在服务器上自动支持referral,如图2。①向server发出请求;需要指向其它server时,②自动指向referral地址;③自动向referral地址发出请求;④返回结果。

图1
图2
有了referral的功能,我们就可以把网络内的LDAP服务器都建立这样一种联系,使得用户不必记住每个LDAP服务器都存储些什么内容以及它们的地址,只要记住离自己最近的LDAP服务器就可以了,如果用户要操作的内容不在该服务器上,会自动地寻找直到找到正确的服务器,得到正确的内容为止。

六、LDAP的主从备份功能

       安全机制中一个重要的内容就是备份和恢复,在LDAP中提供了主从备份服务器的机制,它方便和经济地实现了备份和恢复的功能。下面介绍主从服务器的配置方法和运行过程。
主服务器为了表明当前所运行服务进程的身份,必须在其配置文件(slapd.conf)中注明,并且还标明所有从(备份)服务进程的地址(IP或域名);从(备份)服务进程中需要标明它所面对的主服务进程的地址(IP或域名)。
主服务进程配置文件:
# Just show the necessary portion for replicate, ‘389’ is the port number
replica          host=172.26.20.98:389
               binddn=“adm=replica99,ou=nudt,o=cs,c=cn”
               bindmethod=simple      credentials=passwd
# The second slave server
replica          host=172.26.20.97:389
               。
               。
               。
(注):
binddn是主server向该从server发出操作命令时使用的身份。
    Bindmethod是标明使用的身份验证的方法,可以是“用户名+密码”也可以是kerberos方法。
    Credentials分别为密码和认证书

从server配置文件:
# Just show the necessary portion for replicate,98 is the IP of the master server
referral          ldap://172.26.20.98
updatedn        “adm=replica99,ou=nudt,o=cs,c=cn”
# Give updatedn the right to write the Directory Tree
access  to “.*,o=cs,c=cn”
       by “cn=replica99,ou=nudt,o=cs,c=cn”  write

(注):
referral:是当在本地无法提供信息数据时,提供下一个服务器的地址,可以通过再一次查询获取数据。
在备份服务进程的配置文件中,不必使用referral,因为它不真正的提供索引服务。
启动顺序
将主服务进程上的数据库文件拷贝给各个从(备份)服务进程,达到最初的一致。
启动主服务进程上的slapd进程
启动从服务进程上的slapd进程
启动主服务进程上的slurpd进程
slurpd是可以定时把主服务器上的修改进行备份,依据是由写操作产生的日志,如果由于网络的原因导致了备份失败,slurpd会自动进行重试,直到备份成功。
日志
设置在主服务进程r服务器上,需要修改配置文件:
# For log of the LDAP server ,you can set the file name you like
replogfile         /home/ldap/nhpce.replog
实际此文件只是给slurpd进程使用,作为一个广播操作命令的中转站,真正的日志文件在/var/tmp下,文件名称为slurpd.replog。
一个主服务器的从服务器个数是没有限制的,通过以上设置,可以产生了一个由主服务器进程和一个或几个从服务进程组成的服务机群,主守护进程作为整个服务机群的核心,其始终维持系统信息的一致性,因为除了查询以外的请求都首先由它操作自己的信息库,然后再将该操作广播给各个从服务器,同步更新各自的信息库。而对于查询请求,由于不会造成信息内容的改变,所以可以由各个从服务器完成,这样的方式特别适用于象目录服务这样查询请求远远多于修改等请求的应用。

下面是一个主服务器和多个从服务器组成的服务机群处理访问的步骤:
客户向服务机群发出请求(客户使用的可能是IP或域名),此请求可以被一个前端的域名服务器转给一个从服务进程。
从服务进程将除了搜索以外的请求发向主服务进程。
主服务进程根据请求成功完成相应操作之后,将操作广播给所有的从服务进程。
从服务进程r此时完成主服务进程要求的操作。
从服务进程将操作结果返回给客户。

图3
这样的服务器机群,每个从服务器都有一个主服务器信息的完全备份,当出现主服务器因为各种原因无法提供服务或无法恢复其信息数据时,则可将备份服务器上的数据信息转移到主服务器上,继续提供服务;或者直接将备份服务器的配置文件进行修改,从新启动服务进程,将其身份变为主服务进程。而且这些处理都十分方便。如果在平时就做好准备,那么可以在极短的时间内恢复服务。
实际上,不但一个主服务器可以对应多个从服务器,而且一个从服务器可以从多个主服务器上备份信息,形成一个主备的服务机群。
        采用主备关系服务机群的系统逻辑视图如下:                                        

 

图4
        在上图中,设置了两个主服务信息库,它们平时可以是各不相干的角色,管理各自的域内事务,而后面的两个备份信息库则为了提高使用效率,同时作为了两个主服务信息库的备份库。对于上面两种方式的实现,其配置文件的写法大体相同。
不仅如此,多个LDAP服务器之间可以互为主从关系,即每个服务器都把自己管理部分定义为主服务信息库,而其他所有的LDAP服务器把与之相应的信息库定义为该主信息库的从信息库。这样,实际上每个LDAP服务器的地位是平等的,存储的信息则包括了全局的信息。每个单位只有对本单位的LDAP服务器上本单位的信息具有写和修改的权限。而修改的同时各个单位的LDAP服务器上的相应的信息就都修改了,每个单位的用户都可以在本地的LDAP上访问全局的信息,而且基本上能保证是最新的信息,这种方式有响应时间短,资源利用率高,抗毁能力强的优点。充分地发挥了分布式系统特点。缺点是每一次写操作都要广播到每个LDAP服务器,增加了网络的负担。但因为目录服务的特点是读操作远远大于写操作,实际上对网络负载影响不大。具体逻辑关系见下图。
图5
在配置上需要在每个LDAP服务器上建立相应的slapd.conf文件,在配置文件中声明自那部分是主服务器并定义每个从服务器的位置和权限。自己作为从服务器从那些LDAP服务器中以什么身份取得那些信息。下面举例说明。在国家高性能计算环境中基于LDAP的目录服务采用了这种组织形式,它的LDAP的配置文件如下,本地服务器是国防科大。
下面是slapd.conf简化了的写法。

#NHPCE Slapd Configure File
include                /etc/openldap/slapd.oc.conf
include                /etc/openldap/slapd.at.conf
schemacheck        on
pidfile                /var/run/slapd.pid
argsfile        /var/run/slapd.args
access to attr=userpassword
        by self                                                read
        by dn="cn=Manager_nudt,grp=GENERAL,ou=NUDT,o=CS,c=CN"        read
        by *                                                none       

#ldbm definition for the NUDT master database
database        ldbm
suffix                "ou=NUDT,o=CS,c=CN"
directory        /etc/openldap/database/nudt_db
rootdn                "cn=Manager_nudt,grp=GENERAL,ou=NUDT,o=CS,c=CN"
replogfile        /etc/openldap/database/nudt_db/slapd.replog
replica                host=159.226.39.173:389
                binddn="cn=Replicator_nudt,grp=GENERAL,ou=NUDT,o=CS,c=CN"
                bindmethod=simple
                credentials=secret
replica                host=159.226.39.144:389
                binddn="cn=Replicator_nudt,grp=GENERAL,ou=NUDT,o=CS,c=CN"
                bindmethod=simple
                credentials=secret
index                default                none
defaultaccess                                                read
access to dn=".*,grp=general,ou=nudt,o=cs,c=cn"        attr=userpassword
        by self                                                write
        by *                                                none
access to dn=".*,grp=general,ou=nudt,o=cs,c=cn"        attrs=email,telephone,description
        by self                                                write
        by *                                                read       
access to dn="cn=Manager_nudt,grp=GENERAL,ou=NUDT,o=CS,c=CN"
        by *                                                none
access to dn="cn=Replicator_nudt,grp=GENERAL,ou=NUDT,o=CS,c=CN"
        by self                                                write
        by *                                                none
lastmod                                                        on

#ldbm definition for the NUDT slave database
database        ldbm
suffix                "ou=CAS,o=BJ,c=CN"
directory        /etc/openldap/database/cas_db
rootdn                "cn=Replicator_cas,grp=GENERAL,ou=CAS,o=BJ,c=CN"
updatedn        "cn=Replicator_cas,grp=GENERAL,ou=CAS,o=BJ,c=CN"
index                default                none
defaultaccess                                                read       
 
#ldbm definition for the JNICT slave database
database        ldbm
suffix                "ou=JNICT,o=WX,c=CN"
directory        /etc/openldap/database/jnict_db
rootdn                "cn=Replicator_jnict,grp=GENERAL,ou=JNICT,o=WX,c=CN"
updatedn        "cn=Replicator_jnict,grp=GENERAL,ou=JNICT,o=WX,c=CN"
index                default                none
defaultaccess                                                read       

七、 LDAP的应用前景

目录服务系统将在越来越多的网络应用系统中使用,特别是一些大型的网络应用(一些大型网站也会需要)当中,这也是各个大公司为什么要将此作为网络基础软件来看待。
集中单点管理、分布容错和单一登入点(包括合理的认证服务)的功能是具有巨大的诱人优势。
使用LDAP可以开发大的应用软件项目,比如可以应用在C4ISR中,当然会还有其它应用。
小的项目也会需要目录服务的的支持,目录服务是一个在逻辑上集中存储资源信息的特殊数据库,许多数据库开发都可以用LDAP替代,而且LDAP更易于开发,更灵活。
目录服务系统将从现行的V2、V3继续发展,具有目录服务功能的网络DEN(发布、发现和获取)即将出现,不经对网络上的高层资源进行集中管理,而且对网络基础设备的集中管理,例如:具有目录路由器。一句话:就是DEN将网络服务和网络设备的管理更好地继承到普通管理技术中。

转载于:https://www.cnblogs.com/anf/archive/2007/05/28/762215.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值