LDAP的英文全称是Lightweight Directory Access Protocol,简称为LDAP。它是基于X.500标准的,与X.500不同的是,LDAP支持TCP/IP,这对访问Internet是必须的。LDAP的核心规范在RFC中都有定义, LDAPv3由以下RFC定义:
RFC2251——Lightweight Directory Access Protocol (v3)
RFC2252——Lightweight Directory Access Protocol (v3):Attribute Syntax Definitions
RFC2253——Lightweight Directory Access Protocol (v3):UTF-8 String Representation of Distinguished Names
RFC2254——The String Representation of LDAP Search Filters
RFC2255——The LDAP URL Format
RFC2256——A Summary of the X.500(96) User Schema for use with LDAPv3
RFC2829——Authentication Methods for LDAP
RFC2830——Lightweight Directory Access Protocol (v3): Extension for Transport Layer Security
RFC3377——Lightweight Directory Access Protocol (v3):Technical Specification
LDAP是目录服务(DAP)在TCP/IP上的实现。它是对X500的目录协议的移植,但是简化了实现方法,所以称为轻量级的目录服务。
LDAP最大的优势是:可以在任何计算机平台上,用很容易获得的而且数目不断增加的LDAP的客户端程序访问LDAP目录。而且也很容易定制应用程序为它加上LDAP的支持。
LDAP是一个存储静态相关信息的服务,适合“一次记录多次读取”。LDAP对查询进行了优化,与写性能相比LDAP的读性能要优秀很多。
在LDAP中,目录是按照树型结构组织的,目录由条目(Entry)组成,条目由属性集合组成,每个属性说明对象的一个特征。每个属性有一个类型和一个或多个值。属性类型说明包含在此属性中的信息的类型,而值包含实际的数据。条目相当于关系数据库中表的记录;条目是具有区别名DN(Distinguished Name)的属性(Attribute)集合,DN相当于关系数据库表中的关键字(Primary Key);属性由类型(Type)和多个值(Values)组成,相当于关系数据库中的域(Field)由域名和数据类型组成,只是为了方便检索的需要,LDAP中的Type可以有多个Value,而不是关系数据库中为降低数据的冗余性要求实现的各个域必须是不相关的。LDAP中条目的组织一般按照地理位置和组织关系进行组织,非常的直观。LDAP把数据存放在文件中,为提高效率使用基于索引的文件数据库,而不是关系数据库。
LDAP采用目录的方式来组织数据。目录的典型应用是UNIX,在UNIX的文件系统中,最顶层是根目录(root),在根目录的下面有很多的文件和目录。
但是LDAP目录和UNIX文件系统之间有三点不同:
第一是LDAP模型没有真正的根条目。文件系统有一个根目录,它是所有文件和目录的祖先。在LDAP目录中,根条目是概念性的,不作为一个可以存放数据的条目存在。
第二是目录的每个节点都可以包含数据,任何节点都可能作为一个容器,即LDAP条目允许在他的下面有子节点。文件系统的每个节点或者是文件或者是目录,但不能同时是二者。在文件系统中,只有目录可以有子节点,而且只有文件可以包含数据。LDAP中的条目既可以是数据同时也可以兼任目录的角色。
第三是节点命名方式的不同。LDAP名称与文件系统名称的方向是相反的。文件系统的表示方法是从根目录到深层目录一层一层表示,而LDAP则相反,将叶子节点放在前面逐层目录向上推导,最后写出根目录,下一小节详细介绍。
LDAP中记录的表示方法,首先确认以下几个概念:
dn :Distinguished Name;唯一可区别的名称,记录了一条记录的位置
dc :一条记录所属区域
ou :Organization Unit;一条记录所属组织
cn/uid:Common Name;可用来区分身份的属性,等同于一条记录的名字/ID
一个完整的dn如下所示,以此查询得到一条完整的记录,然后再根据需要取出其中的指定的属性(Attribute)的值。
dn:cn=cc,ou=imcuser-test-ld,dc=zhjdtest,dc=com
如下所示的结构中,dn是从树的叶子节点逐层向根节点推导出的一条唯一路径,表明了这个数据结构中的唯一一条记录。
按照以上dn在LDAP Server上查询到的数据如下:
查询类操作允许用户搜索目录并取回目录数据,有两个查询操作:查询和比较。
LDAP查询操作用来在目录中搜索条目,并取出单个目录条目。LDAP没有读操作,当需要读取某条目时,必须使用一种特殊格式的查询操作,其中限定了你要取回的条目内容。根据取回的条目内容,查询操作分为三种:一种是单个节点查询,是指查询指定了路径的条目的具体节点,这通常用来在目录中查找一个具体的条目;二是子节点查询,是指查询给出条件的节点的下级的条目;三是子树查询,是指查询从给出的条目为根的整个子树的所有条目。
另一类查询操作是比较操作,它用于检查某条目是否包含某个属性值。如果条目有此值,则比较结果为真;如果没有,则比较结果为假。
LDAP更新类操作包括四种操作:添加、删除、修改和重命名,这四种操作定义了在目录中操作数据的方式。
添加操作创建新的目录条目,它必须携带的两个参数为:要创建的条目的分辨名DN和新条目中包含的属性/属性值对的集合。为了使添加操作成功,必须满足以下四个前提条件:
Ø 新条目的父条目必须已经存在
Ø 不能存在同名(分辨名)的条目
Ø 新条目必须与有效的模式(schema)相一致
Ø 访问控制必须允许执行此操作
删除操作只需指明要删除的条目DN。只能删除目录的叶节点,即不支持删除子树。删除一经执行,无法恢复。为了使删除操作成功,必须满足以下两个前提条件:
Ø 要删除的条目的父条目必须存在
Ø 访问控制必须允许执行此操作
修改操作除指明操作的条目DN外,还包括一个数组。其中每个数组元素是一个修改动作,记录修改的操作类型和操作数据。修改操作功能强大,能完成对条目的属性类型和属性值的修改操作。
重命名,用于为条目重命名。它必须指定要重命名的条目、条目新的RDN和删除原RDN标志(delete-old-RDN)。为了使修改RDN操作成功,必须满足如下前提条件:
Ø 被重命名的条目必须已经存在
Ø 条目的新名称不能已经被其他条目使用
Ø 访问控制必须允许执行此操作
认证和控制类操作包括两个LDAP认证操作——绑定和解绑定,一个控制操作——放弃。
绑定操作:一般常用的是使用简单密码的绑定。使用SSL/TLS绑定更加复杂,一般需要预先配置和多步操作,目前RFC没有对此作出规定。
解绑定操作:用于中断持续进行的LDAP操作,关闭连接。
放弃操作用于中断正在进行的操作。
目录的模式(schema)是一组规则,用来确定目录能存储什么和服务器和客户端在进行目录操作时如何对待数据。schema被LDAP各方(服务器、客户端、应用程序)用来作为数据交换的“标准”,以保证对数据理解的正确性,从而保证了LDAP协议的开放性。
schema也被用作目录中存储的数据的长度、范围和格式的强制约束。
最后,schema也有利于目录中数据的规整和对访问者权限的控制。
构成schema的元素有属性类型(attribute types)、对象类(object classes)、语法(syntaxes)、匹配规则(matching rules)、目录信息树内容规则(DIT content rules)、目录信息树结构规则(DIT strctural rules)和命名形式(name forms)。
属性类型控制属性格式,包括属性的语法、匹配规则、是否可以多值、修改权限和用法等。属性类型可直接由0或多个属性类型继承而来,形成属性类型的层次关系树。
对象类是“共享某些特性的对象的识别家族”,即对象的模板。对象类通过定义条目中所含的属性来定义目录中的条目类型。
在LDAP目录数据库中,所有的条目都必须定义objectClass这个属性。每个条目(LDAP Entry)都要定义自己的Object Classes。Object Class可以看作是LDAP Entry的模板,它定义了条目的属性集,包括必有属性(requited attribute)和可选属性(option attribute)。这里要着重指出的是,在LDAP的Entry中是不能像关系数据库的表那样随意添加属性字段的,一个Entry的属性是由它所继承的所有Object Classes的属性集合决定的,此外可以包括LDAP中规定的“操作属性”(操作属性是一种独立于Object Class而存在的属性,它可以赋给目录中的任意条目)。如果你想添加的属性不在Object Classes定义属性的范畴,也不是LDAP规定的操作属性,那么是不能直接绑定(在LDAP中,给Entry赋予属性的过程称为绑定)到条目上的,你必须自定义一个含有你需要的属性的Object Class,而后将此类型赋给条目。
语法(syntaxes) 规定了如何用具体的语言和格式来操作目录中的条目数据。
为服务器在搜索操作过程中如何比较字符串提供准则。在国际搜索中,匹配规则告知服务器所用的对照顺序及运算符。
用途:
Ø server执行查询或比较操作时比较属性值
Ø server修改条目时确定要添加或删除的属性值
Ø server在比较DN和条目名称时使用
其他几个元素在LDAPv3中没有提到,在这里就不做介绍了。
LDAP的认证分为:无认证、基本认证、SSL/TLS三种,简单介绍一下。
无认证(匿名) 是最简单的一种方法,这种方法只在没有数据安全问题并且不涉及访问控制权限的时候才能使用。例如,当你的目录是任何人都可以浏览的地址簿时,就是这种情况。当你调用API的绑定操作时分辨名(DN)和密码保留为空,目录会假定是无认证,LDAP服务器会自动假定一个匿名用户会话并且服务相应的访问控制权限。
基本认证(简单密码) 当LDAP客户进程和服务进程之间建立连接时,会协商安全机制,这是在LDAP应用程序接口(API)中指定的方法。除了根本不使用认证之外,最简单的LDAP安全机制是基本认证。
当使用LDAP的基本安全认证时,客户进程通过网络向服务进程发送一个分辨名(DN)和口令来标识自己。服务进程检查客户进程发送的分辨名(DN)和密码是否与目录中存储的分辨名(DN)和密码相匹配,如果匹配则认为通过了认证。
SSL/TLS 安全套接层协议的意图是提供认证和数据的安全性,它封装了TCP/IP,以便于每个TCP/IP应用都能够使用它保证通讯的安全。
下面介绍一个H3C对LDAP的典型应用,其中涉及客户端、接入设备、业务软件服务器以及Windows 2003域控制器。
PC作为接入客户端,只要有802.1x客户端即可,一般在网络连接上都自带802.1x客户端;在我司的EAD解决方案中,使用iNode客户端来进行802.1x的接入,推荐使用iNode客户端;也可以使用自己安装的其他802.1x客户端。
该交换机只需要支持802.1x接入功能即可,交换机管理口地址需要和iMC Server能够ping通;在PC接入的接口下开启802.1x认证功能,然后设置domain和radius scheme,具体配置如下:
radius scheme配置,验证及计费服务器的IP地址根据实际使用地址填写:
radius scheme ld_20090811
server-type huawei
primary authentication 162.105.255.30 1812
primary accounting 162.105.255.30 1813
key authentication test
key accounting test
user-name-format with-domain
domain配置,radius-scheme和之前的radius scheme名称要一致:
domain zhjdtest
radius-scheme ld_20090811
access-limit enable 1024
state active
vlan-assignment-mode integer
idle-cut disable
self-service-url disable
messenger time disable
接口配置,vlan可根据实际需要划分:
interface Ethernet0/24
port access vlan 24
dot1x
Windows 2003域控制器主要使用的是微软的活动目录,将其作为LDAP服务器,让iMC从中提取账户信息。
关于Windows 2003安装成域控制器的方法在这里就不介绍了,可以通过查看相关文档进行安装,简单说需要先安装DNS服务,再安装Active Directory;这里介绍一下账户的添加方法:
首先,在域控制器下新建一个组织单位:如下,名为:imcuser-test-ld
其次,在刚才创建的组织单位下创建用户,该操作可重复多次,创建多个用户:如下用户名为:cc
首先,iMC Server上要将接入交换机作为接入设备加入;
其次,需要添加一个和接入交换机上的domain相对应的服务,即服务后缀等于域名;
以上两条配置不涉及到LDAP部分,不详细介绍,下面介绍LDAP部分的配置:
1、LDAP服务器配置:
其中需要注意的是:Base DN的写法,ou后面是组织单位的名称,dc后面是域名,每一级域名分别依次使用dc表示;管理员DN的写法,cn后面是windows 2003的管理员用户名,后续的写法固定,其中dc部分和Base DN相同;用户名属性名称,如果使用Windows活动目录的话,用户名属性基本是固定的,密码不从活动目录读取。如果使用其他LDAP服务器的话,需要注意用户名属性和密码属性需要填写具体的Attribute名称,其他基本一致。
同步策略配置:
上图中过滤条件基本不需要修改即可使用,如果接入帐号已经存在并且不是从LDAP同步过去的,那么将会出现同步失败;
注意这里一定要勾选需要的服务,如果使用微软活动目录的话,其他属性基本不用修改,密码需要自己输入;如果使用其他LDAP Server的话,属性要自己重新选择。
使用PC上的802.1x客户端登录时,接入交换机到iMC Server上做认证,iMC Server从微软活动目录上同步用户信息,对客户端进行认证;认证通过后客户端可正常使用网络,否则客户端无法接入。
原文地址:http://www.h3c.com.cn/MiniSite/Technology_Circle/Net_Reptile/The_Seven/Home/Catalog/201309/797632_97665_0.htm