柴少鹏的官方网站 技术在分享中进步,水平在学习中升华

Centos6.4 ldap服务器介绍(一)

一、目录服务介绍

       目录一般用来包含描述性的、基于属性的信息,例如,通讯簿就可使用目录的形式来保存。目录服务是一种特殊的数据库系统,专门针对数据的读取、浏览和搜索操作进行了特定的优化。

       目录服务按照树状形式存储信息,目录包含给予属性的描述性信息,并且支持高级的过滤功能。目录不支持大多数事务形数据库所支持的高吞吐量和复杂的更新操作。目录服务适用于提供大量的查询和搜索操作,不适合大量的写入操作。

       域名服务就是一个典型的大范围分布式的目录服务。这里我们说的是ldap统一认证服务。

二、ldap介绍

2.1 什么是ldap服务:

      LDAP是Light weight Directory Access Protocol(轻量级目录访问协议)的缩写,其前身是更为古老的DAP协议。它是基于X.500标准的,但是很简单,并且可以根据需要定制。与X.500不同,LDAP支持TCP/IP,这对访问Internet是必需的。LDAP的核心规范在RFC中都有定义, 大体上讲LDAP协议定义了和后台数据库通信的方法及客户端软件和LDAP协议之间的通信标准。

     LDAP Sever指的是实现LDAP协议的软件,例如OpenLDAP等。Datastorage指的是OpenLDAP的数据存储,如关系型数据库(MySQL)或查询效率更高的嵌入式数据库(BerkeleyDB),甚至是平面文本数据库(—个txt的文本文件)。可见,OpenLDAP软件只是LDAP协议的一种实现形式,并不包括后台数据库存储。但在很多时候管理员经常将LDAP Server和DataStorage放在同一台服务器,这样就产生了人们通常所说的“LDAP数据库”。虽然后台数据库(backend)可以是多种多样,但LDAP协议还规定了数据的存储方式。LDAP数据库是树状结构的,与DNS类似。


2.2  ldap的功能:


查询操作:允许查询目录和取得数据,其查询性能比关系数据库好。

更新操作:目录的更新操作没关系数据库方便,更新性能较差,但也同样允许进行添加、删除、修改等操作。

复制操作:前面也提到过,LDAP是一种典型的分布式结构,提供复制操作,可将主服务器的数据的更新复制到设置的从服务器中。

认证和管理操作:允许客户端在目录中识别自己,并且能够控制一个会话的性质。


2.3 ldap的特点:

LDAP是一种目录服务,保存在特殊的数据库中,数据的读取速度远高于写入速度。

LDAP对查询做了优化,读取速度优于普通关系数据库。

LDAP不支持事务、不能进行回滚,需要进行这些操作的应用只有选择关系数据库。

LDAP采用服务器/客户端模式,支持分布式结构。

LDAP中的条目以树形结构组织和存储,而非表格,不用sql语句维护。ldap支持异类数据存储,ldap存储的数据可以是文本资料、二进制图片等。

LDAP基于Internet协议,是一个跨平台的、标准的协议,直接运行在简单和通用的TCP/IP或其他可靠的传输协议层上,使连接的建立和包的处理简单、快捷,对于互联网和企业网应用都很方便。

LDAP协议简单,通过使用查找操作实现列表操作和读操作。

LDAP通过引用机制实现分布式访问,通过客户端API实现分布式操作(对于应用透明),平衡了负载。

LDAP实现具有低费用、易配置和易管理的特点,并提供了满足应用程序对目录服务所需求的特性。


2.4 ldap的基本模型

LDAP模型是从X.500协议中继承过来的。是LDAP的一个组成部分,用于指导客户如何使用目录服务。
LDAP 定义了四个模型,包括信息模型,命名模型,功能模型,安全模型。
1.LDAP 信息模型(LDAP information model)
LDAP信息模型用于描述LDAP中信息的表达方式。
LDAP信息模型包含三部分 Entries Attributes Values (条目 属性 值)。

LDAP的基本模型是建立在"条目"(Entry)的基础上。一个条目是一个或多个属性的集合,并且具有一个全局唯一的"可区分名称"(用dn表示)。与关系型数据(后面简称数据库)进行类比,一个条目相当于数据库中的一条记录,而dn相当于数据库中记录的关键字,属性相当于数据库中的字段。


LDAP每条记录必须包含一个对象类型,且对象类型需要赋予至少一个值。每个值将用作一条LDAP记录进行数据存储的模板,模板中包含了一条记录中数个必须被赋值的属性和一系列可选的属性。

提示:dn必须是全局唯一的。


条目,也叫记录项,是LDAP中最基本的颗粒,就像数据库中的记录。通常对LDAP的添加、删除、更改、检索都是以条目为基本对象的。 

dn:每一个条目都有一个唯一的标识名(distinguished Name,DN),DN相当于关系数据库中的关键字:它是一个识别属性,通常用于检索。


RDN是DN中与目录树的结构无关的部分。在LDAP目录中存储的记录项都要有一个名字,这个名字通常存在cn(Common Name)这个属性里。因为几乎所有的东西都有一个名字,在LDAP中存储的对象都用它们的cn值作为RDN的基础。企业为员工设置一个用户账户的DN时,可以用基于cn或UID。如:example.com的员工gyh(登录名freeit_gyh)的DN:

①基于姓名:cn=gyh,ou=ns,ou=yinhe,dc=example,dc=com;

②基于登录名:cn=freeit_gyh, ou=ns,ou=yinhe,dc=example,dc=com。

Base DN:LDAP目录树的最顶部就是根,也就是所谓的“Base DN",如"dc=mydomain,dc=org"。

blob.png

根节点 DN 的命名有多种方法,其中之一就是域名命名法。例如:以公司的网址作为公司目录树的根节点。如 sohu.com 那么根节点的 DN 应

 该为 DN:dc=sohu,dc=com,图中根节点的 DN :dc=example,dc=com  而该根节点有两个子节点,ou=people,和 ou=servers。

 People 节点的 DN:ou=People,dc=example,dc=com

 RDN: 是 目 录 树 中 节 点 的 相 对 分 辨 名 。 如 : People 节 点 的 DN:ou=People,dc=example,dc=com而该节点的 RDN:ou=People

Attribute:  每个 Entry 都是由许多 Attribute 组成的。每一个属性(Attribute)描述的是对象的一个特征。每一个属性(Attribute)由一个类型(type)和一个或多个值组成( Value)  如下图所示:

blob.png


2.5 ldap的命名模型

LDAP 命名模型定义了如何在目录系统中组织数据以及如何从目录系统中查找数据

LDAP 命名模型指定将 Entry 按类似倒立的树形结构进行规划。非常类似于 UNIX 系统得文件系统如下图所示:

blob.png

blob.png


1.UNIX 文件系统有一个根路径,作为访问所有文件和目录的入口。而 LDAP 目录结构中的 root Entry 只是一个特殊的 Entry,它包含了目录服务器的配置信息,通常情况下,并不用来存储信息

2.在 LDAP 目录中任何一个节点都可以包含信息,同时也可以是一个容器,也就是说任何一个 LDAP Entry 都可以有子节点。而 UNIX 文件系统中的节点要么是一个文件,要么是一个目录。而不能同时是这两种情况。只有目录才可以拥有子节点。

3.UNIX文件系统目录结构与LDAP目录的第三个区别在于他们得每一个节点的命令不同。LDAP目录中节点的命令和UNIX文件系统目录结构中的节点命名是相反的。上图中UNIX文件系统结构,如果要定位到grep节点的话,命令如下/usr/bin/grep。

上面的图是一个典型的ldap目录结构:

第一个节点DN命名为:dn:dc=example,dc=com

第二个节点DN命名为:dn:ou=People,dc=example,dc=com

第三个节点DN命名为:dn:uid=bjensen,ou=people,dc=example,dc=com

我们说每一个Entry的DN是唯一的,就是因为这种树形结构决定了,从根节点到其他任何一个节点的路径是唯一的。

RDN:在DN中最左边的内容称为相对域名。如ou=People,dc=example,dc=com其RDN为ou=People

对于共享一个父节点的所有节点的RDN必须是唯一的。如果不属于同一个节点则节点的RDN可以相同。



特殊字符:

以下字符如果出现在Entry中的属性值,必须进行转义

#-------\#

,-------\,

+-------\+

"-------\"

\-------\\

<-------\<

>-------\>

;-------\;

如:o=United Widgets\, Ltd., c=GB

别名

LDAP 中可以定义一个别名 Entry,指向另外一个 Entry。如下图所示

blob.png

如何创建别名 Entry

要创建别名Entry,该Entryobject class 必须是alias。而且其属性aliasedObjectName

的值必须是该 Entry所指向的 EntryDN。不过一般情况下应该避免使用别名 Entry

会影响性能。而且如果被引用的 Entry 被删除的话,该 Entry 就会指向一个错误的结果。

LDAP URL

由于使用 Alias Entry 有许多缺点,可以使用 LDAP URL referral 代替 Alias Entry


LDAP 功能模型描述了 LDAP 协议可以采用的相关操作,来访问存储在目录树中的数据。

LDAP 功能模型包含一系列的操作,这些操作被分为三组。

1. 更新操作 包括添加,删除,重命名,修改 Entry

2. Interrogation Operation 用于数据的查询

3. 认证和控制 (bind unbind abandon)

Interrogation Operation

1. The LDAP Search Operation

该操作需要八个参数

a. base object

也可以表示为 DN。表明你想要查询 direcoty 中树的顶点。

b. search scope

DN searchscope 两个参数限定了要搜索数据的范围

共有三个范围 scope

Sub 搜索范围是包含顶节点在内的一棵子树 如下图

 

 blob.png

 

其中 DN =ou=People,dc=example,dc=com

Base 搜索范围只包含一个节点 如下图

其中 DN =ou=People,dc=example,dc=com

Onelevel 其搜索范围是 DN所表示的节点下的直接子节点。如下图

blob.png

其中 DN =ou=People,dc=example,dc=com

c. alias

d. size limit

表示返回的符合条件的 Entry 的数目,0 表示返回所有符合条件的 Entry。目录服务器

端返回一个 LDAP_SIZELIMIT_ EXCEEDED

e. time limit

表 示 搜索 一次 所需 要 的时 间, 超过 时间 将 停止 搜索 。服 务器 端 返回 一 个

LDAP_TIMELIMIT_EXCEEDED

f. attribute-only

该属性是一个 boolean 值,如果为 true ,表示服务器端之返回所搜索的 Entry 的属性

名称,不返回属性值。

g. filter

通过该属性可以更精确的搜索结果。就像 SQL 语句中的条件查询。

Filter 分类

1.(sn=smith) 匹配属性 sn的值包含 smithEntry

2.(sn=smith*) 匹配属性 sn的值以 smith开始的所有 Entry smithers

smithsonain等。其中“*”表示通配符,代表任意字符。

3.(sn~=jensen) 匹配属性 sn的值听起来像 jensen Entry。不同的目录服务

器,有不同的实现方法。

4.(age>21)或者(!(age<=21)) 匹配属性 age的值大于 21Entry

如果是字符的话,如(sn<=Smith)则按字典顺序进行比较。

5.(telephoneNumber=*) 匹配所有属性 telephoneNumber 的值不为空的

Entry

6.(&(sn=smith)(age>21))匹配属性 sn的值包含 smith而且属性 age的值大

21Entry

(

|(sn=smith)(age>21))匹配属性 sn的值包含 smith或者属性 age的值大

21Entry

&(mail=*)(!(telephoneNumber=*)))匹配属性 mail的值不为空,而且属

(

telephoneNumber为空的 Entry

7.如果属性的值包含以下五个特殊字符的话必须进行转义

如:(cn=A*Star) 则必须改为(cn=A\2AStar)

blob.png

h. return attributes

该属性表示客户的搜索结果中需要返回的和用户相关的属性列表,如果为空表示返

回所有属性。 

blob.png 

4.LDAP 安全模型

安全模型的作用:是提供一个框架,保护目录中的信息不被非法访问。

LDAP 中的安全模型主要通过身份认证、安全通道和访问控制(ACL)来实现

LDAP 是一个面向连接的协议,在能够对 LDAP 目录进行任何操作之前,LDAP 客户端必须

获得一个到 LDAP 服务端的一个连接,在这个过程中需要对 LDAP 客户端的身份进行验证,

这一过程可以理解为用户绑定。

LDAPV2 只支持简单的密码验证。

LDAPV3 实现了 SASL 安全框架,SASL 为多种验证协议提供了一种标准的验证方法,对于

不同的验证系统,可以实现特定的 SASL 机制。SASL 机制代表了一种验证协议。

在用户通过验证之后,可以为该用户分配附加的权限,比如一些用户只能查看特定的 Entry

而不能修改。一些用户可以查看并且修改所有的 Entry 等。这一过程可以理解为访问控制。


2.6  LDIF

LDIF格式:

LDIF(LDAP Data Interchange Format,轻量级目录交换格式)是一种ASCSI文件格式,用来交换数据并在LDAP服务器间进行数据同步。其最常用功能就是向目录导入或更改记录信息,这些信息需要按照LDAP中架构(schema)的格式进行组织,并会接受架构的检查,如果不符合其要求的格式将会出现报错信息。LDIF文件的内容如下:

dn:dc=example,dc=com

dc:example

objectClass:top

objectClass:domain

 

dn:ou=People,dc=example,dc=com

ou:People

objectClass:top

objectClass:organizationakUnit

 

dn:ou=Group,dc=example,dc=com

ou:Group

objectClass:top

objectClass:organizationakUnit 

LDIF 通过一个文本文件,用来描述目录数据,可以将目录服务器中的数据导出到一个 LDIF

文件中,并且可以将 LDIF 文件中的数据导入到另一个目录服务器。即使这两个目录服务器

内部使用的是不同的数据库格式。

有两种类型的 LDIF 文件,第一种用来描述 Directory 目录数据的,第二种包含更新语句,用

于更新现有的 Directory 条目数据。

第一种文件,内容包含两部分:第一部分是 DN,第二部分是一系列的属性-值对

如下图:

blob.png

以上的 LDIF 文件只包含了一个 Directory Entry。可以在一个 LDIF 文件中包含多个 Entry

第二种文件,包含更新语句。第一行同样是 DN。第二行是更新类型,后边是要更新的属性及值。当然也可以用来添加新的 Entry

如下图:添加一条 Entry(注意第二行:changetypeadd)

blob.png


如下图:删除一条 Entry

blob.png

如下图:修改一条 Entry

语法如下:

blob.png


添加属性示例

blob.png

删除属性示例:

blob.png

也可以将多条更新语句放在一个文件里,各语句之间用-分开

blob.png

重新命名 Entry 或移动 Entry

语法:

dn: Entry的DN名称

changetype: moddn //changetype类型必须为moddn

[

[

newsuperior:如果要移动一条Entry则该项表示一个新的节点的DN]

deleteoldrdn: ( 0 | 1 )该项表示是否要删除修改以前的RDN 不删除]

[newrdn:Entry的新RDN]

由于一条 Entry  DN 是由该 Entry  RDN 和它的父节点的 DN 组成的。

一条 Entry  RDN 是该 Entry 中的一个属性。就像关系数据库中,主键值可以唯一区

区分一条记录一样,在同一个节点下的所有 Entry 中的 RDN 必须由唯一标识该 Entry

属性组成。

所以重新命名 Entry,也就是重新命名该 Entry  RDN

示例如下:

blob.png


注:在LDAP中,schema用来指定一个目录中所包含的对象类型(objectClass)以及每一个对象类型中的每个必备或可选属性。Schema是一个数据模型,它被用来决定数据怎样被存储,被跟踪的数据是什么类型,存储在不同的条目下的数据之间的关系。Schema需要在使用目录服务前定义,在Openldap中其需要在ldap的主配置文件中指定,以用来决定本目录中使用到的对象类型。管理员可以根据需要设计schema,包括属性定义,类定义以及语法定义等部分。LDAPv3中在x.500标准的基础上定义了一个包含网络中大多常见对象的schema,这些对象包括国家、所在地、组织、人员、小组以及设备等。同时,LDAPc3中可以很方便地从目录中提出出schema,它正是一条记录中关于属性的声明部分。

LDAP是一个用于为任何网络中本地组织个人和其他资源比如文件设备提供授权的软件协议。LDAP目录可以分布在许多服务器上。LDIF用来同步不同LDAP目录。同步LDAP目录的第一步是从LDAP目录中提取的全部内容或是部分内容并格式化这些内容填到LDIF文件里。LDIF文件然后被邮寄到目录同步遥控设备(DIRBOT)。经过几个不同的步骤之后,最终LDIF文件和源LDIF文件进行比较。这时就会确定在源记录中哪些记录会增加、删除、修改等更新的指令。然后会同步所有的LDAP目录。

LDIF文件有如下特性:

(1).以空行分割为一个定义;

(2).以#开始的是注释行;

(3).所有属性赋值方法为“属性:属性值”;

(4).属性可以被重复赋值;

(5).每行后面不允许有空格。


2.7 LDAP 模式(schema


如果你使用过关系型数据库,那么对模式应该不会陌生。关系数据库系统都是通过表格的形式

进行数据存储的。在这之前,我们首先要定义表结构,也即是模式。表结构由一些字段组成,

每个字段都有一个类型,以及一些约束条件。这就规定了我们可以存储的信息。

上面我们介绍过 LDAP 目录服务器中存储的信息是被组织成树型结构进行存储的。和存储信息

之前也要定义模式,不过,与关系型数据库系统不同的是,作为 LDAP 目录服务器的用户而言,

一般不需要自己定义模式,所有实现 LDAP 协议的目录服务器,都已经定义好了许多模式,这

些模式可以解决我们大部分的信息存储的问题。

LDAP 模式是由以下一些元素组成的

1Attribute types 属性类型,也就是属性名称。我们已经介绍过,每个属性名称其实也代表着

一种属性类型。表示该属性可以存储什么样的信息。

2Attribute syntaxes 属性语法,该元素表示每个属性名称所存储的信息如何组织。

3:匹配规则,每一个属性都有匹配规则,用于数据的比较。

4:object classes,对象类.上面已经介绍过,每个 Entry 都必须至少属于一个 object class。规定

了该 Entry 可以存储那些属性。

下面介绍一下 LDAP 协议中定义的一些常用属性极其含义(具体信息看 RFC 2252 文档)

blob.png

blob.png

2.8  常用的目录服务器

1:Apache directory server

2:Sun directory server

3:openDS 一个开源的,基于 LDAP  DSML 标准的 Directory serviceDirectory service 不仅包括Directory server,还有其它与 directory 相关的基本 servicedirectory proxy、virtual dirctorynamespace distribution 和数据同步 Directory server 是一个可以通过网络访问,

    存储   据库  OpenDS  能用  linux       项目   址为 http://www.opends.org/

4: Netscape Directory Server

5: Window AD

作者:忙碌的柴少 分类:ldap 浏览:2621 评论:0
留言列表
发表评论
来宾的头像