我花了一個五一終於搞懂了OpenLDAP

輕型目錄訪問協議(英文: Lightweight Directory Access Protocol,縮寫: LDAP)是一個開放的,中立的,工業標準的應用協議,經過IP協議提供訪問控制和維護分佈式信息的目錄信息。

OpenLDAP是輕型目錄訪問協議(Lightweight Directory Access ProtocolLDAP)的自由和開源的實現,在其OpenLDAP許可證下發行,並已經被包含在衆多流行的Linux發行版中。php

能夠這樣講:市面上只要你可以想像獲得的全部工具軟件,所有都支持LDAP協議。好比說你公司要安裝一個項目管理工具,那麼這個工具幾乎必然支持LDAP協議,你公司要安裝一個bug管理工具,這工具必然也支持LDAP協議,你公司要安裝一套軟件版本管理工具,這工具也必然支持LDAP協議。LDAP協議的好處就是你公司的全部員工在全部這些工具裏共享同一套用戶名和密碼,來人的時候新增一個用戶就能自動訪問全部系統,走人的時候一鍵刪除就取消了他對全部系統的訪問權限,這就是LDAP前端

有些領域並不像前端世界那麼潮那麼性感,可是缺了這個環節又總以爲很彆扭。若是深刻到運維的世界,你會發現大部分工具還活在上個世紀,產品設計徹底反人類,好比cn, dc, dn, ou這樣的命名方式,若是不鑽研個一天兩天,鬼知道它在說什麼,好比說dnsdns是什麼鬼?域名嗎?不是,它只是某個懶惰的工程師起了dn這麼一個縮寫,再加一個複數,就成了dns,和域名服務器沒有任何關係;cn是什麼?中國的縮寫?你想多了,這和中國沒有任何關係。通過一系列這樣瘋狂的洗腦以後,你才能逐漸明白LDAP到底想幹什麼。拋棄你全部的認知,把本身當成一個什麼都不懂的幼兒園孩子,而後咱們從頭學起LDAPmysql

若是你搜索OpenLDAP的安裝指南,很不幸地告訴你,網上無論中文的英文的,90%都是錯的,它們都還活在上個世紀,它們會告訴你要去修改一個叫作slapd.conf的文件,基本上看到這裏,你就不用往下看了,這個文件早就被拋棄,新版的OpenLDAP里根本就沒有這個文件!取而代之的是slapd.d的文件夾,而後另外一部分教程會告訴你,讓你修改這個文件夾下的某一個ldif文件,看到這裏,你也不用往下看了,你又看到了僞教程,由於這個文件夾下的全部文件的第一行都明確地寫着:『這是一個自動生成的文件,不要修改它!』你修改了它以後,它的md5校驗值會匹配不上,形成更多的問題。你應該用ldapmodify來修改這個文件,而關於ldapmodify的教程,能夠說幾乎就沒有!我一開始不知道面臨這樣荒謬的處境,不少運維人員是怎麼活下來的,不過等我本身配通了之後,真的是累到連寫教程的精力都沒有了,好吧,我已經配通了,大家各人自求多福吧。nginx

架構

實際上,個人操做步驟不少都是反的,架構這部分是最後才意識到的,但實際上從最一開始就應該先想到。實際上整個OpenLDAP的架構大體包含3個部分,而網上沒有教材提到這塊。web

OpenLDAP

首先,是OpenLDAP的服務器自己,這個東西其實只至關因而一個mysql數據庫,它是沒有酷炫的圖形界面的,若是你願意每次都手敲一大堆代碼,也能夠用它,但這種反人類的設計真的不是給人用的。sql

phpLDAPadmin

因此,你須要安裝一個叫做phpLDAPadmin的工具,好歹這是一個圖形界面,雖然奇醜無比,而且配置起來也並不容易。數據庫

PWM

光裝管理工具還不夠,你總要給用戶提供一個修改密碼的地方。api

客戶端

最後,你還須要配置各類工具。服務器

架構圖

我畫了一個簡單的架構圖以下:架構

圖片描述

安裝

安裝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,那就是mysqlinsert操做了。不過這裏咱們操做的只是配置文件自己,還牽涉不到添加用戶或者更改用戶,若是你覺得事情就這麼簡單,那就是你太天真了。

RootDN在這裏就表示你整個OpenLDAP系統的管理員用戶名是什麼,不要奇怪,後面這一砣都是用戶名cn=admin,dc=qiban,dc=com,長的有點像email地址,實際意思也差很少,但總之就不是email就好了。不要問爲何,總之cn就是email前面的那個名字,後面帶dc的都是域名。

真實狀況是你還須要給這個用戶設置一個密碼,具體怎麼設自行Google,但仍是那句話:不要修改系統文件,要用ldapmodify來執行。

添加memberOf模塊

這個工做應該一開始就作好,要否則後面要作的話,還得把建好的組全刪掉再重建。這個模塊的做用是當你建一個組的時候,把一些用戶添加到這個組裏去,它會自動給這些用戶添加一個memberOf屬性,有不少應用須要檢查這個屬性。

添加的時候比較麻煩,須要建3ldif文件,而後1個執行ldapmodify2個執行ldapadd,錯一點都不行:

memberof_config.ldif

再一次重申:文件名叫作什麼根本無所謂,只要後綴名爲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/,看是否是多了一個模塊,這個模塊的數字編號直接影響下一步操做。

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 phpldapadmin

CentOSyum安裝老是這麼使人賞心悅目。

配置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,而後輸入密碼,若是你前面一切都設置對了,那麼這裏就能夠登陸進去了。

clipboard.png

界面裏透出一股濃濃的上世紀九十年代風格,不過好歹咱們終於能夠脫離純手寫代碼管理的窘境了。

這時候你首先要創建兩個organizationalUnit,一個叫做groups,一個叫做users。不要問爲何。

而後在users下面建幾個inetOrgPerson,這些就是你的用戶了。注意,在建立新條目時,必定要選擇默認,不要選擇什麼Posix或者Generic User Account,那隻會幫你建出一堆沒用的Linux帳號出來,咱們只想要web用戶,不想建什麼Linux用戶。注意:密碼這個地方必定要選md5,不然你後面和其它系統鏈接會出問題。

而後在groups下面建幾個組吧,好比admins, users等等,注意選擇objectClassgroupOfNames就好了。而後把你剛剛建好的幾個用戶分門別類的給他們加到組裏去。

在這一步上,若是你前面配置memberOf模塊配置正確的話,你會在user顯示內部屬性裏看到它的memberOf屬性,若是看不到,說明你沒有配對。

配置第三方應用

到此爲止,彷佛真沒有什麼好說的了,Phabricator, Confluence, Zabbix, Grafana, 禪道等等,幾乎你能想到的任何一個第三方應用都會有說明書教你怎麼配置dc, cn, ou這些東西,通過了上面這一番折騰,你怎麼着也應該對LDAP的一些術語有所瞭解了,若是仍是不行,說明你玩它的時間仍是不夠長,再多玩兩天,也就明白了。

配置好以後的好處就是你不再用東一塊西一塊地建用戶了,而能夠在一個統一的地方集中管理你的用戶和羣組受權。

結語

總之,配置OpenLDAP不是一個輕鬆的活,可是考慮到有那麼多第三方應用都支持這個鬼東西,花點代價把它配通仍是值得的。但願你一切順利。

相關文章
相關標籤/搜索