1. LDAP简述
1.1. LDAP相关概念
1)轻型目录访问协议(Lightweight Directory Access Protocol),LDAP是一种通信协议,LDAP能够支持TCP/IP。协议就是标准,在这套标准之下,AD(Active Directory)是微软实现的一套产品。可以把AD理解成是个数据库,也有很多人直接把LDAP说成是数据库(一个树形结构的数据库)。LDAP也有服务端和客户端,服务端用来存放资源,客户端进行相应的控制和操作。
2)LDAP的存储是树形结构的,数据存储在叶子节点上,因此LDAP的应用中主要使用其进行查询,插入删除等操作效率会相对较低。看看下面的样例:
LDAP中定义一个记录的位置:树(dc=main)分支(ou=o1,ou=oo1,ou=ooo1)节点(cn=node)
dn: cn=node,ou=o1,ou=oo1,ou=ooo1,dc=main
3)ou会有多个值,从树根到达node的位置,可能要经过好几个分支,所以ou可能有多个值,关于dn后面一串,分别是cn,ou,dc;中间使用逗号分隔。
LDAP树形数据库各描述符说明:
dn:一条记录的详细位置
dc:一条记录所属区域(树)
ou:一条记录所属组织(分支)
cn/uid:一条记录的名字/id(节点)
LDAP:目录树的最顶部就是根,就是所谓的“基准DN”
1.2. LDAP的应用场景
由于LDAP使用树形结构存储数据,因此查询的效率更高(参考关系型数据库中的索引原理:B树/B+树),因此在某些特定的场景中,使用这种树形结构进行存储更有优势,例如:需要存储大量的静态数据,数据相对稳定,无需进行频繁的修改,能够进行快速查找。LDAP与传统的关系型数据库相比,结构上的特点决定了其能承担需要速检索的应用场景,比如域验证。
1.3. LDAP常见目录树结构设计
LDAP的目录树根一般定义为国家(c=CN)或者域名(dc=com),其次往往定义一个或者多个组织(organazation,o)或组织单元(organazation,ou),一个组织单元可以包含成员、设备(计算机/打印机)等相关信息。
例如:uid=babs,ou=People,dc=example,dc=com
假设域名为foobar.com,这个域名就能转化为这个dn:dc=foobar,dc=com
如果foobar.com与wocket.com和gizmo.com合并,则以上的目录结构就可以适应这种突然的变化,而无需重新规划
初始目录结构设置的越好,后续扩展需要改动的就越少,通常情况分布均匀层次较浅的结构工作的最好
2. LDAP做统一认证
统一身份认证改变了原有不同应用各自分散的认证策略,使需要进行身份认证的应用都通过LDAP进行统一认证,在统一认证之后,用户的所有信息都存储在AD Server中,终端用户在需要使用内部服务的时候,则需要通过AD服务器的认证。
下图所展示的结构是LDAP进行统一身份认证的一般配置情况,LDAP client是各种需要进行身份认证的软件,例如Apache、Proftpd、Samba等,LDAP Server是实现LDAP的后端服务,例如OpenLDAP等。OpenLDAP只是LDAP协议的一种实现形式,数据则是会存储在后台数据库中,LDAP Server和DataStorage很多时候会被部署在同一台服务器上,虽然后台数据库的形式可以是多样的,但是根据LDAP协议中的约定,数据的实际逻辑结构依然会是树状的结构。