概述介绍

  1. X.500目录服务,它不是为TCP/IP网络设计的,由于现在TCP/IPx协议使用广泛。由于这个原因诞生了LDAP
  2. LDAP 轻型目录访问协议,是目录服务前端访问协议(主要是以X.500目录为主),不是对目录服务本身制定的协议。
  3. LDAP和关系数据库是两种不同层次的概念:
    • 前者是存贮模式和访问协议,后者是存贮方式(同一层次如网格数据库,对象数据库)
    • LDAP比关系数据库抽象层次更高的存贮概念,与查询语言SQL属同一级别。LDAP实现了指定的数据结构的存贮,它包括以下可以用关系数据库实现的结构要求:树状组织、条目认证、类型定义、许可树形记录拷贝
  4. LDAP最大的优势: 可以在任何计算机平台上,用很容易获得的而且数目不断增加的LDAP的客户端程序访问LDAP目录。而且也很容易定制应用程序为它加上LDAP的支持。
  5. LDAP服务器可以用的方法复制部分或全部数据。复制技术是内置在LDAP服务器中的而且很容易配置
  6. 允许使用ACL控制对数据读和写的权限。ACL可以根据谁访问数据、访问什么数据、数据存在什么地方以及其它对数据进行访问控制。因为这些都是由LDAP目录服务器完成的,所以不要担心在客户端的应用程序上是否要进行安全检查
  7. LDAP服务器对读密集型的操作进行了优化。读取速度比优化后的关系型数据库快一个数量级。但是不提供事务的回滚机制。它的数据修改使用简单的锁定机制实现ALL-OR-Nothing。

LDAP的元素介绍

名词介绍
  1. DN

    LDAP中的条目定位方式,DN是该条目在整个树中的唯一名称标识

  2. RDN

    条目在父节点下的唯一名词;

    如同文件系统中,带路径的文件名就是DN,文件名就是RDN

ObjectClass介绍
  1. objectClass

条目中的记录通过objectclass实现分类,objectClass是一个继承性的类定义,并指定必须具备的属性。如某一条目指定必须符合OranganizationaIUnit,则它必须具备ou类型指定的属性;

通过objectClass分类,分散的条目中的记录就实际上建立了一个索引结构,为告诉的读查询打下了基础。

objectClass也是过滤器的主要查询对象

  1. schema

数据样式schema是针对不同的应用,由用户指定(设计)类和属性类预定义,条目中的类(objectClass)和属性必须在LDAP服务器启动时载入内存的schema已有定义。

AD中的条目必须符合AD的schema。如果已提供的schema中的定义不够用,用户可以自行定义新的schema。

  1. objectClass与Attribute关系

objectClass 是一个特殊的属性

  • 它既是实体(entry)的代表,继承上面的属性

  • 其实也是一个属性,可以在实体中定义多个objectClass从而有更多的属性

  • 每一个ObjectClass都是来自于top,top含有must objectClass这样的属性。如果是继承自top objectClass不是must,可有可没有。但是如果定义成top,则必须再定义一个objectClass类型

  • LDAP中Entry必须属于某一个objectClass

  • objectClass分为三种:Abstract,Structural,Auxiliary。 要定义一个Entry必须包含一个Structural类型的objectClass,其他两个类型可0个或多个。

  • Top是一个顶级objectClass,里面定义了一个MUST Attribute objectClass,因此必须有一个其他的Structural objectClass才能定义一个Entry。

  • 子objectClass会继承父objectClass中的全部Attribute

  • Entry是一个instance,而objectClass就是class

  • 每一个objectClass都定义了一些Attribute,其Attribute仍然可以是objectClass。在这些Attribute中分为两种类型MUST(必须包括的属性)、MAY(可选)。

  • 一个objectClass的Attribute也包括所有继承自父objectClass和自身定义的

LDAP用户指南

常用命令
1
2
3
ldapsearch -x  -H ldap://ldap.dtmiller.com:389 -D cn=admin,dc=qingmutec,dc=com -w -b '' -s base
ldapsearch -x -b "" -s base "objectclass=*" namingContext
ldapdelete
安全控制:ACL
1
2
3
4
5
6
7
8
9
# cn,sn: self my write, all may read
access to attrs=cn,sn by self write
by * read
# only self can add/delete entries under this entry
access to attrs=children by self write
# entry itself: self may write,all may read
access to attrs=entry by self wirte by
# self may write,others have no access
access to * by self write by * none