openldap 资料

LDAP概念和原理介绍php

相信对于许多的朋友来讲,可能据说过LDAP,可是实际中对LDAP的了解和具体的原理可能还比较模糊,今天就从“什么是LDAP”、“LDAP的主要产品”、“LDAP的基本模型”、“LDAP的使用案例”四个方面来作一个介绍。html

咱们在开始介绍以前先来看几个问题:java

1. 咱们平常的办公系统是否是有多个?数据库

2. 每一个系统之间是否是都有独立的帐号密码?安全

3. 密码多了,有时候半天想不起来哪一个密码对应哪一个系统?服务器

4. 每次新项目的开发,都须要从新开发和维护一套用户密码?网络

5. 维护多套系统的用户是否是很是头疼?数据结构

So,现在你们不再用为上面的的问题头疼了,由于“LDAP统一认证服务”已经帮助你们解决这些问题了。那么相信你们对“LDAP统一认证服务”是干吗的已经有一个大概的了解了吧?那咱们开始今天要讲解的内容吧!app

1、什么是LDAP?框架

(一)在介绍什么是LDAP以前,咱们先来复习一个东西:“什么是目录服务?

    1. 目录服务是一个特殊的数据库,用来保存描述性的、基于属性的详细信息,支持过滤功能。

    2. 是动态的,灵活的,易扩展的。

    如:人员组织管理,电话簿,地址簿。

(二)了解完目录服务后,咱们再来看看LDAP的介绍:

LDAP(Light Directory Access Portocol),它是基于X.500标准的轻量级目录访问协议。

目录是一个为查询浏览搜索而优化的数据库,它成树状结构组织数据,相似文件目录同样。

目录数据库和关系数据库不一样,它有优异的读性能,但写性能差,而且没有事务处理、回滚等复杂功能,不适于存储修改频繁的数据。因此目录天生是用来查询的,就好象它的名字同样。

LDAP目录服务是由目录数据库和一套访问协议组成的系统。

(三)为何要使用

LDAP是开放的Internet标准,支持跨平台的Internet协议,在业界中获得普遍承认的,而且市场上或者开源社区上的大多产品都加入了对LDAP的支持,所以对于这类系统,不需单独定制,只须要经过LDAP作简单的配置就能够与服务器作认证交互。“简单粗暴”,能够大大下降重复开发和对接的成本。

咱们拿开源系统(YAPI)作案例,只需作一下简单的几步配置就能够达到LDAP的单点登陆认证了:

 

复制代码
{ "ldapLogin": { "enable": true, "server": "ldap://l-ldapt1.ops.dev.cn0.qunar.com", "baseDn": "CN=Admin,CN=Users,DC=test,DC=com", "bindPassword": "password123", "searchDn": "OU=UserContainer,DC=test,DC=com", "searchStandard": "mail" } }
复制代码

 

是否是很方便呢?

 

2、LDAP的主要产品

细心的朋友应该会主要到,LDAP的中文全称是:轻量级目录访问协议,说到底LDAP仅仅是一个访问协议,那么咱们的数据究竟存储在哪里呢?

来,咱们一块儿看下下面的表格:

厂商

产品

介绍

SUN

SUNONE Directory Server

基于文本数据库的存储,速度快 。

IBM

IBM Directory Server

基于DB2 的的数据库,速度通常。

Novell

Novell Directory Server

基于文本数据库的存储,速度快, 不经常使用到。

Microsoft 

Microsoft Active Directory

基于WINDOWS系统用户,对大数据量处理速度通常,但维护容易,生态圈大,管理相对简单。

Opensource

Opensource

OpenLDAP 开源的项目,速度很快,可是非主 流应用。

 

 没错,这就是正常存储数据的地方,而访问这些数据就是经过咱们上述所说的LDAP。相信到这里你们应该了解二者之间的关系了吧!

3、LDAP的基本模型

每个系统、协议都会有属于本身的模型,LDAP也不例外,在了解LDAP的基本模型以前咱们须要先了解几个LDAP的目录树概念:

(一)目录树概念

1. 目录树:在一个目录服务系统中,整个目录信息集能够表示为一个目录信息树,树中的每一个节点是一个条目

2. 条目:每一个条目就是一条记录,每一个条目有本身的惟一可区别的名称(DN)。

3. 对象类:与某个实体类型对应的一组属性,对象类是能够继承的,这样父类的必须属性也会被继承下来。

4. 属性:描述条目的某个方面的信息,一个属性由一个属性类型和一个或多个属性值组成,属性有必须属性和非必须属性。

(二)DC、UID、OU、CN、SN、DN、RDN

关键字

英文全称

含义

dc

Domain Component

域名的部分,其格式是将完整的域名分红几部分,如域名为example.com变成dc=example,dc=com(一条记录的所属位置)

uid

User Id

用户ID songtao.xu(一条记录的ID)

ou

Organization Unit

组织单位,组织单位能够包含其余各类对象(包括其余组织单元),如“oa组”(一条记录的所属组织)

cn

Common Name

公共名称,如“Thomas Johansson”(一条记录的名称)

sn

Surname

姓,如“许”

dn

Distinguished Name

“uid=songtao.xu,ou=oa组,dc=example,dc=com”,一条记录的位置(惟一)

rdn

Relative dn

相对辨别名,相似于文件系统中的相对路径,它是与目录树结构无关的部分,如“uid=tom”或“cn= Thomas Johansson”

 

 (三)基本模型:

信息模型:

  命名模型:

  

  功能模型:

  

  安全模型:

  

4、LDAP的使用

  那咱们是如何访问LDAP的数据库服务器呢?

  

  统一身份认证主要是改变原有的认证策略,使须要认证的软件都经过LDAP进行认证,在统一身份认证以后,用户的全部信息都存储在AD Server中。终端用户在须要使用公司内部服务的时候,都须要经过AD服务器的认证。

  那么程序中是如何访问的呢? 咱们以PHP脚本做为例子:

$ldapconn = ldap_connect(“10.1.8.78") $ldapbind = ldap_bind($ldapconn, 'username', $ldappass); $searchRows= ldap_search($ldapconn, $basedn, "(cn=*)"); $searchResult = ldap_get_entries($ldapconn, $searchRows); ldap_close($ldapconn);

1. 链接到LDAP服务器;

2. 绑定到LDAP服务器;

3. 在LDAP服务器上执行所需的任何操做;

4. 释放LDAP服务器的链接;

 

   这章就只介绍LDAP的一些概念和基本的原理,代码的操做下一章再展开来说错或讲的很差的地方,还望指教!~

 

ldap简要介绍

  目录服务是一个特殊的数据库,它为读,浏览和搜索进行了优化。目录能够用来保存描述性的,基于属性的信息,而且支持复杂的过滤搜索能力。目录一般不支持在通常的数据库管理系统中支持的复杂的事务处理或者回滚机制——这些机制是为处理大容量的复杂更新操做而设计的。目录更新只是简单的“全部或者没有”的更新——若是它们被容许的话。目录被优化为针对大量的查找或者搜索操做进行快速的响应。它们能够具备大范围复制信息的功能,以便提升可用性和可靠性,同时缩短响应时间。

  LDAP是轻量目录访问 协议,英文全称是Lightweight Directory Access Protocol, 通常都简称为LDAP。它是基于X.500标 准的,可是简单多了而且能够根据须要定制。与X.500不一样,LDAP支持TCP/IP,这对访问Internet是必须的。LDAP的核心规范在RFC中都有定义,全部与LDAP相关的RFC均可以在LDAPman RFC网页中找到。
  
  LDAP是 一个用来发布目录信息到许多不一样资源的协议。一般它都做为一个集中的地址本使用,不过根据组织者的须要,它能够作得更增强大。
  
1.2. LDAP是电话簿
  LDAP其 实是一电话簿,相似于咱们所使用诸如NIS(Network Information Service)DNS (Domain Name Service)等网络目录,也相似于你在花园中所看到的树木。
 
 1.3. LDAP是否是数据库
  很多LDAP开 发人员喜欢把LDAP与关系数据库相比,认为是另外一种的存贮方式,而后在读性能上进行比较。实际 上,这种对比的基础是错误的。LDAP和关系数据库是两种不一样层次的概念,后者是存贮方式(同一层 次如网格数据库,对象数据库),前者是存贮模式和访问协议。LDAP是一个比关系数据库抽象层次更 高的存贮概念,与关系数据库的查询语言SQL属同一级别。LDAP最 基本的形式是一个链接数据库的标准方式。该数据库为读查询做了优化。所以它能够很快地获得查询结果,不过在其它方面,例如更新,就慢得多。
  从另外一个意义上 LDAP是实现了指定的数 据结构的存贮,它是一种特殊的数据库。可是LDAP和通常的数据库不一样,明白这一点是很重要的。 LDAP对查询进行了优化,与写性能相比LDAP的 读性能要优秀不少。
  就象SybaseOracleInformixMicrosoft的数据库管理系统(DBMS)是用于 处理查询和更新关系型数据库那样,LDAP服务器也是用来处理查询和更新LDAP目录的。换句话来讲LDAP目录也是一种类型的 数据库,但不是关系型数据库。要特别注意的是,LDAP一般做为一个hierarchal数据库使用,而不是一个关系数据库。所以,它的结构用树来表示比用表格好。正由于这样,就 不能用SQL语句了。
 

ladp- 2. LDAP的特色

  2.1. LDAP的优点
  2.1.1 跨平台
   LDAP最大的优点是:能够在任何计算机平台上,用很容易得到的并且数目不断增长的LDAP的客户端程序访问LDAP目录。并且也很容易定 制应用程序为它加上LDAP的支持。
   LDAP协议是跨平台的和标准的协议,所以应用程序就不用为LDAP目录放在什么样的服务器上操心了。实际上,LDAP得 到了业界的普遍承认,由于它是Internet的标准。产商都很愿意在产品中加入对LDAP的支持,由于他们根本不用考虑另外一端(客户端或服务端)是怎么样的。LDAP服务器能够是任何一个开发源代码或商用的LDAP目 录服务器(或者还多是具备LDAP界面的关系型数据库),由于能够用一样的协议、客户端链接软件 包和查询命令与LDAP服务器进行交互。与LDAP不 同的是,若是软件产商想在软件产品中集成对DBMS的支持,那么一般都要对每个数据库服务器单独 定制。
  2.1.2 费用及维护
  不象不少商用的关系型数据库,你没必要为LDAP的 每个客户端链接或许可协议付费。
  大多数的LDAP服 务器安装起来很简单,也容易维护和优化。
  2.1.3 复 制技术
  LDAP服务器能够用""""的方法复制部分或所有数据,例如:能够把数据""到远程的办公室,以增长数据的安全性。复制技术是内置在LDAP服 务器中的并且很容易配置。若是要在DBMS中使用相同的复制功能,数据库产商就会要你支付额外的费 用,并且也很难管理。
  2.1.4 允 许使用ACI
  LDAP容许你根 据须要使用ACI(通常都称为ACL或者访 问控制列表)控制对数据读和写的权限。例如,设备管理员能够有权改变员工的工做地点和办公室号码,可是不容许改变记录中其它的域。ACI能够根据谁访问数据、访问什么数据、数据存在什么地方以及其它对数据进行访问控制。由于这些都是由LDAP目录服务器完成的,因此不用担忧在客户端的应用程序上是否要进行安全检查。
  
2.2. LDAP存储什么数据
  LDAP对 于这样存储这样的信息最为有用:也就是数据须要从不一样的地点读取,可是不须要常常更新。例如,这些信息存储在LDAP目 录中是十分有效的:
  公司员 工的电话号码簿和组织结构图
  客 户的联系信息
  计算机管理需 要的信息,包括NIS映射、email假 名,等等
  软件包的配置信息
  公用证书和安全密匙
  
2.3. 什 么时候该用LDAP存储数据
  大多数的LDAP服 务器都为读密集型的操做进行专门的优化。所以,当从LDAP服务器中读取数据的时候会比从专门为OLTP优化的关系型数据库中读取数据快一个数量级。也是由于专门为读的性能进行优化,大多数的LDAP目录服务器并不适合存储须要须要常常改变的数据。例如,用LDAP服 务器来存储电话号码是一个很好的选择,可是它不能做为电子商务站点的数据库服务器。
  如 果下面每个问题的答案都是"",那么把 数据存在LDAP中就是一个好主意。
   须要在任何平台上都能读取数据吗?
   每个单独的记录项是否是每一天都只有不多的改变?
   能够把数据存在平面数据库(flat database)而不是关系型数据库中吗?换句话来讲,也就是无论什么范式不范式的,把全部东西都存在一个记录中(差很少只要知足第一范 式)。
  最后一个问题可能会唬住一些人,其实用平面数据库去存储一些关系型的数据也是很 通常的。例如,一条公司员工的记录就能够包含经理的登陆名。用LDAP来存储这类信息是很方便的。 一个简单的判断方法:若是能够把保数据存在一张张的卡片里,就能够很容易地把它存在LDAP目录 里。
 

ladp- 3. LDAP的基本模型

  3.1 信息模型:描述LDAP的信息表示方式
  在LDAP中 信息以树状方式组织,在树状信息中的基本数据单元是条目,而每一个条目由属性构成,属性中存储有属性值;LDAP中 的信息模式,相似于面向对象的概念,在LDAP中每一个条目必须属于某个或多个对象类(Object Class),每一个Object Class由 多个属性类型组成,每一个属性类型有所对应的语法和匹配规则;对象类和属性类型的定义都可以使用继承的概念。每一个条目建立时,必须定义所属的对象类,必须提 供对象类中的必选属性类型的属性值,在LDAP中一个属性类型能够对应多个值。
  在LDAP中把对象类、属性类型、语法和匹 配规则统称为Schema,在LDAP中有 许多系统对象类、属性类型、语法和匹配规则,这些系统SchemaLDAP标准中进行了规定,同时不一样的应用领域也定义了本身的Schema, 同时用户在应用时,也能够根据须要自定义Schema。这有些相似于XML,除了XML标准中的XML定义外,每一个行业都有本身标准的DTDDOM定义,用户也能够自扩展;也如同XML,在LDAP中也鼓励用户尽可能使用标准的Schema,以 加强信息的互联互通。
  在Schema中 最难理解的是匹配规则,这是LDAP中为了加快查询的速度,针对不一样的数据类型,能够提供不一样的匹 配方法,如针对字符串类型的相等、模糊、大于小于均提供本身的匹配规则。
  
3.2 命名模型:描述LDAP中的数据如何组织
  LDAP中 的命名模型,也即LDAP中的条目定位方式。在LDAP中 每一个条目均有本身的DNRDNDN是该条目在整个树中的惟一名称标识,RDN是条目 在父节点下的惟一名称标识,如同文件系统中,带路径的文件名就是DN,文件名就是RDN
  
3.3 功能模型:描述LDAP中的数据操做访问
  在LDAP中 共有四类10种操做:查询类操做,如搜索、比较;更新类操做,如添加条目、删除条目、修改条目、修 改条目名;认证类操做,如绑定、解绑定;其它操做,如放弃和扩展操做。除了扩展操做,另外9种是LDAP的标准操做;扩展操做是LDAP中为了增长新 的功能,提供的一种标准的扩展框架,当前已经成为LDAP标准的扩展操做,有修改密码和StartTLS扩展,在新的RFC标准和草案中正在 增长一些新的扩展操做,不一样的LDAP厂商也均定义了本身的扩展操做。
  
3.4 安 全模型:描述LDAP中的安全机制
  LDAP中的安全模型主要经过身份认证、安全通道和访问控制来实现。
   3.4.1 身份认证
  在LDAP中提供三种认证机制,即匿名、基 本认证和SASLSimple Authentication and Secure Layer)认证。匿名认证即不对用户进行认证,该方法仅对彻底公开的方式适用;基 本认证均是经过用户名和密码进行身份识别,又分为简单密码和摘要密码认证;SASL认证即LDAP提供的在SSLTLS安全通道基础上进行的身份认证,包括数字证书的认证。
   3.4.2 通信安全
  在LDAP中提供了基于SSL/TLS的通信安全保障。SSL/TLS是基于PKI信息安全技术,是目前Internet上普遍采用的安全服务。LDAP经过StartTLS方式启动TLS服务,能够提供通信中 的数据保密性、完整性保护;经过强制客户端证书认证的TLS服务,同时能够实现对客户端身份和服务 器端身份的双向验证。
  3.4.3 访 问控制
  虽然LDAP目前并没有访 问控制的标准,但从一些草案中或是事实上LDAP产品的访问控制状况,咱们不难看出:LDAP访问控制异常的灵活和丰富,在LDAP中是基于 访问控制策略语句来实现访问控制的,这不一样于现有的关系型数据库系统和应用系统,它是经过基于访问控制列表来实现的,不管是基于组模式或角色模式,都摆脱 不了这种限制。
  在使用关系型数据库系统开发应用时,每每是经过几个固定的数据库用户名 访问数据库。对于应用系统自己的访问控制,一般是须要创建专门的用户表,在应用系统内开发针对不一样用户的访问控制受权代码,这样一旦访问控制策略变动时, 每每须要代码进行变动。总之一句话,关系型数据库的应用中用户数据管理和数据库访问标识是分离的,复杂的数据访问控制须要经过应用来实现。
  而对于LDAP,用户数据管理和访问标识是 一体的,应用不须要关心访问控制的实现。这是因为在LDAP中的访问控制语句是基于策略语句来实现 的,不管是访问控制的数据对象,仍是访问控制的主体对象,均是与这些对象在树中的位置和对象自己的数据特征相关。
   在LDAP中,能够把整个目录、目录的子树、制定条目、特定条目属性集或符合某过滤条件的条目做 为控制对象进行受权;能够把特定用户、属于特定组或全部目录用户做为受权主体进行受权;最后,还能够定义对特定位置(例如IP地址或DNS名称)的访问权。
  

ladp-4. LDAP数 据结构

  LDAP是实现了指定的数据结构的 存贮,它包括如下能够用关系数据库实现的结构要求:树状组织、条目认证、类型定义、许可树形记录拷贝。
   
4.1 树 状组织
   不管是X500仍是LDAP都是采用树状 方式进行记录。每个树目录都有一个树根的入口条目,子记录所有是这一根条目的子孙。这是目录与关系数据类型最大的区别(关系数据库的应用结构也可实现树 状记录)。所以,把目录看做是更高级的树状数据库也何尝不可,只不过除此外,它不能实现关系存贮的重要功能。
   
4.2 条 目和条目认证
   LDAP是以条目做为认证的根据。ROOT的 权限认证与目录自己无关,但除此外全部条目的认证权限由条目自己的密码进行认证。LDAP能够配置 成各类各样不一样的父子条目权限继承方式。
  每个条目至关于一个单一的平面文本记录,由 条目自身或指定的条目认证进行访问控制。所以,LDAP定义的存贮结构等同于一批树状组织的平面数 据库,并提供相应的访问控制。
  条目中的记录以名-值 对的形式存在,每个名值对必须由数据样式schema预约义。所以,LDAP能够看做是以规定的值类型以名值对形式存贮在一系列以树状组织的平面数据库的记录的集合。
  
4.3 数 据样式(schema
  数据样式schema是 针对不一样的应用,由用户指定(设计)类和属性类型预约义,条目中的类(objectclass)和 属性必须在在LDAP服务器启动时载入内存的schema已 有定义。所以,AD活动目录中的条目记录就必须符合Active Directoryschema中。若是已提供的schema中的定义不够用,用户能够自行定义新的schema.
   在http://ldap.akbkhome.com/index.php中能够看到经常使用的schema
  
4.4 对象类型(objectClass)
  由于LDAP目 录能够定制成存储任何文本或二进制数据,到底存什么要由你本身决定。LDAP目录用对象类型(objectclass)的概念来定义运行哪一类的对象使用什么属性。在几乎全部的LDAP服务器中,你都要根据本身的须要扩展基本的LDAP目 录的功能,建立新的对象类型或者扩展示存的对象类型。
  条目中的记录经过objectclass实现分类,objectClass是 一个继承性的类定义,每个类定义指定必须具有的属性。如某一条目指定必须符合某个类型,则它必须具有超类所指定的属性。
  经过objectclass分类,分散的条 目中的记录就实际上创建了一个索引结构,为高速的读查询打下了基础。Objectclass也是过 滤器的主要查询对象。
 
 4.5 过滤器和语法
  LDAP是一个查询为主的记录结构,不管是何种查询方式,最终都由过滤器缺点查询的条件。过滤器至关于SQL中的WHERE子句。任何LDAP的类过滤和字符串都必须放在括号内,如(objectclass=*,指列出全部类型的记录(不过度类)。
  可 以使用=>=<=~=(约等于)进行比较,如(number<=100)。合并条件是最怪的,必须把操做符放在两个操做对象的前面而不是中间,单一操 做对象用括号括起来。如
  l AB,不是A&B,而是(&(A)(B))。
  或使用"|"表示;
  非使用""表示。
   对于"",或""在 操做符后能够跟多个条件表达式,但非后则只参是单个表达式。
  详见RFC1558
  
4.6 树移植
  LDAP最 重要的特性和要求并非读性能,而是扩展性。这一特性是经过树移植和树复制实现的。按LDAPRFC要求,LDAP目录应该能够任意地在不一样的目录 间链接、合并并实现自动复制,及自动性同步。这意味着用户能够在任一LDAP中访问条目,而不用管 其中某一部分是否复制自全世界另外一目录中的记录,同时另外一目录中的记录一样在正常运做。
   这一特性若是在关系数据库中实现,意味着要使用程序化的非规范化预复制。相似于汇总帐目的设计。
   
4.7 LDIF交 换文件
   LDIFLDAP约定的记录交换格式, 以平面文本的形式存在,是大部分LDAP内容交换的基础,如拷贝、添加、修改等操做,都是基于LDIF文件进行操做。
  
4.8 JAVACORBA对象串行化存储
  网络高效率的访问加上JAVA的跨平台能力,当把JAVACORBA对象串行化后存储到LDAP目录上时,能够产 生非同通常的集成效果--实际上,这正是EJB.NET的网络定位基础技术。
  使用JAVACORBA对象存储时,必须首先让LDAP服务支持该对象定义,也就是说包含qmail.schemacorba.schema
  JAVA必须存储在objectclass=javacontainer的 条目中,并且必须带有cn属性,这意味着除非该JAVA类 专门实现了DirContext接口,对于大多数JAVA类 来讲,只能采用DirContext代替Context实 现bind的添加操做。取出JAVA类相对 要简单得多,只需使用context.lookup()得到该对象的句柄,而后强制造型成所须要的 对象就能够了,如:
  Person p=(Person)contex.lookup("cn=elvis,dc=daifu,dc=com");
  这个句法在EJB的程序中,是常常用到的。
  使用CORBA的跨语言性质,使用CORBA存储对象比JAVA更加诱人,这意味着所存储的对象能够被任何语言编写的客户端访问。其实,微软的.net说到底也很是简单,无非是把COM对象存储到微 软自家的目录ActiveDirectory里面,从而能够在网络范围内使用任何微软平台的语言进 行对象访问而已。众所周知,COM就是与CORBA相 对的微软规范。
  使用对象串行化技术,能够把经常使用对象如某个打印机,某个客户直接存储到LDAP中,而后快速获取该对象的引用,这样,就比把对象信息存储到关系数据库中,分别取出属性,而后再初始 化对象操做的作法,效率要高得多了。这是LDAP目前比普通关系数据库存储要优秀的地方,而对象数 据库还不成熟.

表1、LDAP经常使用的关键字:

关键字

英文全称

含义

dc

Domain Component

域名的部分,其格式是将完整的域名分红几部分,如域名为example.com变成dc=example,dc=com

uid

User Id

用户ID,如“tom”

ou

Organization Unit

组织单位,相似于Linux文件系统中的子目录,它是一个容器对象,组织单位能够包含其余各类对象(包括其余组织单元),如“market”

cn

Common Name

公共名称,如“Thomas Johansson”

sn

Surname

姓,如“Johansson”

dn

Distinguished Name

唯一辨别名,相似于Linux文件系统中的绝对路径,每一个对象都有一个唯一的名称,如“uid= tom,ou=market,dc=example,dc=com”,在一个目录树中DN老是唯一的

rdn

Relative dn

相对辨别名,相似于文件系统中的相对路径,它是与目录树结构无关的部分,如“uid=tom”或“cn= Thomas Johansson”

c

Country

国家,如“CN”或“US”等。

o

Organization

组织名,如“Example, Inc.”

表一 LDAP经常使用的关键字列表

相关文章
相关标签/搜索