1. OpenLDAP 是什么?

OpenLDAP 是一款轻量级目录访问协议,属于开源”集中账号管理“架构的实现,且支持众多系统版本,被广大互联网公司所采用。
LDAP 具有两个国家标准,分别是X.500 和LDAP。OpenLDAP 是基于X.500 标准的,而且去除了X.500 复杂的功能并且可以根据自我需求定制额外扩展功能,但与X.500 也有不同之处,例如OpenLDAP 支持TCP/IP 协议等,目前TCP/IP 是Internet 上访问互联网的协议。
OpenLDAP 能直接运行在TCP/IP 或其他可靠的传输协议层上,避免了在OSI会话层和表示层的开销,使连接的建立和包的处理更简单、更快,对于互联网和企业网应用更理想。LDAP 提供并实现目录服务的信息服务,目录服务是一种特殊的数据库系统,对于数据的读取、浏览、搜索有很好的效果。目录服务一般用来包含基于属性的描述性信息并支持精细复杂的过滤功能,但OpenLDAP 目录服务不支持通用数据库的大量更新操作所需要的复杂的事务管理或回滚策略等。
OpenLDAP 默认以Berkeley DB 作为后端数据库。Berkeley DB 是一类特殊的数据库,主要用于搜索、浏览、更新查询操作,一般对于一次写入数据、多次查询和搜索有很好的效果。Berkeley DB 数据库是面向查询进行优化,面向读取进行优化的数据库。Berkeley DB 不支持事务型数据库(MySQL、MariDB、Oracle 等)所支持的高并发的吞吐量以及复杂的事务操作。
OpenLDAP 目录中的信息是按照树形结构进行组织的,具体信息存储在条目(entry)中,条目可以看成关系数据库中的表记录,条目是具有区别名(Distinguished Name,DN)的属性(attribute),DN 是用来引用条目,DN 相当于关系数据库中的主键,是唯一的。属性由类型和一个或者多个值组成,相当于关系数据库中字段的概念

2. OpenLDAP能干嘛?

我们知道,账号是登录系统的唯一入口。要登录系统,首先系统要存登录所使用的账号及密码信息,然后经过系统查找顺序(/etc/nsswith.conf)及认证模块(/etc/pam.d/)验证,得到授权后方可登录系统。如果多个用户登录系统,就需要在每个系统上创建用户名和密码;否则,就无法登录系统。
对于账号管理人员而言,维护10 台、100 台机器的账号,或许勉强可以维护、管理。如果机器数量达到1000 以上时,对于账号的创建、回收、权限的分配、密码策略、账号安全审计等一系列操作,账号管理人员就心有余而力不足了。此时*OpenLDAP 账号集中管理软件就应用而生,它可以实现账号集中维护、管理,只需要将被管理的机器加入到服务器端即可,此后所有与账号相关的策略均在服务端实现,从而解决了运维案例所产生的众多管理问题

关于账号的添加、删除、修改、权限的赋予等一系列操作只需要在服务端操作即可,无须在客户端机器进行单独操作。客户端账号及密码均通过OpenLDAP 服务器进行验证,从而实现账号集中认证管理,此时账号管理员只须维护OpenLDAP 服务器条目即可。

3. OpenLDAP 目录服务优点

OpenLDAP 目录服务有以下10 个优点。
OpenLDAP 是一个跨平台的标准互联网协议,它基于X.500 标准协议。
OpenLDAP 提供静态数据查询搜索,不需要像在关系数据中那样通过SQL 语句维护数据库信息。
OpenLDAP 基于推和拉的机制实现节点间数据同步,简称复制(replication)并提供基于TLS、SASL 的安全认证机制,实现数据加密传输以及Kerberos 密码验证功能。
OpenLDAP 可以基于第三方开源软件实现负载(LVS、HAProxy)及高可用性解决方案,24 小时提供验证服务,如Headbeat、Corosync、Keepalived 等。
OpenLDAP 数据元素使用简单的文本字符串(简称LDIF 文件)而非一些特殊字符,便于维护管理目录树条目。 章
OpenLDAP 可以实现用户的集中认证管理,所有关于账号的变更,只须在OpenLDAP 服务器端直接操作,无须到每台客户端进行操作,影响范围为全局。
OpenLDAP 默认使用协议简单如支持TCP/ZP 协议传输条目数据,通过使用查找操作实现对目录树条目信息的读写操作,同样可以通过加密的方式进行获取目录树条目信息。
OpenLDAP 产品应用于各大应用平台(Nginx、HTTP、vsftpd、Samba、SVN、Postfix、OpenStack、Hadoop 等)、服务器(HP、IBM、Dell 等)以及存储(EMC、NetApp 等)控制台,负责管理账号验证功能,实现账号统一管理。
OpenLDAP 实现具有费用低、配置简单、功能强大、管理容易及开源的特点。
OpenLDAP 通过ACL(Access Control List)灵活控制用户访问数据的权限,从而保证数据的安全性。

4. LDAP的基本模型

LDAP的基本模型是建立在”条目”(Entry)的基础上。一个条目是一个或多个属性的集合,并且具有一个全局唯一的”可区分名称”(用dn表示)。与关系型数据(后面简称数据库)进行类比,一个条目相当于数据库中的一条记录,而dn相当于数据库中记录的关键字,属性相当于数据库中的字段。
温馨提示:dn必须是全局唯一的。
LDAP中,将数据组织成一个树形结构,这与现实生活中的很多数据结构可以对应起来,而不像设计关系型数据库的表,需要进行多种变化。如下图所展示的就是一个树形结构的数据。
OpenLDAP介绍 - 图1
在上图所示的树形结构中,树的根结点是一个组织的域名(dlw.com),其下分为3个部分,分别是managers、people和group,可将这3个组看作组织中的3个部门:如managers用来管理所有管理人员,people用来管理登录系统的用户,group用来管理系统中的用户组。当然,在该图中还可继续增加其他分支。
对于图中所示的树形结构,使用关系数据库来保存数据的话,需要设置多个表,一层一层分别保存,当需要查找某个信息时,再逐层进行查询,最终得到结果。
若使用目录来保存该图中的数据,则更直观。图中每个结点用一个条目来保存,不同类型的结点需要保存的数据可能不同,在LDAP中通过一个称为objectClass的类型来控制不同结点需要的数据(称为属性)。
对于目录中的数据怎样进行引用呢?前面提到过,每一个条目都有一个dn,因为dn是唯一的,因此就可找到需要结点的数据。dn的构造方式如下:首先得到条目自己的名称(rdn,称为相对dn),然后开始向上逐级查找父结点,一直到根项为止。例如,对于图1-1中最右下方的结点,其dn为:dn: cn=ldap, ou=group, o=dlw.com。通过这样的方式,即可唯一标识每一个结点。在现实生活中,有很多这种树形结构的数据,如计算机文件系统的目录结构、Internet中的域名等。这些类型的数据,只要不需要频繁的更新,都适合用目录来保存。
LDAP主要的简称含义:
o-> organization(组织-公司)
ou-> organization unit(组织单元-部门)
c-> countryName(国家)
dc-> domainComponent(域名)
sn-> suer name(真实名称)
cn-> common name(常用名称)
关键字的详细如下:

关键字 英文全称 含义
dc Domain Component 域名的部分,其格式是将完整的域名分成几部分,如域名为example.com变成dc=example,dc=com
uid User Id 用户ID,如“tom”
ou Organization Unit 组织单位,类似于Linux文件系统中的子目录,它是一个容器对象,组织单位可以包含其他各种对象(包括其他组织单元),如“market”
cn Common Name 公共名称,如“Thomas Johansson”
sn Surname 姓,如“wang”
dn Distinguished Name 惟一辨别名,类似于Linux文件系统中的绝对路径,每个对象都有一个惟一的名称,如“uid= tom,ou=market,dc=example,dc=com”,在一个目录树中DN总是惟一的
rdn Relative dn 相对辨别名,类似于文件系统中的相对路径,它是与目录树结构无关的部分,如“uid=tom”或“cn= Thomas Johansson”
c Country 国家,如“CN”或“US”等。
o Organization 组织名,如“Example, Inc.”

5. OpenLDAP 功能

在LDAP的功能模型中定义了一系列利用LDAP协议的操作,主要包含以下4部分:
查询操作:允许查询目录和取得数据,其查询性能比关系数据库好。
更新操作:目录的更新操作没关系数据库方便,更新性能较差,但也同样允许进行添加、删除、修改等操作。
复制操作:前面也提到过,LDAP是一种典型的分布式结构,提供复制操作,可将主服务器的数据的更新复制到设置的从服务器中。
认证和管理操作:允许客户端在目录中识别自己,并且能够控制一个会话的性质。

5.1 Ldap具体高级功能:

实现账号统一集中管理;
权限控制策略管理;
密码控制策略管理;
密码审计管理;
主机控制管理;
同步机制管理;
TLS/SASL加密传输;
高可用负载均衡架构;
自定义schema;
各种集中平台账号集中管理;

6. 在OpenLDAP中的认证机制

1)匿名认证:即不对用户进行认证,该方法仅对完全公开的方式适用
2)基本认证:通过用户名和密码进行身份识别,又分为简单密码和MD5密码认证
[root@ldap-server ~]# ldapadd -x -D “cn=root,dc=otas,dc=cn” -W -f base.ldif
Enter LDAP Password: 输入admin123
adding new entry “dc=otas,dc=cn”
adding new entry “ou=People,dc=otas,dc=cn”
adding new entry “ou=Group,dc=otas,dc=cn”
3)SASL认证:即LDAP提供的在SSL和TLS安全通道基础上进行的身份认证,包括数字证书的认证。

7. TLS安全性

分布式LDAP 是以明文的格式通过网络来发送信息的,包括client访问sldap的密码。TLS(SSL 的后继者,由OpenSSL 包)加密机制来解决这个问题。