有些领域并不像前端世界那么潮那么性感,可是缺了这个环节又总以为很别扭。若是深刻到运维的世界,你会发现大部分工具还活在上个世纪,产品设计彻底反人类,好比cn
, dc
, dn
, ou
这样的命名方式,若是不钻研个一天两天,鬼知道它在说什么,好比说dns
,dns
是什么鬼?域名吗?不是,它只是某个懒惰的工程师起了dn
这么一个缩写,再加一个复数,就成了dns
,和域名服务器没有任何关系;cn
是什么?中国的缩写?你想多了,这和中国没有任何关系。通过一系列这样疯狂的洗脑以后,你才能逐渐明白LDAP
到底想干什么。抛弃你全部的认知,把本身当成一个什么都不懂的幼儿园孩子,而后咱们从头学起LDAP
。php
若是你搜索OpenLDAP
的安装指南,很不幸地告诉你,网上无论中文的英文的,90%
都是错的,它们都还活在上个世纪,它们会告诉你要去修改一个叫作slapd.conf
的文件,基本上看到这里,你就不用往下看了,这个文件早就被抛弃,新版的OpenLDAP
里根本就没有这个文件!取而代之的是slapd.d
的文件夹,而后另外一部分教程会告诉你,让你修改这个文件夹下的某一个ldif
文件,看到这里,你也不用往下看了,你又看到了伪教程,由于这个文件夹下的全部文件的第一行都明确地写着:『这是一个自动生成的文件,不要修改它!
』你修改了它以后,它的md5
校验值会匹配不上,形成更多的问题。你应该用ldapmodify
来修改这个文件,而关于ldapmodify
的教程,能够说几乎就没有!我一开始不知道面临这样荒谬的处境,不少运维人员是怎么活下来的,不过等我本身配通了之后,真的是累到连写教程的精力都没有了,好吧,我已经配通了,大家各人自求多福吧。前端
实际上,个人操做步骤不少都是反的,架构这部分是最后才意识到的,但实际上从最一开始就应该先想到。实际上整个OpenLDAP
的架构大体包含3
个部分,而网上没有教材提到这块。mysql
首先,是OpenLDAP
的服务器自己,这个东西其实只至关因而一个mysql
数据库,它是没有酷炫的图形界面的,若是你愿意每次都手敲一大堆代码,也能够用它,但这种反人类的设计真的不是给人用的。nginx
因此,你须要安装一个叫做phpLDAPadmin
的工具,好歹这是一个图形界面,虽然奇丑无比,而且配置起来也并不容易。web
光装管理工具还不够,你总要给用户提供一个修改密码的地方。sql
最后,你还须要配置各类工具。数据库
我画了一个简单的架构图以下:api
安装OpenLDAP
很是简单,直接安装这3
个东西就够了,甚至运气好的话,也许你的操做系统已经自带安装好了:服务器
yum install openldap openldap-clients openldap-servers
安装完了以后能够直接启动OpenLDAP
服务,不须要作任何配置,我一开始还有顾虑,后来发现彻底不用多想直接启动便可:架构
service slapd start
这一块在最一开始是最麻烦的部分,网上全部教程讲的都不对。由于如今是2018
年了,而不少教程还停留在2008
年甚至1998
年。配置OpenLDAP
最正确的姿式是经过ldapmodify
命令执行一系列本身写好的ldif文件,而不要修改任何OpenLDAP装好的配置文件。
举个例子来讲,你要想修改RootDN
,那么你就本身写这么一个ldif
文件,假设给它起名叫a.ldif
,而后执行它就能够了:
dn: olcDatabase={2}bdb,cn=config changetype: modify replace: olcRootDN olcRootDN: cn=admin,dc=qiban,dc=com - replace: olcSuffix olcSuffix: dc=qiban,dc=com
怎么执行呢?
ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f a.ldif
这么长的命令是什么意思?-Q
表示安静执行,-Y
和后面的EXTERNAL
表示,好吧,我也不知道什么意思,总之须要这样配合,而后-H
表示地址,-f
表示文件名。几乎全部的ldapmodify
命令都这么执行就行了。
再来说解一下上面的ldif
文件的内容,你不要问为何叫ldif
这么一个破后缀,总之你记住它就是这个后缀就行了。dn
表示你要修改什么东西,在这里咱们用的是{2}bdb
,你的系统不必定是{2}bdb
,无论是几,总之你去查一下目录里的内容就行了:
ls /etc/openldap/slapd.d/cn=config/
获得的结果大概以下,不同也不要惧怕:
cn=module{0}.ldif cn=schema/ cn=schema.ldif olcDatabase={0}config.ldif olcDatabase={-1}frontend.ldif olcDatabase={1}monitor.ldif olcDatabase={2}bdb/ olcDatabase={2}bdb.ldif
这里面有一大堆奇奇怪怪的数字,不要担忧,其中有一个带什么db.ldif
的就是你最终须要修改的数据库文件,我这里是bdb.ldif
,你的多是mdb.ldif
,还有人是hdb.ldif
,无论什么db
,总之你要改的是一个叫db
的文件就对了,你能够cat
打开看一看,可是不要用vi
去修改它。
changetype
就是modify
,表示咱们要修改这个文件。第3
行是replace
,表示咱们要替换里面的某个值,你能够把这个操做理解为mysql
数据库的update
操做,若是你把第3
行改为add
,那就是mysql
的insert
操做了。不过这里咱们操做的只是配置文件自己,还牵涉不到添加用户或者更改用户,若是你觉得事情就这么简单,那就是你太天真了。
RootDN
在这里就表示你整个OpenLDAP
系统的管理员用户名是什么,不要奇怪,后面这一砣都是用户名cn=admin,dc=qiban,dc=com
,长的有点像email
地址,实际意思也差很少,但总之就不是email
就好了。不要问为何,总之cn
就是email
前面的那个名字,后面带dc
的都是域名。
真实状况是你还须要给这个用户设置一个密码,具体怎么设自行Google
,但仍是那句话:不要修改系统文件,要用ldapmodify来执行。
这个工做应该一开始就作好,要否则后面要作的话,还得把建好的组全删掉再重建。这个模块的做用是当你建一个组的时候,把一些用户添加到这个组里去,它会自动给这些用户添加一个memberOf
属性,有不少应用须要检查这个属性。
添加的时候比较麻烦,须要建3
个ldif
文件,而后1
个执行ldapmodify
,2
个执行ldapadd
,错一点都不行:
再一次重申:文件名叫作什么根本无所谓,只要后缀名为ldif
便可。
dn: cn=module,cn=config cn: module objectClass: olcModuleList olcModuleLoad: memberof olcModulePath: /usr/lib64/openldap dn: olcOverlay={0}memberof,olcDatabase={2}bdb,cn=config objectClass: olcConfig objectClass: olcMemberOf objectClass: olcOverlayConfig objectClass: top olcOverlay: memberof olcMemberOfDangling: ignore olcMemberOfRefInt: TRUE olcMemberOfGroupOC: groupOfNames olcMemberOfMemberAD: member olcMemberOfMemberOfAD: memberOf
当心第5
行和第7
行,先找到你的模块目录是否是在/usr/lib64
下面,而后看清楚你的数据库类型和数字,不要瞎复制。
对于这个文件,咱们须要执行ldapadd
:
ldapadd -Q -Y EXTERNAL -H ldapi:/// -f memberof_config.ldif
执行完以后,检查你的/etc/openldap/slapd.d/cn=config/
,看是否是多了一个模块,这个模块的数字编号直接影响下一步操做。
dn: cn=module{0},cn=config add: olcmoduleload olcmoduleload: refint
这个文件里个人memberOf
是第一个模块,因此编号是0
,你的不必定,要看清楚到底第几号模块是memberof
,而后就改为几就能够了,对于这个文件,咱们要执行ldapmodify
操做:
ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f refint1.ldif
你若是能看懂它的意思的话,它的大意是说要修改咱们刚刚添加的那个模块文件的内容。
dn: olcOverlay={1}refint,olcDatabase={2}bdb,cn=config objectClass: olcConfig objectClass: olcOverlayConfig objectClass: olcRefintConfig objectClass: top olcOverlay: {1}refint olcRefintAttribute: memberof member manager owner
对这个文件执行ldapadd
操做:
ldapadd -Q -Y EXTERNAL -H ldapi:/// -f refint2.ldif
仍是要注意检查db
类型,不然你必定不能成功。
好吧,干完了上面这些啰里巴嗦的事情,你能够先给本身泡杯咖啡,接下来还有不少工做要作,不过难度已经没有刚才那么大了。
咱们开始安装phpLDAPadmin
。
yum install phpldapadmin
CentOS
的yum
安装老是这么使人赏心悦目。
接下来让咱们在nginx
里配置好它,以便让咱们的管理员可以看到它。
location /htdocs { alias /usr/share/phpldapadmin/htdocs; index index.php; location ~ \.php$ { alias /usr/share/phpldapadmin; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
缺省文件安装在/usr/share/phpldapadmin/htdocs
下,咱们必得要在这里配置一个alias
才能访问到它,但在php-fpm
时又要配置另一个alias
,这也是比较坑人的一个地方。
接下来你须要修改/etc/phpldapadmin/config.php
这个文件,里面有大段大段的注释,看到人头晕,注意这么2
点就够了,其它的都不要改:
$servers->setValue('login','anon_bind',false);
改为false
,由于咱们不想让人匿名访问;$servers->setValue('login','allowed_dns',array('cn=admin,dc=qiban,dc=com'));
,咱们只容许管理员访问,其余任何人不得访问。你如今能够经过URL
地址访问phpLDAPadmin
了,登陆的时候输入你那一坨用户名:cn=admin,dc=qiban,dc=com
,而后输入密码,若是你前面一切都设置对了,那么这里就能够登陆进去了。
界面里透出一股浓浓的上世纪九十年代风格,不过好歹咱们终于能够脱离纯手写代码管理的窘境了。
这时候你首先要创建两个organizationalUnit
,一个叫做groups
,一个叫做users
。不要问为何。
而后在users
下面建几个inetOrgPerson
,这些就是你的用户了。注意,在建立新条目时,必定要选择默认
,不要选择什么Posix
或者Generic User Account
,那只会帮你建出一堆没用的Linux
帐号出来,咱们只想要web
用户,不想建什么Linux
用户。注意:密码这个地方必定要选md5
,不然你后面和其它系统链接会出问题。
而后在groups
下面建几个组吧,好比admins
, users
等等,注意选择objectClass
为groupOfNames
就好了。而后把你刚刚建好的几个用户分门别类的给他们加到组里去。
在这一步上,若是你前面配置memberOf
模块配置正确的话,你会在user
的显示内部属性
里看到它的memberOf
属性,若是看不到,说明你没有配对。
到此为止,彷佛真没有什么好说的了,Phabricator
, Confluence
, Zabbix
, Grafana
, 禅道
等等,几乎你能想到的任何一个第三方应用都会有说明书教你怎么配置dc
, cn
, ou
这些东西,通过了上面这一番折腾,你怎么着也应该对LDAP
的一些术语有所了解了,若是仍是不行,说明你玩它的时间仍是不够长,再多玩两天,也就明白了。
配置好以后的好处就是你不再用东一块西一块地建用户了,而能够在一个统一的地方集中管理你的用户和群组受权。
总之,配置OpenLDAP
不是一个轻松的活,可是考虑到有那么多第三方应用都支持这个鬼东西,花点代价把它配通仍是值得的。但愿你一切顺利。