LDAP協議基礎概念
?
1. 從用途上闡述LDAP,它是一個存儲靜態相關信息的服務,適合“一次記錄多次讀取”。經常使用LDAP服務存儲的信息:?
2. 從數據結構上闡述LDAP,它是一個樹型結構,能有效明白的描寫敘述一個組織結構特性的相關信息。在這個樹型結構上的每一個節點,我們稱之為“條目(Entry)”,每一個條目有自己的唯一可差別的名稱(Distinguished Name ,DN)。條目的DN是由條目所在樹型結構中的父節點位置(Base DN)和該條目的某個可用來差別身份的屬性(稱之為RDN如uid , cn)組合而成。對Full DN :“shineuserid=linly , ou=Employee , dc=jsoso , dc=net”而言,當中Base DN:“ou=Employee , dc=jsoso , dc=net”,RDN:“shineuserid=linly”以下是一個LDAPserver的數據結構圖:?
?
3. 從協議衍化上闡述LDAP,它是“文件夾訪問協議DAP——ISO X.500”的衍生,簡化了DAP協議,提供了輕量級的基于TCP/IP協議的網絡訪問,減少了管理維護成本,但保持了強壯且易于擴充的信息框架。LDAP的應用程序能夠非常輕松的新增、改動、查詢和刪除文件夾內容信息。?
LDAP文件夾條目(Directory Entry)簡述 ?
從Object Classes談起 ?
在LDAP文件夾數據庫中,全部的條目都必須定義objectClass這個屬性。這有點像Java語言里說闡述的“一切皆對象”的理念,每一個條目(LDAP Entry)都要定義自己的Object Classes。Object Class能夠看作是LDAP Entry的模板,它定義了條目的屬性集,包含必有屬性(requited attribute)和可選屬性(option attribute)。這里要著重指出的是,在LDAP的Entry中是不能像關系數據庫的表那樣隨意加入屬性字段的,一個Entry的屬性是由它所繼承的全部Object Classes的屬性集合決定的,此外能夠包含LDAP中規定的“操作屬性”(操作屬性是一種獨立于Object Class而存在的屬性,它能夠賦給文件夾中的隨意條目)。假設你想加入的屬性不在Object Classes定義屬性的范疇,也不是LDAP規定的操作屬性,那么是不能直接綁定(在LDAP中,給Entry賦予屬性的過程稱為綁定)到條目上的,你必須自己定義一個含有你須要的屬性的Object Class,而后將此類型賦給條目。?
Object Class是能夠被繼承的,這使它看上去真的非常像Java語言中的POJO對象。繼承類的對象實例也必須實現父?
類規定的必有屬性(requited attribute),同一時候擁有父類規定的可選屬性(option attribute)。繼承類能夠擴展父類的必有屬性和可選屬性。因為Object Class的繼承特性,因此在一個LDAP Entry上,objectClass屬性是一個多值屬性,它涵蓋了Object Class的完整繼承樹,如用戶條目uid=Linly , ou=People, dc=jsoso , dc=net,它直接實現了inetorgperson這個對象類,那么它的objectClass屬性值為inetorgperson,organizationalPerson,person,top。?
從Object Classes到Directory Server Schema ?
上一章節中,我們了解了LDAP條目都要遵守的一個最重要的規定Object Classes,而實際上,對Entry很多其它更細的規范被涵蓋在了Directory Server Schema(文件夾服務模式)中。Directory Schema聲明了完整的LDAP數據的存儲規范,這包含數據的字節大小、數值范圍和格式定義。?
默認的,在一個LDAPserver上,都定義有一套標準的Schema和一套為server功能定制的Schema。用戶在須要的時候,是能夠定制自己的LDAP屬性和Object Class,以擴展標準Schema的功能。在Sun Directory Server中,使用了標準LDAPv3 Schema,并在此基礎上做了輕微的擴展。?
在Schema中的標準屬性(Standard Attributes)是一個鍵-值對,如:cn:linly ,屬性ID(屬性名)為cn,屬性值為linly 。其實,一個完整的條目就是由一系列的鍵-值對組成的。下面是一個完整的LDAP Entry:?
在Schema中,對屬性的定義包括下面內容:?
此外Schema中最重要的部分就是我們上面提到的Object Classes,它實際上是提前定義的一套捆綁成套的屬性集合。在Schema定義中,Object Classes要包括下面內容:?
高級LDAP條目 ?
在文件夾服務中,信息是以條目的形式被分層次的組織在一起的。LDAP提供了幾種分組機制,使得信息管理更富有彈性。?
靜態組和動態組(Static Group and Dynamic Group) ?
組(Group) ,聲明一個文件夾條目的集合?
靜態組(Static Group): 顯式聲明了一個它的集合成員,這樣的方式適用于少量明白的成員組合。?
動態組(Dynamic Group) :它定義了一個過濾條件,全部匹配條件的條目都是組的成員。所以稱之為動態組,是由于每次讀取其組員名單時,要動態計算過濾條件。?
使用組的長處是可以高速的查找所屬的成員;缺點是,給出隨意的成員,無法獲知它所屬的組。因此從數據關聯關系上看,Group適合一對多的查詢。?
受管角色、過濾器角色和嵌套角色(Managed Role、Filtered Role and Nested Role) ?
角色(Role) ,它是條目的還有一種集合形式。它與組不同的在于,給定一個隨意的成員條目,我們能立馬獲知它所屬的角色。因此從數據關聯關系上看,Role適合多對一的查詢。角色定義僅對它們的父節點子樹以下的文件夾條目有效。?
受管角色(Managed Role) ,它等價于Group中的靜態組,不同的是,Role不是把組員信息加入到自身屬性中,而是將自身的DN加入到組員條目的nsroledn屬性中。?
過濾器角色(Filtered Role) ,它與動態組相似,通過定義條目過濾器來確定組員。?
嵌套角色(Nested Role) ,它是對角色定義的一種嵌套形式。能夠嵌套其他的嵌套角色的。嵌套角色的成員,是其包括的全部角色成員的合集。嵌套角色通過包括從屬于其他子樹下的角色,能夠擴展其搜索的scope。?
服務類CoS ?
服務類實際上是一種屬性的共享機制,它無須定義條目間的關聯關系,卻能夠做到數據同步和空間優化。比如,在一個公司文件夾下,擁有上千個員工,他們擁有同樣的公司地址屬性;在傳統的條目中,地址屬性分別存貯在員工條目里,這樣不但浪費存儲空間,一旦地址變更,則要對員工條目進行逐一改動。採用CoS機制后,公司地址屬性被存放在一個對象內,員工條目通過引用這個對象來獲得地址信息,從而縮小的存儲空間損耗,并方便了信息的改動。?
CoS僅對其父節點子樹以下的文件夾條目有效。CoS機制包括兩個部分,CoS 定義條目和CoS模板條目。定義條目描寫敘述了屬性是怎樣被引用的;模板條目描寫敘述了屬性的值。CoS機制包括3種類型:?
指針服務類(Pointer CoS), ?
在Pointer CoS中,CoS包括一個定義Definition Entry,它指定了兩個屬性:1.共享屬性的名稱;2.提供共享數據的模板DN。 另外CoS還要有一個Template Entry,它要提供共享的數據。?
在定義了Definition Entry和Template Entry后,Pointer CoS將為其父節點子樹以下的全部條目(目標條目Target Entry)分配共享屬性和模板所定義的值。示意圖例如以下:?
?
? Definition Entry:cn=PointerCoS , dc=example , dc= com定義了CoS的共享屬性cosAttribute:postalCode,同一時候定義了CoS的模板DN cosTemplateDN:cn=cosTemplateForPostalCode,cn=data。?
? Template Entry: 它是CoS的模板,定義了共享屬性值 postalCode:45773。?
? Target Entry:它是目標條目,由于它位于dc=example , dc=com的子樹下。所以它獲得了共享屬性postalCode:45773。?
間接服務類(Indirect CoS) ,?
在使用間接服務類時,在Definition Entry條目中定義了CoS的共享屬性cosAttribut和一個用來間接指向模板的屬性cosIndirectSpecifier。?
首先,我們須要用cosIndirectSpecifier的值A作為屬性名,來檢索CoS父節點子樹中全部擁有A屬性的條目,作為目標條目Target Entry。?
其次,依據找到的Target Entry條目中A屬性的值來定位模板對象。?
最后,再分別依據找到的模板對象中擁有的共享屬性值賦給相應的Target Entry。?
比如,定義例如以下Definition Entry
該CoS定義對條目ou=People,dc=example,dc=com下的子樹中全部具有manager屬性的 條目有效,同一時候設定其CoS模板指向manager屬性的值所指向的條目。?
又假定有例如以下的Template Entry條目,它具有屬性departmentNumber:?
同一時候在ou=People,dc=example,dc=com下有Target Entry例如以下:?
由于該Entry具有manager屬性,且在ou=People,dc=example,dc=com子樹下,所以它成為了Target Entity。而且由于其manager的值指向模板cn=Carla Fuentes,ou=People,dc=example,dc=com,因此,它的departmentNumber為 318842。?
經典服務類(Classic CoS) ?
經典服務類同間接服務類有點相似,它也是對屬性的間接應用。在Classic CoS的定義條目中,除了共享屬性定義外,還有兩個定義,一個是cosTemplateDn,它指向模板條目的父節點;還有一個是cosSpecifier,它的值指向目標條目的屬性A。由目標條目的屬性A的值來取代模板條目的RND。則目標條目的屬性A的值加上cosTemplateDn的值恰好定義一個唯一的模板條目。?
舉比例如以下,首先是一個經典服務類的定義條目:?
該定義條目指明了3個參數,?
1. 要共享的屬性是postalAddress?
2. 模板條目的上下文前綴是ou=People,dc=example,dc=com?
3. 模板條目的RDN存儲于目標條目的building屬性中?
其次,假定有例如以下模板條目:?
最后,我們如果有下面目標條目:?
因為目標條目中,building屬性的值是B07,因此該條目的模板定義DN = B07加上ou=People,dc=example,dc=com ,即cn=B07,ou=People,dc=example,dc=com,因此目標條目的postalAddres 引用模板的值7 Old Oak Street$Anytown, CA 95054。
LDAP 文件夾搜索 ?
LDAP搜索是文件夾服務最經常使用的功能之中的一個。在LDAP服務中搜索要用到對應的Filter語句。Filter語句由3個部分組成:?
1. 屬性,如:cn ,uid ,操作屬性如:objectClass? ,? nsroledn?
2. 比較操作符 ,如 < , > ,= ,…?
3. 邏輯預算符,如: 與操作&? , 或操作| , 非操作!?
關于Filter語句組成的具體參數表例如以下:?
filter的運算符 ?
?
filter布爾運算符 ?
?
搜索過濾器演示樣例?
ldapsearch指令參數 -b 搜索的起始上下文?
搜索“操作屬性” ?
在LDAP搜索中,操作屬性在默認情況下是不會尾隨搜索結果返回的。必須在搜索中明白顯示的指定操作屬性,如:?
搜索“操作對象類”的條目 ?
在LDAP中Role、CoS等對象被定義為特殊的Object Class——操作對象類(operational object class),在一般的搜索中,這類對象是不會作為結果返回給用戶的。要想查找這些對象,必須在filter中顯式定義要找這個對象類。比如:(objectclass=ldapsubentry)。?
ACI權限控制 ?
ACI(Access Control Instruction)訪問控制指令是LDAP 服務中用以控制用戶訪問權限的有力手段。在文件夾的Entry中,aci屬性記錄了對該條目的多條訪問控制指令。(aci屬性是一個多值操作屬性,能夠賦予隨意的LDAP條目)?
ACI的語法格式例如以下 :aci: (target)(version 3.0;acl "name";permission bind_rules;)?
? target? 指定了ACI要控制訪問的目標屬性(集合)或條目(集合)。target能夠用DN,一個或多個屬性,或者一個filter來定義。它是一個可選項。?
target語法是: keyword <op> 表達式?
targetkeyword表 ?
?
(很多其它具體的target使用方法,請參閱 Sun ONE Directory Server 5.2 Administration Guide )?
version 3.0? 這是一個必須的常量字竄,用以識別ACI的版本號。?
name? 指定ACI的名稱,能夠使隨意的字竄,僅僅要差別于同一個條目aci屬性下的其它ACI,這是一個必須屬性。?
permission? 指定權限許可。?
權限包含 :read、write、add、delete、search、compare、selfwrite、 proxy 或 all,當中all表示出了proxy之外的全部操作。?
權限語法 :allow | deny (權限)?
bind_rules? 綁定規則。綁定規則定義了何人、何時,以及從何處能夠訪問文件夾。綁定規則能夠是例如以下規則之中的一個:?
綁定規則語法 :keyword? = 或者 != "expression"; (注:timeofday keyword也支持不等式<、<=、>、>=)。?
LDIF 綁定規則keyword表 ?
?
(很多其它具體的綁定規則使用方法,請參閱 Sun ONE Directory Server 5.2 Administration Guide )?
ACI例子 ?
1. 從用途上闡述LDAP,它是一個存儲靜態相關信息的服務,適合“一次記錄多次讀取”。經常使用LDAP服務存儲的信息:?
- 公司的物理設備信息(如打印機,它的IP地址、存放位置、廠商、購買時間等)
- ? 公開的員工信息(地址、電話、電子郵件…)
- ? 合同和賬號信息(客戶信息、產品交付日期、投標信息、項目信息…)
- ? 憑證信息(認證憑證、許可證憑證…)
2. 從數據結構上闡述LDAP,它是一個樹型結構,能有效明白的描寫敘述一個組織結構特性的相關信息。在這個樹型結構上的每一個節點,我們稱之為“條目(Entry)”,每一個條目有自己的唯一可差別的名稱(Distinguished Name ,DN)。條目的DN是由條目所在樹型結構中的父節點位置(Base DN)和該條目的某個可用來差別身份的屬性(稱之為RDN如uid , cn)組合而成。對Full DN :“shineuserid=linly , ou=Employee , dc=jsoso , dc=net”而言,當中Base DN:“ou=Employee , dc=jsoso , dc=net”,RDN:“shineuserid=linly”以下是一個LDAPserver的數據結構圖:?

3. 從協議衍化上闡述LDAP,它是“文件夾訪問協議DAP——ISO X.500”的衍生,簡化了DAP協議,提供了輕量級的基于TCP/IP協議的網絡訪問,減少了管理維護成本,但保持了強壯且易于擴充的信息框架。LDAP的應用程序能夠非常輕松的新增、改動、查詢和刪除文件夾內容信息。?
LDAP文件夾條目(Directory Entry)簡述 ?
從Object Classes談起 ?
在LDAP文件夾數據庫中,全部的條目都必須定義objectClass這個屬性。這有點像Java語言里說闡述的“一切皆對象”的理念,每一個條目(LDAP Entry)都要定義自己的Object Classes。Object Class能夠看作是LDAP Entry的模板,它定義了條目的屬性集,包含必有屬性(requited attribute)和可選屬性(option attribute)。這里要著重指出的是,在LDAP的Entry中是不能像關系數據庫的表那樣隨意加入屬性字段的,一個Entry的屬性是由它所繼承的全部Object Classes的屬性集合決定的,此外能夠包含LDAP中規定的“操作屬性”(操作屬性是一種獨立于Object Class而存在的屬性,它能夠賦給文件夾中的隨意條目)。假設你想加入的屬性不在Object Classes定義屬性的范疇,也不是LDAP規定的操作屬性,那么是不能直接綁定(在LDAP中,給Entry賦予屬性的過程稱為綁定)到條目上的,你必須自己定義一個含有你須要的屬性的Object Class,而后將此類型賦給條目。?
Object Class是能夠被繼承的,這使它看上去真的非常像Java語言中的POJO對象。繼承類的對象實例也必須實現父?
類規定的必有屬性(requited attribute),同一時候擁有父類規定的可選屬性(option attribute)。繼承類能夠擴展父類的必有屬性和可選屬性。因為Object Class的繼承特性,因此在一個LDAP Entry上,objectClass屬性是一個多值屬性,它涵蓋了Object Class的完整繼承樹,如用戶條目uid=Linly , ou=People, dc=jsoso , dc=net,它直接實現了inetorgperson這個對象類,那么它的objectClass屬性值為inetorgperson,organizationalPerson,person,top。?
從Object Classes到Directory Server Schema ?
上一章節中,我們了解了LDAP條目都要遵守的一個最重要的規定Object Classes,而實際上,對Entry很多其它更細的規范被涵蓋在了Directory Server Schema(文件夾服務模式)中。Directory Schema聲明了完整的LDAP數據的存儲規范,這包含數據的字節大小、數值范圍和格式定義。?
默認的,在一個LDAPserver上,都定義有一套標準的Schema和一套為server功能定制的Schema。用戶在須要的時候,是能夠定制自己的LDAP屬性和Object Class,以擴展標準Schema的功能。在Sun Directory Server中,使用了標準LDAPv3 Schema,并在此基礎上做了輕微的擴展。?
在Schema中的標準屬性(Standard Attributes)是一個鍵-值對,如:cn:linly ,屬性ID(屬性名)為cn,屬性值為linly 。其實,一個完整的條目就是由一系列的鍵-值對組成的。下面是一個完整的LDAP Entry:?
引用
dn: uid=Linly,ou=People, dc=jsoso,dc=net?
telephoneNumber: 13950491407?
mail: linliangyi2005@gmail.com?
objectClass: top?
objectClass: person?
objectClass: organizationalPerson?
objectClass: inetorgperson?
cn: LinLiangyi?
userPassword: {SSHA}aPTgP47LeziVGqjPBI8343FwkcL3QgQQ9kirXw==?
creatorsName: uid=admin,ou=administrators,ou=topologymanagement,o=netscaperoot?
createTimestamp: 20080219070003Z?
nsUniqueId: 2deb0d01-deb811dc-8055dc88-5f880db9?
nsRoleDN: cn=MyAdminRole,ou=People,dc=jsoso,dc=net?
nsRoleDN: cn=secondRole,ou=People,dc=jsoso,dc=net?
cn;phonetic;lang-zh:: IA==?
preferredLanguage: zh-CN?
cn;lang-zh:: 5p6X6Imv55uKICA=?
givenName: liangyi?
givenName;lang-zh:: 6Imv55uK?
sn: lin?
sn;lang-zh:: 5p6X?
uid: linly?
manager: cosTemplateForPostalCode?
modifiersName: uid=admin,ou=administrators,ou=topologymanagement,o=netscaperoot?
modifyTimestamp: 20080227083015Z
telephoneNumber: 13950491407?
mail: linliangyi2005@gmail.com?
objectClass: top?
objectClass: person?
objectClass: organizationalPerson?
objectClass: inetorgperson?
cn: LinLiangyi?
userPassword: {SSHA}aPTgP47LeziVGqjPBI8343FwkcL3QgQQ9kirXw==?
creatorsName: uid=admin,ou=administrators,ou=topologymanagement,o=netscaperoot?
createTimestamp: 20080219070003Z?
nsUniqueId: 2deb0d01-deb811dc-8055dc88-5f880db9?
nsRoleDN: cn=MyAdminRole,ou=People,dc=jsoso,dc=net?
nsRoleDN: cn=secondRole,ou=People,dc=jsoso,dc=net?
cn;phonetic;lang-zh:: IA==?
preferredLanguage: zh-CN?
cn;lang-zh:: 5p6X6Imv55uKICA=?
givenName: liangyi?
givenName;lang-zh:: 6Imv55uK?
sn: lin?
sn;lang-zh:: 5p6X?
uid: linly?
manager: cosTemplateForPostalCode?
modifiersName: uid=admin,ou=administrators,ou=topologymanagement,o=netscaperoot?
modifyTimestamp: 20080227083015Z
在Schema中,對屬性的定義包括下面內容:?
- ? 一個唯一的屬性名稱
- ? 一個屬性的OID(object? identifier)
- ? 一段屬性的文本描寫敘述信息
- ? 一個關聯屬性文法定義的OID
- ? 屬性的單值/多值描寫敘述;屬性是否是文件夾自有的;屬性的由來;附加的一些匹配規則
此外Schema中最重要的部分就是我們上面提到的Object Classes,它實際上是提前定義的一套捆綁成套的屬性集合。在Schema定義中,Object Classes要包括下面內容:?
- ? 一個唯一的名字
- ? 一個object identifier (OID) 定義Object Class
- ? 一個必有的屬性集合
- ? 一個可選的屬性集合
高級LDAP條目 ?
在文件夾服務中,信息是以條目的形式被分層次的組織在一起的。LDAP提供了幾種分組機制,使得信息管理更富有彈性。?
靜態組和動態組(Static Group and Dynamic Group) ?
組(Group) ,聲明一個文件夾條目的集合?
靜態組(Static Group): 顯式聲明了一個它的集合成員,這樣的方式適用于少量明白的成員組合。?
動態組(Dynamic Group) :它定義了一個過濾條件,全部匹配條件的條目都是組的成員。所以稱之為動態組,是由于每次讀取其組員名單時,要動態計算過濾條件。?
使用組的長處是可以高速的查找所屬的成員;缺點是,給出隨意的成員,無法獲知它所屬的組。因此從數據關聯關系上看,Group適合一對多的查詢。?
受管角色、過濾器角色和嵌套角色(Managed Role、Filtered Role and Nested Role) ?
角色(Role) ,它是條目的還有一種集合形式。它與組不同的在于,給定一個隨意的成員條目,我們能立馬獲知它所屬的角色。因此從數據關聯關系上看,Role適合多對一的查詢。角色定義僅對它們的父節點子樹以下的文件夾條目有效。?
受管角色(Managed Role) ,它等價于Group中的靜態組,不同的是,Role不是把組員信息加入到自身屬性中,而是將自身的DN加入到組員條目的nsroledn屬性中。?
過濾器角色(Filtered Role) ,它與動態組相似,通過定義條目過濾器來確定組員。?
嵌套角色(Nested Role) ,它是對角色定義的一種嵌套形式。能夠嵌套其他的嵌套角色的。嵌套角色的成員,是其包括的全部角色成員的合集。嵌套角色通過包括從屬于其他子樹下的角色,能夠擴展其搜索的scope。?
服務類CoS ?
服務類實際上是一種屬性的共享機制,它無須定義條目間的關聯關系,卻能夠做到數據同步和空間優化。比如,在一個公司文件夾下,擁有上千個員工,他們擁有同樣的公司地址屬性;在傳統的條目中,地址屬性分別存貯在員工條目里,這樣不但浪費存儲空間,一旦地址變更,則要對員工條目進行逐一改動。採用CoS機制后,公司地址屬性被存放在一個對象內,員工條目通過引用這個對象來獲得地址信息,從而縮小的存儲空間損耗,并方便了信息的改動。?
CoS僅對其父節點子樹以下的文件夾條目有效。CoS機制包括兩個部分,CoS 定義條目和CoS模板條目。定義條目描寫敘述了屬性是怎樣被引用的;模板條目描寫敘述了屬性的值。CoS機制包括3種類型:?
指針服務類(Pointer CoS), ?
在Pointer CoS中,CoS包括一個定義Definition Entry,它指定了兩個屬性:1.共享屬性的名稱;2.提供共享數據的模板DN。 另外CoS還要有一個Template Entry,它要提供共享的數據。?
在定義了Definition Entry和Template Entry后,Pointer CoS將為其父節點子樹以下的全部條目(目標條目Target Entry)分配共享屬性和模板所定義的值。示意圖例如以下:?

? Definition Entry:cn=PointerCoS , dc=example , dc= com定義了CoS的共享屬性cosAttribute:postalCode,同一時候定義了CoS的模板DN cosTemplateDN:cn=cosTemplateForPostalCode,cn=data。?
? Template Entry: 它是CoS的模板,定義了共享屬性值 postalCode:45773。?
? Target Entry:它是目標條目,由于它位于dc=example , dc=com的子樹下。所以它獲得了共享屬性postalCode:45773。?
間接服務類(Indirect CoS) ,?
在使用間接服務類時,在Definition Entry條目中定義了CoS的共享屬性cosAttribut和一個用來間接指向模板的屬性cosIndirectSpecifier。?
首先,我們須要用cosIndirectSpecifier的值A作為屬性名,來檢索CoS父節點子樹中全部擁有A屬性的條目,作為目標條目Target Entry。?
其次,依據找到的Target Entry條目中A屬性的值來定位模板對象。?
最后,再分別依據找到的模板對象中擁有的共享屬性值賦給相應的Target Entry。?
比如,定義例如以下Definition Entry
引用
dn: cn=generateDeptNum,ou=People,dc=example,dc=com?
objectclass: top?
objectclass: LDAPsubentry?
objectclass: cosSuperDefinition?
objectclass: cosIndirectDefinition?
cosIndirectSpecifier: manager?
cosAttribute: departmentNumber
objectclass: top?
objectclass: LDAPsubentry?
objectclass: cosSuperDefinition?
objectclass: cosIndirectDefinition?
cosIndirectSpecifier: manager?
cosAttribute: departmentNumber
該CoS定義對條目ou=People,dc=example,dc=com下的子樹中全部具有manager屬性的 條目有效,同一時候設定其CoS模板指向manager屬性的值所指向的條目。?
又假定有例如以下的Template Entry條目,它具有屬性departmentNumber:?
引用
dn: cn=Carla Fuentes,ou=People,dc=example,dc=com?
…?
objectclass: cosTemplate?
…?
departmentNumber: 318842
…?
objectclass: cosTemplate?
…?
departmentNumber: 318842
同一時候在ou=People,dc=example,dc=com下有Target Entry例如以下:?
引用
dn: cn=Babs Jensen,ou=People,dc=example,dc=com?
cn: Babs Jensen?
...?
manager: cn=Carla Fuentes,ou=People,dc=example,dc=com?
departmentNumber: 318842
cn: Babs Jensen?
...?
manager: cn=Carla Fuentes,ou=People,dc=example,dc=com?
departmentNumber: 318842
由于該Entry具有manager屬性,且在ou=People,dc=example,dc=com子樹下,所以它成為了Target Entity。而且由于其manager的值指向模板cn=Carla Fuentes,ou=People,dc=example,dc=com,因此,它的departmentNumber為 318842。?
經典服務類(Classic CoS) ?
經典服務類同間接服務類有點相似,它也是對屬性的間接應用。在Classic CoS的定義條目中,除了共享屬性定義外,還有兩個定義,一個是cosTemplateDn,它指向模板條目的父節點;還有一個是cosSpecifier,它的值指向目標條目的屬性A。由目標條目的屬性A的值來取代模板條目的RND。則目標條目的屬性A的值加上cosTemplateDn的值恰好定義一個唯一的模板條目。?
舉比例如以下,首先是一個經典服務類的定義條目:?
引用
dn: cn=classicCoS,dc=example,dc=com?
objectclass: top?
objectclass: LDAPsubentry?
objectclass: cosSuperDefinition?
objectclass: cosClassicDefinition?
cosTemplateDn: ou=People,dc=example,dc=com?
cosSpecifier: building?
cosAttribute: postalAddress
objectclass: top?
objectclass: LDAPsubentry?
objectclass: cosSuperDefinition?
objectclass: cosClassicDefinition?
cosTemplateDn: ou=People,dc=example,dc=com?
cosSpecifier: building?
cosAttribute: postalAddress
該定義條目指明了3個參數,?
1. 要共享的屬性是postalAddress?
2. 模板條目的上下文前綴是ou=People,dc=example,dc=com?
3. 模板條目的RDN存儲于目標條目的building屬性中?
其次,假定有例如以下模板條目:?
引用
dn: cn=B07,ou=People,dc=example,dc=com?
objectclass: top?
objectclass: LDAPsubentry?
objectclass: extensibleobject?
objectclass: cosTemplate?
postalAddres: 7 Old Oak Street$Anytown, CA 95054
objectclass: top?
objectclass: LDAPsubentry?
objectclass: extensibleobject?
objectclass: cosTemplate?
postalAddres: 7 Old Oak Street$Anytown, CA 95054
最后,我們如果有下面目標條目:?
引用
dn: cn=Babs Jensen,ou=People,dc=example,dc=com?
cn: Babs Jensen?
...?
building: B07?
postalAddres: 7 Old Oak Street$Anytown, CA 95054
cn: Babs Jensen?
...?
building: B07?
postalAddres: 7 Old Oak Street$Anytown, CA 95054
因為目標條目中,building屬性的值是B07,因此該條目的模板定義DN = B07加上ou=People,dc=example,dc=com ,即cn=B07,ou=People,dc=example,dc=com,因此目標條目的postalAddres 引用模板的值7 Old Oak Street$Anytown, CA 95054。
LDAP 文件夾搜索 ?
LDAP搜索是文件夾服務最經常使用的功能之中的一個。在LDAP服務中搜索要用到對應的Filter語句。Filter語句由3個部分組成:?
1. 屬性,如:cn ,uid ,操作屬性如:objectClass? ,? nsroledn?
2. 比較操作符 ,如 < , > ,= ,…?
3. 邏輯預算符,如: 與操作&? , 或操作| , 非操作!?
關于Filter語句組成的具體參數表例如以下:?
filter的運算符 ?

filter布爾運算符 ?

搜索過濾器演示樣例?
- 下列過濾器將搜索包括一個或多個 manager 屬性值的條目。這也稱為存在搜索:manager=*
- 下列過濾器將搜索包括通用名 Ray Kultgen 的條目。這也稱為等價搜索:cn=Ray Kultgen
- 下列過濾器返回全部不包括通用名 Ray Kultgen 的條目:(!(cn=Ray Kultgen))
- 下列過濾器返回的全部條目中都有包括子字符串 X.500 的說明屬性:description=*X.500*
- 下列過濾器返回全部組織單元為 Marketing 且說明字段中不包括子字符串 X.500 的條目:(&(ou=Marketing)(!(description=*X.500*)))
- 下列過濾器返回全部組織單元為 Marketing 且 manager 為 Julie Fulmer 或 Cindy Zwaska 的條目:(&(ou=Marketing)(|(manager=cn=Julie Fulmer,ou=Marketing,dc=siroe,dc=com)(manager=cn=Cindy Zwaska,ou=Marketing,dc=siroe,dc=com)))
- 下列過濾器返回全部不代表人員的條目:(!(objectClass=person))
- 下列過濾器返回全部不代表人員且通用名近似于 printer3b 的條目:(&(!(objectClass=person))(cn~=printer3b))
ldapsearch指令參數 -b 搜索的起始上下文?
- -D 綁定搜索的賬號Distinguished Name
- -h 主機名。地址
- -p LDAP服務port
- -l 搜索的最大耗時
- -s 從上下文開始的搜索范圍,有三個常量base(表示僅當前根對象)/one(當前根對象及下一級)/sub(當前根對象的所有子樹)
- -W 綁定賬號password
- -z 返回結果的最大數量
搜索“操作屬性” ?
在LDAP搜索中,操作屬性在默認情況下是不會尾隨搜索結果返回的。必須在搜索中明白顯示的指定操作屬性,如:?
引用
ldapsearch -h linly.jsoso.net -p 5201 -D "cn=directory manager" -w password "objectclass=*" aci=accounts。
搜索“操作對象類”的條目 ?
在LDAP中Role、CoS等對象被定義為特殊的Object Class——操作對象類(operational object class),在一般的搜索中,這類對象是不會作為結果返回給用戶的。要想查找這些對象,必須在filter中顯式定義要找這個對象類。比如:(objectclass=ldapsubentry)。?
ACI權限控制 ?
ACI(Access Control Instruction)訪問控制指令是LDAP 服務中用以控制用戶訪問權限的有力手段。在文件夾的Entry中,aci屬性記錄了對該條目的多條訪問控制指令。(aci屬性是一個多值操作屬性,能夠賦予隨意的LDAP條目)?
ACI的語法格式例如以下 :aci: (target)(version 3.0;acl "name";permission bind_rules;)?
? target? 指定了ACI要控制訪問的目標屬性(集合)或條目(集合)。target能夠用DN,一個或多個屬性,或者一個filter來定義。它是一個可選項。?
target語法是: keyword <op> 表達式?
targetkeyword表 ?

(很多其它具體的target使用方法,請參閱 Sun ONE Directory Server 5.2 Administration Guide )?
version 3.0? 這是一個必須的常量字竄,用以識別ACI的版本號。?
name? 指定ACI的名稱,能夠使隨意的字竄,僅僅要差別于同一個條目aci屬性下的其它ACI,這是一個必須屬性。?
permission? 指定權限許可。?
權限包含 :read、write、add、delete、search、compare、selfwrite、 proxy 或 all,當中all表示出了proxy之外的全部操作。?
權限語法 :allow | deny (權限)?
bind_rules? 綁定規則。綁定規則定義了何人、何時,以及從何處能夠訪問文件夾。綁定規則能夠是例如以下規則之中的一個:?
- ? 被授予訪問權限的用戶、組以及角色
- ? 實體必須從中綁定的位置
- ? 綁定必須發生的時間或日期
- ? 綁定期間必須使用的驗證類型
綁定規則語法 :keyword? = 或者 != "expression"; (注:timeofday keyword也支持不等式<、<=、>、>=)。?
LDIF 綁定規則keyword表 ?

(很多其它具體的綁定規則使用方法,請參閱 Sun ONE Directory Server 5.2 Administration Guide )?
ACI例子 ?
- 1.用戶 bjensen 具有改動其自己的文件夾條目中全部屬性的權限。aci:(target="ldap:///uid=bjensen,dc=example,dc=com")(targetattr=*)(version 3.0; acl "aci1"; allow (write) userdn="ldap:///self";)
- 2.同意 Engineering Admins 組的成員改動 Engineering 業務類別中全部條目的 departmentNumber 和 manager 屬性aci:(targetattr="departmentNumber || manager")(targetfilter="(businessCategory=Engineering)") (version 3.0; acl "eng-admins-write"; allow (write) groupdn ="ldap:///cn=Engineering Admins, dc=example,dc=com";)
- 3.同意匿名用戶對o=NetscapeRoot下的條目讀取和搜索aci:(targetattr="*")(targetfilter=(o=NetscapeRoot))(version 3.0; acl "Default anonymous access"; allow (read, search) userdn="ldap:///anyone";)
- 4.向全部經過驗證的用戶授予對整個樹的讀取訪問,能夠在dc=example,dc=com 節點創建下列 ACI:aci:(version 3.0; acl "all-read"; allow (read)userdn="ldap:///all";)
- 5.同意對整個 example.com 樹進行匿名讀取和搜索訪問,能夠在dc=example,dc=com 節點創建下列 ACI:aci:(version 3.0; acl "anonymous-read-search";allow (read, search) userdn = "ldap:///anyone";)
-
授予Administrators 組對整個文件夾樹寫入的權限,則能夠在 dc=example,dc=com 節點創建下列 ACI:aci:(version 3.0; acl "Administrators-write"; allow (write) groupdn="ldap:///cn=Administrators,dc=example,dc=com";)?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
