轉自:https://blog.csdn.net/tanshizhen119/article/details/79942315java
仍是先來百度百科介紹。git
LDAP是輕量目錄訪問協議,英文全稱是Lightweight Directory Access Protocol,通常都簡稱爲LDAP。它是基於X.500標準的,可是簡單多了而且能夠根據須要定製。與X.500不一樣,LDAP支持TCP/IP,這對訪問Internet是必須的。LDAP的核心規範在RFC中都有定義,全部與LDAP相關的RFC均可以在LDAPman RFC網頁中找到。github
之前我也就聽了一下公司裏主要是用來存放用戶的信息,而後用來作統一認證的。ldap協議是一個標準解析,因此好多開源軟件都支持ldap,gerrit,gitlab,redmine,jenkins等等等,好多好多。我這個專題主要是面向開源的系統,因此ldap是一個基礎。docker
先來個圖:apache
PS:安裝的是否我選擇的是LDIF存儲格式。編程
大概就是這樣,存儲就像一棵樹同樣,一級一級的,最裏面的那層存儲的最詳細的信息。例如:windows
dc=maxcrc,dc=com—— maxcrc公司網絡
ou=people——people部門數據結構
cn=devops+displayName....uid=100001+user——這個是員工的具體信息運維
dc, ou,cn, uid都有明確的定義,並且是標準的。這個咱們會在ldap schema文件裏再說明一下。
網上關於ldap的文章也不少,ldap還有好多的高級用法,能夠用來管理好多的數據,最基本的功能就是存儲信息。
若是想要深刻學習的,能夠下載這本書下來看看 《Linux+UNIX+OpenLDAP實戰指南》 密碼:cdjj
感受還能夠。
優勢:
1. 速度快,分佈式。
2. 標準協議,能夠適用在不少場景,並且集成成本低。
3. 是一個很是成熟的產品,網上的資料,用法都不少,學習成本低(不過開發的可能瞭解的很少,偏運維應該是瞭解得透透的吧)
hub鏡像地址: osixia/openldap
github地址:https://github.com/osixia/docker-openldap 這上面會對此docker鏡像有明確的說明,包括如何運行。各類場景都有,請好好閱讀。
下載docker鏡像命令:docker pull osixia/openldap
運行命令:docker run --name ldap --env LDAP_ORGANISATION="shanktech" --env LDAP_DOMAIN="shanktech.com" --env LDAP_ADMIN_PASSWORD="123456" -p 389:389 -p 636:639 --detach osixia/openldap:1.2.0
此命令咱們沒有對目錄進行映射,因此當docker運行結束後,產生的全部數據會丟失。
若是不想用docker運行,也能夠再官網上下載安裝包進行安裝。在windows上也是能夠進行安裝。
openldap for windows 下載地址 這個安裝就很簡單了,下一步下一步便可.
在osixia/openldap docker容器裏使用的是MDB格式。
運行docker run命令後ldap服務就起來了。
這邊推薦一個客戶端 ApacheDirectoryStudio 能夠直接點擊下載,基於java eclipse寫的,運行起來和eclipse差很少。
上圖
1. 輸入ip 由於沒有改端口因此使用的是默認端口。
2. 輸入用戶名和密碼登陸
咱們在運行docker run命令的時候設置了環境變量。
-env LDAP_ORGANISATION="shanktech"
--env LDAP_DOMAIN="shanktech.com"
--env LDAP_ADMIN_PASSWORD="123456"
因此登陸LDAP的用戶名和密碼爲 用戶名:cn=admin,dc=shanktech,dc=com 密碼爲123456
3.插入新數據
上一波圖,不過相信,不用看圖你們也能夠作出來。第一次接觸ldap, 昨天本身摸索了很久,不過通過學習發現了本身迷茫的圓心,主要在schema, objectcalss, atrr不是很理解致使的。下面我會對進行詳細的解釋,由於這個在網上沒有,至少我沒有搜索到。
這樣就插入了一條數據。
LDAP說明重點知識介紹
在回顧一下LDAP存儲格式,是以一種樹狀的格式存儲的。在個人理解,ldap是先定義了一個樹狀數據結構,在葉子節點上定義了專屬的屬性。這些定義是經過schema文件來體現的,咱們來舉一個例子以下圖:
schema文件就是放了這些定義的信息的。(ldap有高級的玩法,就是本身自定義schema文件,本身定義節點。固然這不能亂定義的,要在擴展節點上定義本身的葉子節點屬性,看到這些讓我想起了簡單網絡管理協議SNMP)
接下來咱們再談一下ObjectClass和attr的關係。
其實看這個ldap這個樹狀結構,屬性與屬性之間個獨立,分散,像是一個個特徵同樣。Objectclass是將這些有關聯關係的特徵組織起來,定義成一個模板。讓你去好組織數據。這個和咱們常說面向的對象編程裏的class, 屬性一致。ldap這裏的屬性與class都是標準定義的而已。下圖對Objectclass大概解釋了一下。
1. 首先將Gerrit認證換成LDAP
在gerrit.config中修改配置,而後重啓。
[auth]
type = LDAP
[ldap]
server = ldap://192.168.2.189
accountBase = dc=shanktech,dc=com
accountPattern = (&(objectClass=person)(uid=${username}))
accountFullName = displayName
accountEmailAddress = mail
username = cn=admin,dc=shanktech,dc=com
password = 123456
以下圖:
而後登陸成功
寫的這些都是很基本的功能,先不打算深刻了,我是計劃着先把全部的工具都跑一遍,而後再逐漸的深刻。