OpenLDAP在linux上的部署和原理应用centos7
OpenLDAP是輕型目錄訪問協議(Lightweight Directory Access Protocol,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個東西就夠了,甚至運氣好的話,也許你的操作系統已經自帶安裝好了:
yum?install openldap openldap-clients openldap-servers安裝完了之后可以直接啟動OpenLDAP服務,不需要做任何配置,我一開始還有顧慮,后來發現完全不用多想直接啟動即可:
service?slapd start配置OpenLDAP
這一塊在最一開始是最麻煩的部分,網上所有教程講的都不對。因為現在是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模塊
這個工作應該一開始就做好,要不然后面要做的話,還得把建好的組全刪掉再重建。這個模塊的作用是當你建一個組的時候,把一些用戶添加到這個組里去,它會自動給這些用戶添加一個memberOf屬性,有很多應用需要檢查這個屬性。
添加的時候比較麻煩,需要建3個ldif文件,然后1個執行ldapmodify,2個執行ldapadd,錯一點都不行:
memberof_config.ldif
再一次重申:文件名叫做什么根本無所謂,只要后綴名為ldif即可。
dn: cn=module,cn=config cn: module objectClass: olcModuleList olcModuleLoad: memberof olcModulePath: /usr/lib64/openldapdn: 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/,看是不是多了一個模塊,這個模塊的數字編號直接影響下一步操作。
refint1.ldif
dn: cn=module{0},cn=config add: olcmoduleload olcmoduleload: refint這個文件里我的memberOf是第一個模塊,所以編號是0,你的不一定,要看清楚到底第幾號模塊是memberof,然后就改成幾就可以了,對于這個文件,我們要執行ldapmodify操作:
ldapmodify?-Q -Y EXTERNAL -H ldapi:/// -f refint1.ldif你如果能看懂它的意思的話,它的大意是說要修改我們剛剛添加的那個模塊文件的內容。
refint2.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
好吧,干完了上面這些啰里巴嗦的事情,你可以先給自己泡杯咖啡,接下來還有很多工作要做,不過難度已經沒有剛才那么大了。
我們開始安裝phpLDAPadmin。
yum?install phpldapadminCentOS的yum安裝總是這么令人賞心悅目。
配置phpLDAPadmin
接下來讓我們在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'));,我們只允許管理員訪問,其他任何人不得訪問。
使用phpLDAPadmin
你現在可以通過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不是一個輕松的活,但是考慮到有那么多第三方應用都支持這個鬼東西,花點代價把它配通還是值得的。希望你一切順利。
更多多資訊或疑問內容請關注?微信公眾號 “讓夢飛起來”?或添加小編微信,?后臺回復 “Python” ,領取更多資料哦
? ?? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ??
總結
以上是生活随笔為你收集整理的OpenLDAP在linux上的部署和原理应用centos7的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nginx 监听同一端口
- 下一篇: Ubuntu(Debian) 18.04