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特點
  •     LDAP的結構用樹來表示,而不是用表格。正因為這樣,就不能用SQL語句了
  •     LDAP可以很快地得到查詢結果,不過在寫方面,就慢得多
  •     LDAP提供了靜態數據的快速查詢方式
  •     Client/server模型
       Server 用於存儲數據
       Client提供操作目錄信息樹的工具
             這些工具可以將數據庫的內容以文本格式(LDAP 數據交換格式,LDIF)呈現在您的面前
  •     LDAP是一種開放Internet標准,LDAP協議是跨平台的 的Interent協議
         它是基於X.500標准的, 與X.500不同, LDAP支持TCP/IP(即可以分布式部署)



        LDAP存儲這樣的信息最為有用: 也就是數據需要從不同的地點讀取,但是不需要經常更新:
  •       公司員工的電話號碼簿和組織結構圖  
  •       客戶的聯系信息  
  •       計算機管理需要的信息,包括NIS映射、email假名,等等  
  •       軟件包的配置信息  
  •       公用證書和安全密匙  

        Ldap的client /server結構
server 
 /usr/sbin/slapd -u ldap -h ldap:///
client
數據庫操作client    用於對ldap server庫進行操作
工具:ldapadd, ldapsearch
  實用client    用於將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"
SASL    Simple Authentication and Secure Layer
LDAP提供的在SSL和TLS安全通道基礎上進行的身份認證,包括數字證書的認證


    Ldap端口號(顯然提供分布式ldap)——389,636
[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目錄數據結構
  •     在LDAP中目錄是按照樹型結構組織——目錄信息樹(DIT)
                    DIT是一個主要進行讀操作的數據庫
  •     DIT由條目(Entry)組成,條目相當於關系數據庫中表的記錄;
條目是具有分辨名DN(Distinguished  Name)的屬性-值對(Attribute-value,簡稱AV)的集合


        在目錄樹中怎么組織數據  
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概念和原理


      什么是dn?
       DN,Distinguished Name分辨名
       在LDAP中,一個條目的分辨名叫做“DN”,DN是該條目在整個樹中的 唯一名稱標識
DN相當於關系數據庫表中的關鍵字(Primary   Key);
是一個識別屬性,通常用於檢索
       常見的兩種DN設置:
基於cn(姓名)
cn=Fran Smith,ou=employees,dc=foobar,dc=com 
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
o="FooBar, Inc.", c=US  
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: uid=fsmith, ou=employees, dc=foobar, dc=com 
完整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
    /etc/group
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


    user和group在ldap中的不同
  •     從屬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
 





免責聲明!

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



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