LDAP

1.什么是LDAP?
   LDAP是轻量目录访问协议,英文全称是Lightweight Directory Access Protocol,一般都简称为LDAP。它是基于X.500标准的,但是简单多了并且可以根据需要定制。与X.500不同,LDAP支持TCP/IP,这对访问Internet是必须的。LDAP的核心规范在RFC中都有定义,所有与LDAP相关的RFC都可以在LDAPman RFC网页中找到。

2.LDAP目录是数据库吗?
  就象Sybase、Oracle、Informix或Microsoft的数据库管理系统(DBMS)是用于处理查询和更新关系型数据库那样,LDAP服务器也是用来处理查询和更新LDAP目录的。换句话来说LDAP目录也是一种类型的数据库,但是不是关系型数据库。不象被设计成每分钟需要处理成百上千条数据变化的数据库,例如:在电子商务中经常用到的在线交易处理(OLTP)系统,LDAP主要是优化数据读取的性能。

3.LDAP目录的优势
 可能LDAP最大的优势是:可以在任何计算机平台上,用很容易获得的而且数目不断增加的LDAP的客户端程序访问LDAP目录。而且也很容易定制应用程序为它加上LDAP的支持.
  LDAP协议是跨平台的和标准的协议,因此应用程序就不用为LDAP目录放在什么样的服务器上操心了。
  不象很多商用的关系型数据库,你不必为LDAP的每一个客户端连接或许可协议付费。
  大多数的LDAP服务器安装起来很简单,也容易维护和优化。
  LDAP服务器可以用“推”或“拉”的方法复制部分或全部数据,例如:可以把数据“推”到远程的办公室,以增加数据的安全性。复制技术是内置在LDAP服务器中的而且很容易配置

4.什么时候该用LDAP存储数据?
   大多数的LDAP服务器都为读密集型的操作进行专门的优化。因此,当从LDAP服务器中读取数据的时候会比从专门为OLTP优化的关系型数据库中读取数据快一个数量级。也是因为专门为读的性能进行优化,大多数的LDAP目录服务器并不适合存储需要需要经常改变的数据。例如,用LDAP服务器来存储电话号码是一个很好的选择,但是它不能作为电子商务站点的数据库服务器。
5.ldap 数据存储
几个很重要的概念,以后会用到:
———————————————
dn :一条记录的位置
dc :一条记录所属区域
ou :一条记录所属组织
cn/uid:一条记录的名字/ID
———————————————

实际上更多时候我只把它看成数据库。我把它和我非常熟悉的关系型数据库做比较,通常会得到更好的理解:
关系型数据库用“表”储存数据,LDAP用“树”
关系型数据库指定一条记录要3个条件:DB、TABLE、ROW。
LDAP却更自由,为什么呢?因为LDAP数据是“树”状的,而且这棵树是可以无限延伸的,假设你要树上的一个苹果(一条记录),你怎么告诉园丁它的位置呢?当然首先要说明是哪一棵树(dc,相当于关系型数据库的DB),然后是从树根到那个苹果所经过的所有“分叉”,最后就是这个苹果的名字(uid,记得我们设计关系型数据库表时,通常为了方便管理而加上一个‘id’字段吗?)。 好了!这时我们可以清晰的指明这个苹果的位置了,就是那棵“歪脖树”的东边那个分叉上的靠西边那个分叉的再靠北边的分叉上的半红半绿的……,晕了!你直接爬上去吧!我还是说说LDAP里要怎么定义一个字段的位置吧,树(dc=waibo,dc=com),分叉(ou=bei,ou=xi,ou=dong),苹果(cn=honglv),好了!位置出来了:
dn:cn=honglv,ou=bei,ou=xi,ou=dong,dc=waibo,dc=com ,在LDAP里也不可能存在2个相同的dn。

LDAP数据填充原理:
一棵树的生长,要循序渐进,如果还没有长出某个分叉,就不可能在那个分叉里长出苹果,同样,LDAP数据库也要一步步的充实,举一个学校数据库的例子,我们将要把一个庞大的学生档案放到LDAP里,大致需要这么做:
———————————————
1、建立“树根”,这是通过修改“slapd.conf”来实现的,反正就是在这一步建立了一个“dc=ourschool,dc=org”这样一个“树根”。 注意:我把它理解成“目录”,或者“容器”,甚至它本身也是文件(苹果)的特殊形式,熟悉LINUX文件系统的朋友会更容易理解。
2、建立18个系,分别是“dn:ou=computer,dc=ourschool,dc=org”、“dn:ou=film,dc=ourschool,dc=org”……
3、当然是在每个系里面建立专业,比如“dn:ou=linux,ou=computer,dc=ourschool,dc=org”……
4、加学生喽——“dn:cn=stan,ou=linux,ou=computer,dc=ourschool,dc=org”……
5、已经完成了吗?对了!学生的详细信息还没有呐!

LDAP 记录的详细信息
dn:cn=stan,ou=linux,ou=computer,dc=ourschool,dc=org
objectClass:organizationalPerson
cn:stan
cn:小刀
sn:小刀
description:a good boy

ldap 里有哪些属性,哪些属性是必须的 都取决于你引用的objectClass(后面详细介绍)
(以上是一条记录的信息,如果把他保存成LDIF文件,可以导入到LDAP数据库中,如何导入在后面详细说明)

6.LDAP Schema
Schema是LDAP的一个重要组成部分,类似于数据库的模式定义,LDAP的Schema定义了LDAP目录所应遵循的结构和规则,比如一个 objectclass会有哪些属性,这些属性又是什么结构等等,schema给LDAP服务器提供了LDAP目录中类别,属性等信息的识别方式,让这些可以被LDAP服务器识别
 schema 中两大元素
 我个人理解 objectclass就像一张表,定义了很多属性
 objectclass
   objectClass分为3种类型:”ABSTRACT” / “STRUCTURAL” / “AUXILIARY”
   一般来说每个节点都要包含一个ABSTRACT类(“top” or “alias”), 至少一个STRUCTURAL类,0个或者多个AUXILIARY类。

新建schema文件 在安装目录下 找到 schema 文件 新建user.schema文件
 
 # Attribute Type Definitions
attributetype ( 2.5.4.14.181.1 NAME ‘userName’
 DESC ‘userName’
 EQUALITY caseIgnoreMatch
 SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{128}
 )

attributetype ( 2.5.4.14.181.2 NAME ‘passWord’
 DESC ‘passWord’
 EQUALITY caseExactMatch
 SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )

attributetype ( 2.5.4.14.181.3 NAME ‘userAddress’
 DESC ‘userAddress’
 EQUALITY caseIgnoreIA5Match
 SYNTAX 1.3.6.1.4.1.1466.115.121.1.26  )

objectclass ( 2.5.4.14.181.1 NAME ‘zbcUser’
 DESC ‘RFC2256tttt: a person’
 SUP top STRUCTURAL
 MUST ( userName $passWord)
 MAY userAddress
 )

开始部分是attributeType的定义,相当于字段定义。
attributeType 里面:第一串数字表示序号(如:2.5.4.14.181.1) ,name: 属性的名字 DESC: 属性的说明  下面表示的是匹配的规则,SUBSTR是字符串匹配,EQUALITY是相等性匹配
SYNTAX是表示字段的数据类型
SINGLE-value表示这个属性只有一个值,有些属性可以有多个值,比如联系地址等。默认的话,是多值的。

最后的objectclass是定义数据所包含的属性。
第一串数字表示序号(如:2.5.4.14.181.1)
name: 属性的名字
DESC: 属性的说明
SUP top STRUCTURAL 表示基类是top,跟java一样他将包含top的所有属性 STRUCTURAL:objectClass 的类型
MUST:所必须的属性
may :可选属性

在配置文件slapd.conf中间的开始部分加入这样的一句: include  ./schema/user.schema
重新启动服务 就可以使用自定义的 schema文件了
(注意:如果重启服务报错,那应该就是自定的schema文件有错)
 

7.windows 安装LDAP服务
  下载 openldap-for-windows.msi 下载地址:
   安装openldap,server 直接next 就好
     注意:a. 如果指定安装路径,路径中最好不要有空格,
                 b. 最好使用BDB数据库存储数据
修改slapd.conf文件:
 找到如下的位置:
 suffix  ”dc=maxcrc,dc=com”
 rootdn  ”cn=Manager,dc=maxcrc,dc=com”
       这里是配置ldap 的根节点,也可以不做修改使用默认的,在这里我将其修改为
       suffix  ”dc=test,dc=com”
       rootdn  ”cn=Lmy,dc=test,dc=com”
重启电脑
打开服务管理器,停止OPEN LDAP服务
 新建一个名为init.ldif文件(必须是ldif文件),内容如下:
 dn: dc=test,dc=com
 objectclass: top
 objectclass: dcObject
 objectclass: organization
 o: test.com
 dc: test
 
 dn: cn=Lmy,dc=test,dc=com
 objectclass: organizationalRole
 cn: Lmy

这里要注意,dn必须和slapd.conf文件中的保存一致,切记切记!!
将init.ldif文件放入LDAP的安装目录中,打开命令行窗口,进入LDAP的安装目录,然后执行命令:slapadd -l init.ldif
如果一直没有反应,说明出现了错误,如果没有提示错误,就说明添加成功了
在服务管理器中启动OPEN LDAP服务,并打开LDAP安装目录的run目录,运行里面的run.cmd文件,现在就可以使用JAVA对其进行操作。

This entry was posted in 网络安全 and tagged , , , . Bookmark the permalink.

发表评论