輕型目錄訪問協議(英文:Lightweight Directory Access Protocol
,縮寫:LDAP
)是一個開放的,中立的,工業標準的應用協議,經過IP協議提供訪問控制和維護分佈式信息的目錄信息。
OpenLDAP
是輕型目錄訪問協議(Lightweight Directory Access Protocol
,LDAP
)的自由和開源的實現,在其OpenLDAP
許可證下發行,並已經被包含在衆多流行的Linux
發行版中。php能夠這樣講:市面上只要你可以想像獲得的全部工具軟件,所有都支持
LDAP
協議。好比說你公司要安裝一個項目管理工具,那麼這個工具幾乎必然支持LDAP
協議,你公司要安裝一個bug
管理工具,這工具必然也支持LDAP
協議,你公司要安裝一套軟件版本管理工具,這工具也必然支持LDAP
協議。LDAP
協議的好處就是你公司的全部員工在全部這些工具裏共享同一套用戶名和密碼,來人的時候新增一個用戶就能自動訪問全部系統,走人的時候一鍵刪除就取消了他對全部系統的訪問權限,這就是LDAP
。前端
有些領域並不像前端世界那麼潮那麼性感,可是缺了這個環節又總以爲很彆扭。若是深刻到運維的世界,你會發現大部分工具還活在上個世紀,產品設計徹底反人類,好比cn
, dc
, dn
, ou
這樣的命名方式,若是不鑽研個一天兩天,鬼知道它在說什麼,好比說dns
,dns
是什麼鬼?域名嗎?不是,它只是某個懶惰的工程師起了dn
這麼一個縮寫,再加一個複數,就成了dns
,和域名服務器沒有任何關係;cn
是什麼?中國的縮寫?你想多了,這和中國沒有任何關係。通過一系列這樣瘋狂的洗腦以後,你才能逐漸明白LDAP
到底想幹什麼。拋棄你全部的認知,把本身當成一個什麼都不懂的幼兒園孩子,而後咱們從頭學起LDAP
。mysql
若是你搜索OpenLDAP
的安裝指南,很不幸地告訴你,網上無論中文的英文的,90%
都是錯的,它們都還活在上個世紀,它們會告訴你要去修改一個叫作slapd.conf
的文件,基本上看到這裏,你就不用往下看了,這個文件早就被拋棄,新版的OpenLDAP
里根本就沒有這個文件!取而代之的是slapd.d
的文件夾,而後另外一部分教程會告訴你,讓你修改這個文件夾下的某一個ldif
文件,看到這裏,你也不用往下看了,你又看到了僞教程,由於這個文件夾下的全部文件的第一行都明確地寫着:『這是一個自動生成的文件,不要修改它!
』你修改了它以後,它的md5
校驗值會匹配不上,形成更多的問題。你應該用ldapmodify
來修改這個文件,而關於ldapmodify
的教程,能夠說幾乎就沒有!我一開始不知道面臨這樣荒謬的處境,不少運維人員是怎麼活下來的,不過等我本身配通了之後,真的是累到連寫教程的精力都沒有了,好吧,我已經配通了,大家各人自求多福吧。nginx
實際上,個人操做步驟不少都是反的,架構這部分是最後才意識到的,但實際上從最一開始就應該先想到。實際上整個OpenLDAP
的架構大體包含3
個部分,而網上沒有教材提到這塊。web
首先,是OpenLDAP
的服務器自己,這個東西其實只至關因而一個mysql
數據庫,它是沒有酷炫的圖形界面的,若是你願意每次都手敲一大堆代碼,也能夠用它,但這種反人類的設計真的不是給人用的。sql
因此,你須要安裝一個叫做phpLDAPadmin
的工具,好歹這是一個圖形界面,雖然奇醜無比,而且配置起來也並不容易。數據庫
光裝管理工具還不夠,你總要給用戶提供一個修改密碼的地方。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
不是一個輕鬆的活,可是考慮到有那麼多第三方應用都支持這個鬼東西,花點代價把它配通仍是值得的。但願你一切順利。