轻型目录访问协议(英文:LightweightDirectoryAccessProtocol,缩写:LDAP)是一个开放的,中立的,工业标准的应用协议,通过IP协议提供访问控制和维护分布式信息的目录信息。OpenLDAP是轻型目录访问协议(LightweightDirectoryAccessProtocol,LDAP)的自由和开源的实现,在其OpenLDAP许可证下发行,并已经被包含在众多流行的Linux发行版中。可以这样讲:市面上只要你能够想像得到的所有工具软件,全部都支持LDAP协议。比如说你公司要安装一个项目管理工具,那么这个工具几乎必然支持LDAP协议,你公司要安装一个bug管理工具,这工具必然也支持LDAP协议,你公司要安装一套软件版本管理工具,这工具也必然支持LDAP协议。LDAP协议的好处就是你公司的所有员工在所有这些工具里共享同一套用户名和密码,来人的时候新增一个用户就能自动访问所有系统,走人的时候一键删除就取消了他对所有系统的访问权限,这就是LDAP。
有些领域并不像前端世界那么潮那么性感,但是缺了这个环节又总觉得很别扭。如果深入到运维的世界,你会发现大部分工具还活在上个世纪,产品设计完全反人类,比如cn,dc,dn,ou这样的命名方式,如果不钻研个一天两天,鬼知道它在说什么,比如说dns,dns是什么鬼?域名吗?不是,它只是某个懒惰的工程师起了dn这么一个缩写,再加一个复数,就成了dns,和域名服务器没有任何关系;cn是什么?中国的缩写?你想多了,这和中国没有任何关系。经过一系列这样疯狂的洗脑之后,你才能逐渐明白LDAP到底想干什么。抛弃你所有的认知,把自己当成一个什么都不懂的幼儿园孩子,然后我们从头学起LDAP。
如果你搜索OpenLDAP的安装指南,很不幸地告诉你,网上不管中文的英文的,90%都是错的,它们都还活在上个世纪,它们会告诉你要去修改一个叫做slapd.conf的文件,基本上看到这里,你就不用往下看了,这个文件早就被抛弃,新版的OpenLDAP里根本就没有这个文件!取而代之的是slapd.d的文件夹,然后另一部分教程会告诉你,让你修改这个文件夹下的某一个ldif文件,看到这里,你也不用往下看了,你又看到了伪教程,因为这个文件夹下的所有文件的第一行都明确地写着:『这是一个自动生成的文件,不要修改它!』你修改了它之后,它的md5校验值会匹配不上,造成更多的问题。你应该用ldapmodify来修改这个文件,而关于ldapmodify的教程,可以说几乎就没有!我一开始不知道面临这样荒谬的处境,很多运维人员是怎么活下来的,不过等我自己配通了以后,真的是累到连写教程的精力都没有了,好吧,我已经配通了,你们各人自求多福吧。
架构
实际上,我的操作步骤很多都是反的,架构这部分是最后才意识到的,但实际上从最一开始就应该先想到。实际上整个OpenLDAP的架构大致包含3个部分,而网上没有教材提到这块。
OpenLDAP
首先,是OpenLDAP的服务器本身,这个东西其实只相当于是一个mysql数据库,它是没有酷炫的图形界面的,如果你愿意每次都手敲一大堆代码,也可以用它,但这种反人类的设计真的不是给人用的。
phpLDAPadmin
所以,你需要安装一个叫作phpLDAPadmin的工具,好歹这是一个图形界面,虽然奇丑无比,并且配置起来也并不容易。
PWM
光装管理工具还不够,你总要给用户提供一个修改密码的地方。
客户端
最后,你还需要配置各种工具。
架构图
我画了一个简单的架构图如下:
安装
安装OpenLDAP
安装OpenLDAP非常简单,直接安装这3个东西就够了,甚至运气好的话,也许你的操作系统已经自带安装好了:
yuminstallopenldapopenldap-clientsopenldap-servers安装完了之后可以直接启动OpenLDAP服务,不需要做任何配置,我一开始还有顾虑,后来发现完全不用多想直接启动即可:
serviceslapdstart配置OpenLDAP
这一块在最一开始是最麻烦的部分,网上所有教程讲的都不对。因为现在是年了,而很多教程还停留在年甚至年。配置OpenLDAP最正确的姿势是通过ldapmodify命令执行一系列自己写好的ldif文件,而不要修改任何OpenLDAP装好的配置文件。
举个例子来说,你要想修改RootDN,那么你就自己写这么一个ldif文件,假设给它起名叫a.ldif,然后执行它就可以了:
dn:olcDatabase={2}bdb,cn=configchangetype:modifyreplace:olcRootDNolcRootDN:cn=admin,dc=qiban,dc=