Ldap概念


最近在公司做一個ldap項目,自己在學校從來沒有接觸過ldap,自己從零開始收集資料開始學習ldap,接下來的博客會記錄一下自己的學習成果,當然有些都是網上各路大牛的研究成果,也有自己的理解。

一、Ldap是什么?

師父將任務分配給我后,一臉懵逼,Ldap是什么?就開始網上各種找。

LDAP:Lightweight Directory Access Protocol 輕量級目錄訪問協議

Ldap是一種目錄式的數據存儲方式,類似於數據庫,區別於常用的關系型數據庫,都是用來存儲數據的,知識存儲的方式不同而已;

ldap區別於關系型數據庫的最大不同就是其是目錄結構形式的,網上有的說是類似於電話簿,我想了半天感覺又不像,自己感覺最像的應該是計算機存儲路徑:

 

根目錄的表示:                            C:\                       ----->代表的是C盤

根目錄下文件的表示:                   C:\Users                ------>代表C盤下的Users文件夾

                                               C:\Windows           ------->代表C盤下的Windows文件夾

Users文件夾下的文件的表示:        C:\Users\Administrator ---->代表C盤下的Users文件夾下的Administrator文件夾

 

其實這一個個路徑就是一個文件的Id,我們可以直接在計算機中通過路徑找到所要找的文件。

現在明白了計算機的文件目錄了,那么基本上也就懂了ldap了。

計算機中的目錄代表的是一個個文件或者是文件夾,而在ldap中也是用目錄的形式表示存儲的數據,但是他的存儲數據不是文件或者文件夾了,可以看做一條數據對象。

目錄結構

      

二、數據唯一標識符--->DN

要想存儲這個公司的信息,首先要有一個基准DN,LDAP目錄樹的最頂部就是根,也就是所謂的“基准DN”。

現在最常用的格式,用公司的域名作為基准DN。例如:  “DN:dc=某公司, dc=com”  就是上圖公司ldap的基准DN,也就是根節點吧,而 “DN:dc=某公司, dc=com  這個字符串就是這個根節點的id。

根節點下面就是  : 某公司的數據信息了, 某公司這個節點就用 :      “DN:ou=某公司,dc=某公司, dc=com”         這樣一個字符串來表示;

可以看出來某公司這個節點隸屬於“DN:dc=某公司, dc=com”這個根節點;

接下來:表示某公司下的一個部門---研發部:  “DN:ou=研發部,ou=某公司,dc=某公司, dc=com”   ,從Dn中也能看出研發部隸屬於某公司這個節點下的,因為研發部的Dn,包含了某公司的Dn;

再來表示研發部下面的  王二 員工:   “DN:uid=王二,ou=研發部,ou=某公司,dc=某公司, dc=com” 

從上面Dn表示的例子可以很明白的看出ldap目錄的表示很類似於計算機中文件目錄的表示;

記住:Dn是ldap中數據的ID

現在應該明白什么是DN了,也就是數據對象的id

DN分析

我們再來看一下剛才的幾個DN:

BASE Dn (root Dn):     “DN:dc=某公司, dc=com

某公司的DN:                      “DN:ou=某公司,dc=某公司, dc=com

研發部的DN:                     “DN:ou=研發部,ou=某公司,dc=某公司, dc=com

王二員工的DN:                  “DN:uid=王二,ou=研發部,ou=某公司,dc=某公司, dc=com” 

肯定會有個疑問:DN的組成?上面這幾個DN中,dc,ou,uid都是些什么含義?

這些都是DN的屬性:

以下是常用的屬性名和它代表的意義(在LDAP中屬性名大小寫不敏感):
CN    ----->常用名稱,常常是DN的一部分
L      ----->地名,通常是城市的名稱
ST    ----->州或省的名稱
O     ----->組織名稱
OU  ------>組織單位
C    ------>國家名稱
STREET –>街道地址
DC   ------>域名成分
UID  ------>用戶標識

三、對象類和屬性

剛才說了,在ldap中存儲着一個個數據對象,從這個例子中我們也看到,這個數據對象可以是一個公司或者部門,也可以一個個員工,當然ldap也可以存儲其他類型的對象,那ldap是怎么區分的呢?

LDAP存儲各種類型的數據對象,這些對象可以用屬性來表示。LDAP目錄用對象類(objectClasses)的概念來定義運行哪一類的對象使用什么屬性。在幾乎所有的 LDAP服務器中,都要根據需要擴展基本的LDAP目錄的功能,創建新的對象類或者擴展現存的對象類。所有對象類都從其父對象類繼承。

LDAP中,一個條目必須包含一個objectClass屬性,且需要賦予至少一個值。每一個值將用作一條LDAP條目進行數據存儲的模板;模板中包含了一個條目必須被賦值的屬性和可選的屬性。objectClass有着嚴格的等級之分,最頂層是top和alias。例如,organizationalPerson這個objectClass就隸屬於person,而person又隸屬於top。

objectClass可分為以下3類:


結構型(Structural):如person和organizationUnit;
輔助型(Auxiliary):如extensibeObject;
抽象型(Abstract):如top,抽象型的objectClass不能直接使用。

在OpenLDAP的schema中定義了很多objectClass,下面列出部分常用的objectClass的名稱。


● account
● alias
● dcobject
● domain
● ipHost
● organization
● organizationalRole
● organizationalUnit
● person
● organizationalPerson
● inetOrgPerson
● residentialPerson
● posixAccount
● posixGroup


了解Attribute

屬性(Attribute)類似於程序設計中的變量,可以被賦值。在OpenLDAP中聲明了許多常用的Attribute(用戶也可自己定義Attribute)。常見的Attribute含義如下:
● c:國家。
● cn:common name,指一個對象的名字。如果指人,需要使用其全名。
● dc:domain Component,常用來指一個域名的一部分。
● givenName:指一個人的名字,不能用來指姓。
● l:指一個地名,如一個城市或者其他地理區域的名字。
● mail:電子信箱地址。
● o:organizationName,指一個組織的名字。
● ou:organizationalUnitName,指一個組織單元的名字。
● sn:surname,指一個人的姓。
● telephoneNumber:電話號碼,應該帶有所在的國家的代碼。

提示:objectClass是一種特殊的Attribute,它包含其他用到的Attribute以及其自身。


對於不同的objectClass,通常具有一些必設屬性值和一些可選屬性值。例如,可使用person這個objectClass來表示系統中一個用戶的條目,對於系統中用戶通常需要有這樣一些信息:姓名、電話、密碼、描述等。如下圖所示,對於person,通過cn和sn設置用戶的名和姓,這是必須設置的,而其他屬性則是可選的。

下面列出部分常用objectClass要求必設的屬性。
● account:userid。
● organization:o。
● person:cn和sn。
● organizationalPerson:與person相同。
● organizationalRole:cn。
● organizationUnit:ou。
● posixGroup:cn、gidNumber。
● posixAccount:cn、gidNumber、homeDirectory、uid、uidNumber。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM