LDAP
-------------------------
百度百科地址:http://baike.baidu.com/link?url=RZAbmo260mhR2BalQSso4NUnQEiPFpviPbokkj_WY-xpDbeVLFuSED-dh1RhuykpUz9bZLbxQ7wUP_iGjRLaqq


LDAP是輕量目錄訪問協議,英文全稱是Lightweight Directory Access Protocol,一般都簡稱為LDAP。它是基於X.500標準的,但是簡單多了並且可以根據需要定製。與X.500不同,LDAP支持TCP/IP,這對訪問Internet是必須的。LDAP的核心規範在RFC中都有定義,所有與LDAP相關的RFC都可以在LDAPman RFC網頁中找到。


LDAP目錄以樹狀的層次結構來存儲數據。如果你對自頂向下的DNS樹或UNIX文件的目錄樹比較熟悉,也就很容易掌握LDAP目錄樹這個概念了。就象DNS的主機名那樣,LDAP目錄記錄的標識名(Distinguished Name,簡稱DN)是用來讀取單個記錄,以及回溯到樹的頂部。
在UNIX文件系統中,最頂層是根目錄(root)。在根目錄的下面有很多的文件和目錄。象上面介紹的那樣,LDAP目錄也是用同樣的方法組織起來的。
在根目錄下,要把數據從邏輯上區分開。因為歷史上(X.500)的原因,大多數LDAP目錄用OU從邏輯上把數據分開來。OU表示“Organization Unit",在X.500協議中是用來表示公司內部的機構:銷售部、財務部,等等。現在LDAP還保留ou=這樣的命名規則,但是擴展了分類的範圍,可以分類為:ou=people, ou=groups, ou=devices,等等。更低一級的OU有時用來做更細的歸類。
開發方式


如果需要開發一種提供公共信息查詢的系統一般的設計方法可能是採用基於WEB的數據庫設計方式,即前端使用瀏覽器而後端使用WEB服務器加上關係數據庫。後端在Windows的典型實現可能是Windows NT + IIS + Acess數據庫或者是SQL SERVER,IIS和數據庫之間通過ASP技術使用ODBC進行連接,達到通過填寫表單查詢數據的功能;
目錄服務


後端在Linux系統的典型實現可能是Linux+ Apache + postgresql,Apache和數據庫之間通過PHP3提供的函數進行連接。使用上述方法的缺點是後端關係數據庫的引入導致系統整體的性能降低和系統的管理比較繁瑣,因為需要不斷的進行數據類型的驗證和事務的完整性的確認;並且前端用户對數據的控制不夠靈活,用户權限的設置一般只能是設置在表一級而不是設置在記錄一級。
目錄服務的推出主要是解決上述數據庫中存在的問題。目錄與關係數據庫相似,是指具有描述性的基於屬性的記錄集合,但它的數據類型主要是字符型,為了檢索的需要添加了BIN(二進制數據)、CIS(忽略大小寫)、CES(大小寫敏感)、TEL(電話型)等語法(Syntax),而不是關係數據庫提供的整數、浮點數、日期、貨幣等類型,同樣也不提供象關係數據庫中普遍包含的大量的函數,它主要面向數據的查詢服務(查詢和修改操作比一般是大於10:1),不提供事務的回滾(rollback)機制,它的數據修改使用簡單的鎖定機制實現All-or-Nothing,它的目標是快速響應和大容量查詢並且提供多目錄服務器的信息複製功能。
現在該説説LDAP目錄到底有些什麼優勢了。現在LDAP的流行是很多因素共同作用的結果。可能LDAP最大的優勢是:可以在任何計算機平台上,用很容易獲得的而且數目不斷增加的LDAP的客户端程序訪問LDAP目錄。而且也很容易定製應用程序為它加上LDAP的支持。
訪問控制


LDAP提供很複雜的不同層次的訪問控制或者ACI。因這些訪問可以在服務器端控制,這比用客户端的軟件保證數據的安全可安全多了。
用LDAP的ACI,可以完成:
l 給予用户改變他們自己的電話號碼和家庭地址的權限,但是限制他們對其它數據(如,職務名稱,經理的登錄名,等等)只有“只讀”權限。
l 給予“HR-admins"組中的所有人權限以改變下面這些用户的信息:經理、工作名稱、員工號、部門名稱和部門號。但是對其它域沒有寫權限。
l 禁止任何人查詢LDAP服務器上的用户口令,但是可以允許用户改變他或她自己的口令。
l 給予經理訪問他們上級的家庭電話的只讀權限,但是禁止其他人有這個權限。
l 給予“host-admins"組中的任何人創建、刪除和編輯所有保存在LDAP服務器中的與計算機主機有關的信息
l 通過Web,允許“foobar-sales"組中的成員有選擇地給予或禁止他們自己讀取一部分客户聯繫數據的讀權限。這將允許他們把客户聯繫信息下載到本地的筆記本電腦或個人數字助理(PDA)上。(如果銷售人員的軟件都支持LDAP,這將非常有用)
l 通過Web,允許組的所有者刪除或添加他們擁有的組的成員。例如:可以允許銷售經理給予或禁止銷售人員改變Web頁的權限。也可以允許郵件假名(mail aliase)的所有者不經過IT技術人員就直接從郵件假名中刪除或添加用户。“公用”的郵件列表應該允許用户從郵件假名中添加或刪除自己(但是隻能是自己)。也可以對IP地址或主機名加以限制。例如,某些域只允許用户IP地址以192.168.200.*開頭的有讀的權限,或者用户反向查找DNS得到的主機名必須為*.foobar.com。
使用權限


LDAP允許你根據需要使用ACI(一般都稱為ACL或者訪問控制列表)控制對數據讀和寫的權限。例如,設備管理員可以有權改變員工的工作地點和辦公室號碼,但是不允許改變記錄中其它的域。ACI可以根據誰訪問數據、訪問什麼數據、數據存在什麼地方以及其它對數據進行訪問控制。因為這些都是由LDAP目錄服務器完成的,所以不用擔心在客户端的應用程序上是否要進行安全檢查。
LDAP(Lightweight Directory Access Protocol)是目錄服務在TCP/IP上的實現(RFC 1777 V2版和RFC 2251 V3版)。它是對X500的目錄協議的移植,但是簡化了實現方法,所以稱為輕量級的目錄服務。在LDAP中目錄是按照樹型結構組織,目錄由條目(Entry)組成,條目相當於關係數據庫中表的記錄;條目是具有區別名DN(Distinguished Name)的屬性(Attribute)集合,DN相當於關係數據庫表中的主鍵(Primary Key);屬性由類型(Type)和多個值(Values)組成,相當於關係數據庫中的域(Field)由域名和數據類型組成,只是為了方便檢索的需要,LDAP中的Type可以有多個Value,而不是關係數據庫中為降低數據的冗餘性要求實現的各個域必須是不相關的。LDAP中條目的組織一般按照地理位置和組織關係進行組織,非常的直觀。LDAP把數據存放在文件中,為提高效率可以使用基於索引的文件數據庫,而不是關係數據庫。LDAP協議集還規定了DN的命名方法、存取控制方法、搜索格式、複製方法、URL格式、開發接口等。
LDAP對於這樣存儲這樣的信息最為有用,也就是數據需要從不同的地點讀取,但是不需要經常更新。
LDAP協議


LDAP協議是跨平台的和標準的協議,因此應用程序就不用為LDAP目錄放在什麼樣的服務器上操心了。實際上,LDAP得到了業界的廣泛認可,因為它是Internet的標準。廠商都很願意在產品中加入對LDAP的支持,因為他們根本不用考慮另一端(客户端或服務端)是怎麼樣的。LDAP服務器可以是任何一個開放源代碼或商用的LDAP目錄服務器(或者還可能是具有LDAP界面的關係型數據庫),因為可以用同樣的協議、客户端連接軟件包和查詢命令與LDAP服務器進行交互。與LDAP不同的是,如果軟件廠商想在軟件產品中集成對DBMS的支持,那麼通常都要對每一個數據庫服務器單獨定製。不象很多商用的關係型數據庫,你不必為LDAP的每一個客户端連接或許可協議付費。大多數的LDAP服務器安裝起來很簡單,也容易維護和優化。


命名格式編輯
LDAP協議中採用的命名格式, 因為我們需要通過名字信息訪問目錄對象,所以名字格式對於用户或者應用程序非常重要。活動目錄支持大多數的名字格式類型。較為常用的格式有以下兩種:
LDAP URL 和X.500
任何一個支持LDAP 的客户都可以利用LDAP名通過LDAP 協議訪問活動目錄,LDAP 名不像普通的Internet URL 名字那麼直觀,但是LDAP 名往往隱藏在 應用系統的內部,最終用户很少直接使用LDAP 名。LDAP 名使用X.500 命名規 範,也稱為屬性化命名法,包括活動目錄服務所在的服務器以及對象的屬性信息。
名詞詮釋編輯
PART1


1.1. LDAP是什麼
1.2. LDAP是電話簿
1.3. LDAP是不是數據庫
PART2


2. LDAP的特點
2.1. LDAP的優勢
2.1.1 跨平台
2.1.2 費用及維護
大多數的LDAP服務器安裝起來很簡單,也容易維護和優化。
2.1.3 複製技術
2.1.4 允許使用ACI
2.2. LDAP存儲什麼數據
LDAP對於這樣存儲這樣的信息最為有用:也就是數據需要從不同的地點讀取,但是不需要經常更新。例如,這些信息存儲在LDAP目錄中是十分有效的:
l 公司員工的電話號碼簿和組織結構圖
l 客户的聯繫信息
l 軟件包的配置信息
l 公用證書和安全密匙
2.3. 什麼時候該用LDAP存儲數據
如果下面每一個問題的答案都是"是",那麼把數據存在LDAP中就是一個好主意。
l 需要在任何平台上都能讀取數據嗎?
l 每一個單獨的記錄項是不是每一天都只有很少的改變?
PART3


3. LDAP的基本模型
3.1 信息模型:描述LDAP的信息表示方式
在LDAP中信息以樹狀方式組織,在樹狀信息中的基本數據單元是條目,而每個條目由屬性構成,屬性中存儲有屬性值;LDAP中的信息模式,類似於面向對象的概念,在LDAP中每個條目必須屬於某個或多個對象類(Object Class),每個Object Class由多個屬性類型組成,每個屬性類型有所對應的語法和匹配規則;對象類和屬性類型的定義均可以使用繼承的概念。每個條目創建時,必須定義所屬的對象類,必須提供對象類中的必選屬性類型的屬性值,在LDAP中一個屬性類型可以對應多個值。
在LDAP中把對象類、屬性類型、語法和匹配規則統稱為Schema,在LDAP中有許多系統對象類、屬性類型、語法和匹配規則,這些系統Schema在LDAP標準中進行了規定,同時不同的應用領域也定義了自己的Schema,同時用户在應用時,也可以根據需要自定義Schema。這有些類似於XML,除了XML標準中的XML定義外,每個行業都有自己標準的DTD或DOM定義,用户也可以自擴展;也如同XML,在LDAP中也鼓勵用户儘量使用標準的Schema,以增強信息的互聯互通。
在Schema中最難理解的是匹配規則,這是LDAP中為了加快查詢的速度,針對不同的數據類型,可以提供不同的匹配方法,如針對字符串類型的相等、模糊、大於小於均提供自己的匹配規則。
3.2 命名模型:描述LDAP中的數據如何組織
LDAP中的命名模型,也即LDAP中的條目定位方式。在LDAP中每個條目均有自己的DN和RDN。DN是該條目在整個樹中的唯一名稱標識,RDN是條目在父節點下的唯一名稱標識,如同文件系統中,帶路徑的文件名就是DN,文件名就是RDN。
3.3功能模型:描述LDAP中的數據操作訪問
在LDAP中共有四類10種操作:查詢類操作,如搜索、比較;更新類操作,如添加條目、刪除條目、修改條目、修改條目名;認證類操作,如綁定、解綁定;其它操作,如放棄和擴展操作。除了擴展操作,另外9種是LDAP的標準操作;擴展操作是LDAP中為了增加新的功能,提供的一種標準的擴展框架,當前已經成為LDAP標準的擴展操作,有修改密碼和StartTLS擴展,在新的RFC標準和草案中正在增加一些新的擴展操作,不同的LDAP廠商也均定義了自己的擴展操作。
3.4 安全模型:描述LDAP中的安全機制
LDAP中的安全模型主要通過身份認證、安全通道和訪問控制來實現。
3.4.1身份認證
在LDAP中提供三種認證機制,即匿名、基本認證和SASL(Simple Authentication and Secure Layer)認證。匿名認證即不對用户進行認證,該方法僅對完全公開的方式適用;基本認證均是通過用户名和密碼進行身份識別,又分為簡單密碼和摘要密碼認證;SASL認證即LDAP提供的在SSL和TLS安全通道基礎上進行的身份認證,包括數字證書的認證。
3.4.2 通訊安全
在LDAP中提供了基於SSL/TLS的通訊安全保障。SSL/TLS是基於PKI信息安全技術,是當前Internet上廣泛採用的安全服務。LDAP通過StartTLS方式啓動TLS服務,可以提供通訊中的數據保密性、完整性保護;通過強制客户端證書認證的TLS服務,同時可以實現對客户端身份和服務器端身份的雙向驗證。
3.4.3訪問控制
雖然LDAP並無訪問控制的標準,但從一些草案中或是事實上LDAP產品的訪問控制情況,我們不難看出:LDAP訪問控制異常的靈活和豐富,在LDAP中是基於訪問控制策略語句來實現訪問控制的,這不同於現有的關係型數據庫系統和應用系統,它是通過基於訪問控制列表來實現的,無論是基於組模式或角色模式,都擺脱不了這種限制。
在使用關係型數據庫系統開發應用時,往往是通過幾個固定的數據庫用户名訪問數據庫。對於應用系統本身的訪問控制,通常是需要建立專門的用户表,在應用系統內開發針對不同用户的訪問控制授權代碼,這樣一旦訪問控制策略變更時,往往需要代碼進行變更。總之一句話,關係型數據庫的應用中用户數據管理和數據庫訪問標識是分離的,複雜的數據訪問控制需要通過應用來實現。
而對於LDAP,用户數據管理和訪問標識是一體的,應用不需要關心訪問控制的實現。這是由於在LDAP中的訪問控制語句是基於策略語句來實現的,無論是訪問控制的數據對象,還是訪問控制的主體對象,均是與這些對象在樹中的位置和對象本身的數據特徵相關。
在LDAP中,可以把整個目錄、目錄的子樹、制定條目、特定條目屬性集或符合某過濾條件的條目作為控制對象進行授權;可以把特定用户、屬於特定組或所有目錄用户作為授權主體進行授權;最後,還可以定義對特定位置(例如IP地址或DNS名稱)的訪問權。
4. LDAP數據結構
PART4


LDAP是實現了指定的數據結構的存貯,它包括以下可以用關係數據庫實現的結構要求:樹狀組織、條目認證、類型定義、許可樹形記錄拷貝。
4.1 樹狀組織
無論是X500還是LDAP都是採用樹狀方式進行記錄。每一個樹目錄都有一個樹根的入口條目,子記錄全部是這一根條目的子孫。這是目錄與關係數據類型最大的區別(關係數據庫的應用結構也可實現樹狀記錄)。因此,把目錄看作是更高級的樹狀數據庫也未嘗不可,只不過除此外,它不能實現關係存貯的重要功能。
4.2 條目和條目認證
LDAP是以條目作為認證的根據。ROOT的權限認證與目錄本身無關,但除此外所有條目的認證權限由條目本身的密碼進行認證。LDAP可以配置成各種各樣不同的父子條目權限繼承方式。
每一個條目相當於一個單一的平面文本記錄,由條目自身或指定的條目認證進行訪問控制。因此,LDAP定義的存貯結構等同於一批樹狀組織的平面數據庫,並提供相應的訪問控制。
條目中的記錄以名-值對的形式存在,每一個名值對必須由數據樣式schema預定義。因此,LDAP可以看作是以規定的值類型以名值對形式存貯在一系列以樹狀組織的平面數據庫的記錄的集合。
4.3 數據樣式(schema)
數據樣式schema是針對不同的應用,由用户指定(設計)類和屬性類型預定義,條目中的類(objectclass)和屬性必須在在LDAP服務器啓動時載入內存的schema已有定義。因此,AD活動目錄中的條目記錄就必須符合Active Directory的schema中。如果已提供的schema中的定義不夠用,用户可以自行定義新的schema.
在http://ldap.akbkhome點com/index.php中可以看到常用的schema。
4.4 對象類型(objectClass)
LDAP目錄用對象類型(objectclass)的概念來定義運行哪一類的對象使用什麼屬性。
條目中的記錄通過objectclass實現分類,objectClass是一個繼承性的類定義,每一個類定義指定必須具備的屬性。如某一條目指定必須符合某個類型,則它必須具備超類所指定的屬性。
通過objectclass分類,分散的條目中的記錄就實際上建立了一個索引結構,為高速的讀查詢打下了基礎。Objectclass也是過濾器的主要查詢對象。
4.5 過濾器和語法
LDAP是一個查詢為主的記錄結構,無論是何種查詢方式,最終都由過濾器缺點查詢的條件。過濾器相當於SQL中的WHERE子句。任何LDAP的類過濾和字符串都必須放在括號內,如(objectclass=*),指列出所有類型的記錄(不過分類)。
可以使用=,>=,<=,~=(約等於)進行比較,如(number<=100)。合併條件是最怪的,必須把操作符放在兩個操作對象的前面而不是中間,單一操作對象用括號括起來。如
l A與B,不是A&B,而是(&(A)(B))。
l 或使用"|"表示;
l 非使用"!"表示。
l 對於"與",或"或"在操作符後可以跟多個條件表達式,但非後則只參是單個表達式。
詳見RFC1558。
4.6 樹移植
LDAP最重要的特性和要求並不是讀性能,而是擴展性。這一特性是通過樹移植和樹複製實現的。按LDAP的RFC要求,LDAP目錄應該可以任意地在不同的目錄間連接、合併並實現自動複製,及自動性同步。這意味着用户可以在任一LDAP中訪問條目,而不用管其中某一部分是否複製自全世界另一目錄中的記錄,同時另一目錄中的記錄同樣在正常運作。
這一特性如果在關係數據庫中實現,意味着要使用程序化的非規範化預複製。類似於彙總帳目的設計。
4.7 LDIF交換文件
LDIF是LDAP約定的記錄交換格式,以平面文本的形式存在,是大部分LDAP內容交換的基礎,如拷貝、添加、修改等操作,都是基於LDIF文件進行操作。
4.8 JAVA或CORBA對象串行化存儲
網絡高效率的訪問加上JAVA的跨平台能力,當把JAVA或CORBA對象串行化後存儲到LDAP目錄上時,可以產生非同一般的集成效果--實際上,這正是EJB和.NET的網絡定位基礎技術。
使用JAVA或CORBA對象存儲時,必須首先讓LDAP服務支持該對象定義,也就是説包含qmail.schema或corba.schema。
JAVA必須存儲在objectclass=javacontainer的條目中,而且必須帶有cn屬性,這意味着除非該JAVA類專門實現了DirContext接口,對於大多數JAVA類來説,只能採用DirContext代替Context實現bind的添加操作。取出JAVA類相對要簡單得多,只需使用context.lookup()獲得該對象的句柄,然後強制造型成所需要的對象就可以了,如:
Person p=(Person)contex.lookup("cn=elvis,dc=daifu,dc=com");
這個句法在EJB的程序中,是經常用到的。
使用CORBA的跨語言性質,使用CORBA存儲對象比JAVA更加誘人,這意味着所存儲的對象可以被任何語言編寫的客户端訪問。其實,微軟的.net説到底也非常簡單,無非是把COM對象存儲到微軟自家的目錄ActiveDirectory裏面,從而可以在網絡範圍內使用任何微軟平台的語言進行對象訪問而已。眾所周知,COM就是與CORBA相對的微軟規範。
使用對象串行化技術,可以把常用對象如某個打印機,某個客户直接存儲到LDAP中,然後快速獲取該對象的引用,這樣,就比把對象信息存儲到關係數據庫中,分別取出屬性,然後再初始化對象操作的做法,效率要高得多了。這是LDAP比普通關係數據庫存儲要優秀的地方,而對象數據庫還不成熟。
--------

注:大部分出自於百度百科。

-------------------------------------------------------------------

什麼是目錄服務?
    目錄服務就是按照樹狀存儲信息的模式

  

  • 目錄服務的數據類型主要是字符型, 而不是關係數據庫提供的整數、浮點數、日期、貨幣等類型

為了檢索的需要添加了BIN(二進制數據)、CIS(忽略大小寫)、CES(大小寫敏感)、TEL(電話型)等語法(Syntax)

  • 同樣也不提供象關係數據庫中普遍包含的大量的函數
  • 目錄有很強的查詢(讀)功能,適合於進行大量數據的檢索
  • 但目錄一般只執行簡單的更新(寫)操作,不支持批量更新所需要的事務處理功能
  • 它主要面向數據的查詢服務(查詢和修改操作比一般是大於10:1),不提供事務的回滾(rollback)機制.
  • 目錄具有廣泛複製信息的能力,適合於多個目錄服務器同步/更新



 


  • X.500
  • LDAP
  • Actrive Directory,Microsoft公司
  • NIS


 

     

LDAP


 

     LDAP是輕量目錄訪問協議(Lightweight Directory Access Protocol)的縮寫


 

     LDAP標準實際上是在X.500標準基礎上產生的一個簡化版本




  


  •    LDAP的結構用樹來表示,而不是用表格。正因為這樣,就不能用SQL語句了
  •    LDAP可以很快地得到查詢結果,不過在寫方面,就慢得多
  •    LDAP提供了靜態數據的快速查詢方式
  •   

       Server 用於存儲數據


 

     Client提供操作目錄信息樹的工具


 

           這些工具可以將數據庫的內容以文本格式(LDAP 數據交換格式,LDIF)呈現在您的面前


  •    LDAP是一種開放Internet標準,LDAP協議是跨平台的 的Interent協議

         它是基於X.500標準的, 與X.500不同,

LDAP支持TCP/IP(即可以分佈式部署)





 

     

LDAP存儲這樣的信息最為有用: 也就是數據需要從不同的地點讀取,但是不需要經常更新:


  •      公司員工的電話號碼簿和組織結構圖  
  •      客户的聯繫信息  
  •      計算機管理需要的信息,包括NIS映射、email假名,等等  
  •      軟件包的配置信息  
  •      公用證書和安全密匙  


 

     

Ldap的client /server結構



/usr/sbin/slapd -u ldap -h ldap:///

client

   用於對ldap server庫進行操作

工具:ldapadd, ldapsearch


   用於將ldap server庫在實際工作中使用

工具:radius+ldap, pam+ldap


 

 


 

     

身份認證在LDAP中提供三種認證機制:


  Ldapsearch –x -LLL

   通過用户名和密碼進行身份識別,又分為簡單密碼和MD5密碼認證

# ldapadd -x -D "cn=root,dc=otas,dc=cn" -W -f base.ldif
-x就是simple authetication

 Enter LDAP Password: 輸入admin123
  adding new entry "dc=otas,dc=cn"
  adding new entry "ou=People,dc=otas,dc=cn"
  adding new entry "ou=Group,dc=otas,dc=cn"

   Simple Authentication and Secure Layer

LDAP提供的在SSL和TLS安全通道基礎上進行的身份認證,包括數字證書的認證



  


[root@vmmac modules]# cat /etc/services | grep ldap 

ldap  
  
  
  
  
  
  
  
  
  
  
 389/tcp  
  
  
  
  
  
  
  
  
  
   
   
   
   
   
   
   
 明文 

ldap  
  
  
  
  
  
  
  
  
  
  
 389/udp  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
 明文 

ldaps  
  
  
  
  
  
  
  
  
  
 636/tcp  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
 # LDAP over SSL 

ldaps  
  
  
  
  
  
  
  
  
  
 636/udp  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
 # LDAP over SSL




 

     

TLS 安全性


 

     分佈式LDAP 是以

明文的格式

通過網絡來發送信息的,包括client訪問sldap的密碼。TLS(SSL 的後繼者,由OpenSSL 包)加密機制來解決這個問題。






 

     

LDAP目錄數據結構


  •   

                   

DIT是一個主要進行讀操作的數據庫


  •   

條目是具有分辨名DN(Distinguished 




 

     

在目錄樹中怎麼組織數據  


cn=Fran Smith,ou=employees,dc=foobar,dc=com
               ------------ -----------------
                 容器條目      BaseDN
 --------------------------------------------
                 DN


1。在UNIX文件系統中,最頂層是根目錄(root),LDAP目錄也通常用

ROOT做根,通常稱為BaseDN



2。因為歷史(X.500)的原因,LDAP目錄用

OU(Organization Unit)

從邏輯上把數據分開來。


 

   

Ou 也是一種條目,容器條目


3.

Ou 下就是真正的用户條目


Ldap協議報文 ldap協議格式_關係數據庫




 

   

什麼是dn?


 

     DN,Distinguished Name分辨名


 

     在LDAP中,一個條目的分辨名叫做“DN”,DN是該條目在整個樹中的

唯一名稱標識


DN相當於關係數據庫表中的關鍵字(Primary 

 Key);


是一個識別屬性,通常用於檢索


 

     常見的兩種DN設置:


基於cn(姓名)

(dn格式就是這麼一大串)

最常見的CN是/etc/group轉來的條目

基於uid(User ID)

uid=fsmith,ou=employees,dc=foobar,dc=com

最常見的UID是/etc/passwd和/etc/shadow轉來的條目

 


[root@vmmac migration]# ldapsearch -x -LLL "uid=mac*"
dn: uid=mac,ou=People,dc=otas,dc=cn         唯一標適
 uid: mac               
 cn: mac                                  CN=Common Name 為用户名或服務器名
 objectClass: account
 objectClass: posixAccount
 objectClass: top
 objectClass: shadowAccount
 userPassword:: e2NyeXB0fSQxJGRTMFJoR1lwJHk0dkdKc1ByM3BlVmo4Z243dEhoQTA=
 shadowLastChange: 13697
 shadowMax: 99999
 shadowWarning: 7
 loginShell: /bin/bash
 uidNumber: 500
 gidNumber: 500
 homeDirectory: /home/mac

 dn: uid=macg,ou=People,dc=otas,dc=cn
 uid: macg
 cn: macg
 objectClass: account
 objectClass: posixAccount
 objectClass: top
 objectClass: shadowAccount
 userPassword:: e2NyeXB0fSQxJGxHdE9tTW9vJHR0TFhpYXc2Y1VJb0RyWU9xUlVDSzE=
 shadowLastChange: 14186
 shadowMax: 99999
 shadowWarning: 7
 loginShell: /bin/bash
 uidNumber: 503
 gidNumber: 503
 homeDirectory: /home/macg

 


 


 

   

Base DN (就是dc=,dc= )


LDAP目錄樹的最頂部就是根,也就是所謂的“Base DN"。


BaseDN通常採用兩種格式:


 

(假定我在名為FooBar 的電子商務公司工作,這家公司在Internet上的名字是foobar.com)


商務型格式——以X.500格式表示的基準DN

 

Internet型格式——以公司的Internet 域名地址表示的基準DN)

是最常用的格式

 dc=foobar, dc=com 


 



 

     

LDIF 格式(此格式用於LDAP數據導入、導出)


LDIF是LDAP數據庫信息的一種

文本格式

,包含:

[root@vmmac migration]# cat passwd.ldif
 dn: uid=mac,ou=People,dc=otas,dc=cn
 uid: mac
 cn: mac
 objectClass: account
 objectClass: posixAccount
 objectClass: top
 objectClass: shadowAccount
 userPassword: {crypt}$1$dS0RhGYp$y4vGJsPr3peVj8gn7tHhA0
 gidNumber: 500
 homeDirectory: /home/mac



 

     

一個典型的 entry例子(一個屬性可以有多個值)


Foobar, Inc.的員工Fran Smith的LDAP記錄。


完整DN,包括在目錄樹中的完整路徑

  objectclass: person 
  objectclass: organizationalPerson 
  objectclass: inetOrgPerson 
  objectclass: foobarPerson 
  uid: fsmith 
  givenname: Fran 
  sn: Smith 
  cn: Fran Smith 
  cn: Frances Smith 
 CN有多個值
 你可能只知道她的名字叫Fran,但是對人力資源處的人來説她的正式名字叫做Frances。因為保存了她的兩個名字

  telephonenumber: 510-555-1234 
  roomnumber: 122G 
  o: Foobar, Inc. 
  mailRoutingAddress: fsmith@foobar.com 
  mailhost: mail.foobar.com 
  userpassword: {crypt}3x1231v76T89N 
  uidnumber: 1234 
  gidnumber: 1200 
  homedirectory: /home/fsmith 
  loginshell: /usr/local/bin/bash




 

     

屬性/值搜索的時候是不區分大小寫的


 

某些特殊的屬性(例如,password)在搜索的時候需要區分大小寫。 




 

     /

etc/passwd和/etc/group文件裏的用户被migrate導入ldap後,會產生兩條條目,分別屬於People這個ou,和Group這個ou


顯然屬於People ou的條目對應passwd,屬於Group ou的條目對應group


dn: cn=test1,ou=Group,dc=otas,dc=cn
 objectClass: posixGroup
 objectClass: top
 cn: test1
 userPassword:: e2NyeXB0fXg=
 gidNumber: 500
dn: uid=test1,ou=People,dc=otas,dc=cn
 uid: test1
 cn: test1
 objectClass: account
 objectClass: posixAccount
 objectClass: top
 objectClass: shadowAccount
 userPassword:: e2NyeXB0fSQxJHpGR3drdUdlJFIyZ3BZTlh3QzVPaXFOck1CTGU2QjE=
 shadowLastChange: 14298
 shadowMax: 99999
 shadowWarning: 7
 loginShell: /bin/bash
 uidNumber: 500
 gidNumber: 500
 homeDirectory: /home/test1
     /etc/passwd
 /etc/shaddow



 


  •    從屬ou不同

user屬於ou=People


group屬於ou=Group


  •    dn表示方式不同

user的dn用uid打頭:uid=news,ou=People,dc=otas,dc=cn


group的dn用cn打頭:cn=news,ou=Group,dc=otas,dc=cn