LDAP介紹
轉自:https://blog.csdn.net/tanshizhen119/article/details/79942315
還是先來百度百科介紹。
LDAP是輕量目錄訪問協議,英文全稱是Lightweight Directory Access Protocol,一般都簡稱為LDAP。它是基於X.500標准的,但是簡單多了並且可以根據需要定制。與X.500不同,LDAP支持TCP/IP,這對訪問Internet是必須的。LDAP的核心規范在RFC中都有定義,所有與LDAP相關的RFC都可以在LDAPman RFC網頁中找到。
以前我也就聽了一下公司里主要是用來存放用戶的信息,然后用來做統一認證的。ldap協議是一個標准解析,所以好多開源軟件都支持ldap,gerrit,gitlab,redmine,jenkins等等等,好多好多。我這個專題主要是面向開源的系統,所以ldap是一個基礎。
先來個圖:
PS:安裝的是否我選擇的是LDIF存儲格式。
大概就是這樣,存儲就像一棵樹一樣,一級一級的,最里面的那層存儲的最詳細的信息。例如:
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. 是一個非常成熟的產品,網上的資料,用法都很多,學習成本低(不過開發的可能了解的不多,偏運維應該是了解得透透的吧)
LDAP環境搭建
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差不多。
創建LDAP連接
上圖
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大概解釋了一下。
使用LDAP認證登錄Gerrit系統
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
如下圖:
然后登錄成功
寫的這些都是很基本的功能,先不打算深入了,我是計划着先把所有的工具都跑一遍,然后再逐漸的深入。