LDAP(Light Directory Access Protocol,轻量级目录访问协议)是一种常用的目录协议,与windows系统中AD域的概念类似,LDAP通过将每条记录(条目)组织成目录结构的形式,来对外提供查询访问的服务。目前,不少的企业都会采用LDAP或者AD来统一管理各自的IT资源(IP、账号、密码等)。openldap项目是LDAP协议自由和开源的实现软件(主页http://www.openldap.org/),由于一直和openLDAP接触地比较多,因此最近会将和LDAP相关的一些资料陆续整理上来,权做备忘。

1、LDAP协议定义了一种特殊的目录型数据库服务,与常见的关系型数据库相似,LDAP目录也可以进行常见的查询、增加、删除、修改操作,但是,LDAP最初的设计目的主要是为了对外提供查询读取的功能,因此其数据结构专门对数据读取进行了特殊的优化,通常情况下,LDAP目录的读取速度要比同条件下的关系型数据库快5~10倍之多,此外,由于LDAP是“轻量级”的协议,因此不支持关系型数据库具有的事务和回滚特性,并不能从根本上替代关系型数据库在实际应用中的地位。

2、LDAP结构的基本构成元素是“条目”(entry),每个条目即为一条账号记录,每个条目通常是一个或者多个“属性”(attribute)的集合,通过为不同的属性定义各自对应的值,就能保存与条目相关的具体信息。为了保证每个条目的全局唯一性,每个条目会有一个全局唯一的“可区分名”(distinguished namedn)作为标识,dn的构成形式是从条目自己的名称开始逐级查找父结点,一直到根节点为止,如图所示:

ldap-dn

图中最下方的结点的dn可表示为:

dn:cn=gerald carter,ou=people,dc=plainjoe,dc=org

3、LDAP中通常会用到的概念主要有:

  • dn:Distinguished Name,可区分名,用于全局标识每一条记录;
  • cn:Common Name,通用名,相当于普通用户名;
  • dc:Domain Component,域组件,通常用来标识dn所处的不同目录树;
  • ou:Organization Unit,组织单元,通常用来标识普通条目所属的上级组织

3、除了查询与认证,LDAP中另外一个常用的功能就是进行权限区分。LDAP实现为不同账号分配不同的读写权限是通过“访问控制列表”(ACL,Access Control List)来实现的,ACL可以控制哪些用户能访问哪些范围的数据,还可以定义改账户对指定范围的数据具有哪些具体的操作权限(可读、可写),ACL的语法格式形如:

access to [resources]
    by [who] [type of access granted] [control]
    by [who] [type of access granted] [control]

其中,[resources]用于定义进行分配权限的资源,[who]定义不同权限的用户,[type of access granted][control]分别具体定义了用户的操作权限。关于ACL的语法这里不再详述,之后还会陆续进行整理到博客中。