<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-84  評論-56  文章-0  trackbacks-0
    LDAP協(xié)議基礎(chǔ)概念

    1. 從用途上闡述LDAP,它是一個存儲靜態(tài)相關(guān)信息的服務(wù),適合“一次記錄多次讀取”。常用LDAP服務(wù)存儲的信息:
    • 公司的物理設(shè)備信息(如打印機(jī),它的IP地址、存放位置、廠商、購買時間等)
    • ? 公開的員工信息(地址、電話、電子郵件…)
    • ? 合同和賬號信息(客戶信息、產(chǎn)品交付日期、投標(biāo)信息、項(xiàng)目信息…)
    • ? 憑證信息(認(rèn)證憑證、許可證憑證…)

    2. 從數(shù)據(jù)結(jié)構(gòu)上闡述LDAP,它是一個樹型結(jié)構(gòu),能有效明確的描述一個組織結(jié)構(gòu)特性的相關(guān)信息。在這個樹型結(jié)構(gòu)上的每個節(jié)點(diǎn),我們稱之為“條目(Entry)”,每個條目有自己的唯一可區(qū)別的名稱(Distinguished Name ,DN)。條目的DN是由條目所在樹型結(jié)構(gòu)中的父節(jié)點(diǎn)位置(Base DN)和該條目的某個可用來區(qū)別身份的屬性(稱之為RDN如uid , cn)組合而成。對Full DN :“shineuserid=linly , ou=Employee , dc=jsoso , dc=net”而言,其中Base DN:“ou=Employee , dc=jsoso , dc=net”,RDN:“shineuserid=linly”下面是一個LDAP服務(wù)器的數(shù)據(jù)結(jié)構(gòu)圖:

    3. 從協(xié)議衍化上闡述LDAP,它是“目錄訪問協(xié)議DAP——ISO X.500”的衍生,簡化了DAP協(xié)議,提供了輕量級的基于TCP/IP協(xié)議的網(wǎng)絡(luò)訪問,降低了管理維護(hù)成本,但保持了強(qiáng)壯且易于擴(kuò)充的信息框架。LDAP的應(yīng)用程序可以很輕松的新增、修改、查詢和刪除目錄內(nèi)容信息。

    LDAP目錄條目(Directory Entry)簡述
    從Object Classes談起
    在LDAP目錄數(shù)據(jù)庫中,所有的條目都必須定義objectClass這個屬性。這有點(diǎn)像Java語言里說闡述的“一切皆對象”的理念,每個條目(LDAP Entry)都要定義自己的Object Classes。Object Class可以看作是LDAP Entry的模板,它定義了條目的屬性集,包括必有屬性(requited attribute)和可選屬性(option attribute)。這里要著重指出的是,在LDAP的Entry中是不能像關(guān)系數(shù)據(jù)庫的表那樣隨意添加屬性字段的,一個Entry的屬性是由它所繼承的所有Object Classes的屬性集合決定的,此外可以包括LDAP中規(guī)定的“操作屬性”(操作屬性是一種獨(dú)立于Object Class而存在的屬性,它可以賦給目錄中的任意條目)。如果你想添加的屬性不在Object Classes定義屬性的范疇,也不是LDAP規(guī)定的操作屬性,那么是不能直接綁定(在LDAP中,給Entry賦予屬性的過程稱為綁定)到條目上的,你必須自定義一個含有你需要的屬性的Object Class,而后將此類型賦給條目。
    Object Class是可以被繼承的,這使它看上去真的很像Java語言中的POJO對象。繼承類的對象實(shí)例也必須實(shí)現(xiàn)父
    類規(guī)定的必有屬性(requited attribute),同時擁有父類規(guī)定的可選屬性(option attribute)。繼承類可以擴(kuò)展父類的必有屬性和可選屬性。由于Object Class的繼承特性,因此在一個LDAP Entry上,objectClass屬性是一個多值屬性,它涵蓋了Object Class的完整繼承樹,如用戶條目uid=Linly , ou=People, dc=jsoso , dc=net,它直接實(shí)現(xiàn)了inetorgperson這個對象類,那么它的objectClass屬性值為inetorgperson,organizationalPerson,person,top。

    從Object Classes到Directory Server Schema
    上一章節(jié)中,我們了解了LDAP條目都要遵守的一個最重要的規(guī)定Object Classes,而實(shí)際上,對Entry更多更細(xì)的規(guī)范被涵蓋在了Directory Server Schema(目錄服務(wù)模式)中。Directory Schema聲明了完整的LDAP數(shù)據(jù)的存儲規(guī)范,這包括數(shù)據(jù)的字節(jié)大小、數(shù)值范圍和格式定義。
    默認(rèn)的,在一個LDAP服務(wù)器上,都定義有一套標(biāo)準(zhǔn)的Schema和一套為服務(wù)器功能定制的Schema。用戶在需要的時候,是可以定制自己的LDAP屬性和Object Class,以擴(kuò)展標(biāo)準(zhǔn)Schema的功能。在Sun Directory Server中,使用了標(biāo)準(zhǔn)LDAPv3 Schema,并在此基礎(chǔ)上做了輕微的擴(kuò)展。

    在Schema中的標(biāo)準(zhǔn)屬性(Standard Attributes)是一個鍵-值對,如:cn:linly ,屬性ID(屬性名)為cn,屬性值為linly 。事實(shí)上,一個完整的條目就是由一系列的鍵-值對組成的。以下是一個完整的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


    在Schema中,對屬性的定義包含以下內(nèi)容:
    • ? 一個唯一的屬性名稱
    • ? 一個屬性的OID(object  identifier)
    • ? 一段屬性的文本描述信息
    • ? 一個關(guān)聯(lián)屬性文法定義的OID
    • ? 屬性的單值/多值描述;屬性是否是目錄自有的;屬性的由來;附加的一些匹配規(guī)則


    此外Schema中最重要的部分就是我們上面提到的Object Classes,它實(shí)際上是預(yù)定義的一套捆綁成套的屬性集合。在Schema定義中,Object Classes要包含以下內(nèi)容:
    • ? 一個唯一的名字
    • ? 一個object identifier (OID) 定義Object Class
    • ? 一個必有的屬性集合
    • ? 一個可選的屬性集合


    高級LDAP條目
    在目錄服務(wù)中,信息是以條目的形式被分層次的組織在一起的。LDAP提供了幾種分組機(jī)制,使得信息管理更富有彈性。

    靜態(tài)組和動態(tài)組(Static Group and Dynamic Group)
    組(Group),聲明一個目錄條目的集合
    靜態(tài)組(Static Group):顯式聲明了一個它的集合成員,這種方式適用于少量明確的成員組合。
    動態(tài)組(Dynamic Group):它定義了一個過濾條件,所有匹配條件的條目都是組的成員。所以稱之為動態(tài)組,是因?yàn)槊看巫x取其組員名單時,要動態(tài)計算過濾條件。
    使用組的優(yōu)點(diǎn)是能夠快速的查找所屬的成員;缺點(diǎn)是,給出任意的成員,無法獲知它所屬的組。因此從數(shù)據(jù)關(guān)聯(lián)關(guān)系上看,Group適合一對多的查詢。

    受管角色、過濾器角色和嵌套角色(Managed Role、Filtered Role and Nested Role)
    角色(Role),它是條目的另一種集合形式。它與組不同的在于,給定一個任意的成員條目,我們能立刻獲知它所屬的角色。因此從數(shù)據(jù)關(guān)聯(lián)關(guān)系上看,Role適合多對一的查詢。角色定義僅對它們的父節(jié)點(diǎn)子樹下面的目錄條目有效。
    受管角色(Managed Role),它等價于Group中的靜態(tài)組,不同的是,Role不是把組員信息添加到自身屬性中,而是將自身的DN添加到組員條目的nsroledn屬性中。
    過濾器角色(Filtered Role),它與動態(tài)組相似,通過定義條目過濾器來確定組員。
    嵌套角色(Nested Role),它是對角色定義的一種嵌套形式。可以嵌套其他的嵌套角色的。嵌套角色的成員,是其包含的所有角色成員的合集。嵌套角色通過包含從屬于其它子樹下的角色,可以擴(kuò)展其搜索的scope。

    服務(wù)類CoS
    服務(wù)類實(shí)際上是一種屬性的共享機(jī)制,它無須定義條目間的關(guān)聯(lián)關(guān)系,卻可以做到數(shù)據(jù)同步和空間優(yōu)化。例如,在一個公司目錄下,擁有上千個員工,他們擁有相同的公司地址屬性;在傳統(tǒng)的條目中,地址屬性分別存貯在員工條目里,這樣不但浪費(fèi)存儲空間,一旦地址變更,則要對員工條目進(jìn)行逐一修改。采用CoS機(jī)制后,公司地址屬性被存放在一個對象內(nèi),員工條目通過引用這個對象來獲得地址信息,從而縮小的存儲空間損耗,并方便了信息的修改。
    CoS僅對其父節(jié)點(diǎn)子樹下面的目錄條目有效。CoS機(jī)制包含兩個部分,CoS 定義條目和CoS模板條目。定義條目描述了屬性是如何被引用的;模板條目描述了屬性的值。CoS機(jī)制包含3種類型:
    指針服務(wù)類(Pointer CoS),
    在Pointer CoS中,CoS包含一個定義Definition Entry,它指定了兩個屬性:1.共享屬性的名稱;2.提供共享數(shù)據(jù)的模板DN。 另外CoS還要有一個Template Entry,它要提供共享的數(shù)據(jù)。
    在定義了Definition Entry和Template Entry后,Pointer CoS將為其父節(jié)點(diǎn)子樹下面的所有條目(目標(biāo)條目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:它是目標(biāo)條目,因?yàn)樗挥赿c=example , dc=com的子樹下。所以它獲得了共享屬性postalCode:45773。

    間接服務(wù)類(Indirect CoS),
    在使用間接服務(wù)類時,在Definition Entry條目中定義了CoS的共享屬性cosAttribut和一個用來間接指向模板的屬性cosIndirectSpecifier。
    首先,我們需要用cosIndirectSpecifier的值A(chǔ)作為屬性名,來檢索CoS父節(jié)點(diǎn)子樹中所有擁有A屬性的條目,作為目標(biāo)條目Target Entry。
    其次,根據(jù)找到的Target Entry條目中A屬性的值來定位模板對象。
    最后,再分別根據(jù)找到的模板對象中擁有的共享屬性值賦給對應(yīng)的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

    該CoS定義對條目ou=People,dc=example,dc=com下的子樹中所有具有manager屬性的 條目有效,同時設(shè)定其CoS模板指向manager屬性的值所指向的條目。
    又假定有如下的Template Entry條目,它具有屬性departmentNumber:
    引用
    dn: cn=Carla Fuentes,ou=People,dc=example,dc=com

    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

    因?yàn)樵揈ntry具有manager屬性,且在ou=People,dc=example,dc=com子樹下,所以它成為了Target Entity。并且由于其manager的值指向模板cn=Carla Fuentes,ou=People,dc=example,dc=com,因此,它的departmentNumber為 318842。

    經(jīng)典服務(wù)類(Classic CoS)
    經(jīng)典服務(wù)類同間接服務(wù)類有點(diǎn)相似,它也是對屬性的間接應(yīng)用。在Classic CoS的定義條目中,除了共享屬性定義外,還有兩個定義,一個是cosTemplateDn,它指向模板條目的父節(jié)點(diǎn);另一個是cosSpecifier,它的值指向目標(biāo)條目的屬性A。由目標(biāo)條目的屬性A的值來代替模板條目的RND。則目標(biāo)條目的屬性A的值加上cosTemplateDn的值恰好定義一個唯一的模板條目。
    舉例如下,首先是一個經(jīng)典服務(wù)類的定義條目:
    引用
    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

    該定義條目指明了3個參數(shù),
    1. 要共享的屬性是postalAddress
    2. 模板條目的上下文前綴是ou=People,dc=example,dc=com
    3. 模板條目的RDN存儲于目標(biāo)條目的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

    最后,我們假設(shè)有以下目標(biāo)條目:
    引用
    dn: cn=Babs Jensen,ou=People,dc=example,dc=com
    cn: Babs Jensen
    ...
    building: B07
    postalAddres: 7 Old Oak Street$Anytown, CA 95054

    由于目標(biāo)條目中,building屬性的值是B07,因此該條目的模板定義DN = B07加上ou=People,dc=example,dc=com ,即cn=B07,ou=People,dc=example,dc=com,因此目標(biāo)條目的postalAddres 引用模板的值7 Old Oak Street$Anytown, CA 95054。

    LDAP 目錄搜索
    LDAP搜索是目錄服務(wù)最常用的功能之一。在LDAP服務(wù)中搜索要用到相應(yīng)的Filter語句。Filter語句由3個部分組成:
    1. 屬性,如:cn ,uid ,操作屬性如:objectClass  ,  nsroledn
    2. 比較操作符 ,如 < , > ,= ,…
    3. 邏輯預(yù)算符,如: 與操作&  , 或操作| , 非操作!
    關(guān)于Filter語句組成的詳細(xì)參數(shù)表如下:
    filter的運(yùn)算符

    filter布爾運(yùn)算符


    搜索過濾器示例
    • 下列過濾器將搜索包含一個或多個 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指令參數(shù)-b 搜索的起始上下文
    • -D 綁定搜索的賬號Distinguished Name
    • -h 主機(jī)名。地址
    • -p LDAP服務(wù)端口
    • -l 搜索的最大耗時
    • -s 從上下文開始的搜索范圍,有三個常量base(表示僅當(dāng)前根對象)/one(當(dāng)前根對象及下一級)/sub(當(dāng)前根對象的全部子樹)
    • -W 綁定賬號密碼
    • -z 返回結(jié)果的最大數(shù)量


    搜索“操作屬性”
    在LDAP搜索中,操作屬性在默認(rèn)情況下是不會跟隨搜索結(jié)果返回的。必須在搜索中明確顯示的指定操作屬性,如:
    引用
    ldapsearch -h linly.jsoso.net -p 5201 -D "cn=directory manager" -w password "objectclass=*" aci=accounts。


    搜索“操作對象類”的條目
    在LDAP中Role、CoS等對象被定義為特殊的Object Class——操作對象類(operational object class),在一般的搜索中,這類對象是不會作為結(jié)果返回給用戶的。要想查找這些對象,必須在filter中顯式定義要找這個對象類。例如:(objectclass=ldapsubentry)。

    ACI權(quán)限控制
    ACI(Access Control Instruction)訪問控制指令是LDAP 服務(wù)中用以控制用戶訪問權(quán)限的有力手段。在目錄的Entry中,aci屬性記錄了對該條目的多條訪問控制指令。(aci屬性是一個多值操作屬性,可以賦予任意的LDAP條目)
    ACI的語法格式如下:aci: (target)(version 3.0;acl "name";permission bind_rules;)
    ? target 指定了ACI要控制訪問的目標(biāo)屬性(集合)或條目(集合)。target可以用DN,一個或多個屬性,或者一個filter來定義。它是一個可選項(xiàng)。
    target語法是:關(guān)鍵字 <op> 表達(dá)式
    target關(guān)鍵字表

    (更多詳細(xì)的target用法,請參閱 Sun ONE Directory Server 5.2 Administration Guide )

    version 3.0 這是一個必須的常量字竄,用以識別ACI的版本。

    name 指定ACI的名稱,可以使任意的字竄,只要區(qū)別于同一個條目aci屬性下的其他ACI,這是一個必須屬性。

    permission 指定權(quán)限許可。
    權(quán)限包括:read、write、add、delete、search、compare、selfwrite、 proxy 或 all,其中all表示出了proxy之外的所有操作。
    權(quán)限語法:allow | deny (權(quán)限)

    bind_rules 綁定規(guī)則。綁定規(guī)則定義了何人、何時,以及從何處可以訪問目錄。綁定規(guī)則可以是如下規(guī)則之一:
    • • 被授予訪問權(quán)限的用戶、組以及角色
    • • 實(shí)體必須從中綁定的位置
    • • 綁定必須發(fā)生的時間或日期
    • • 綁定期間必須使用的驗(yàn)證類型

    綁定規(guī)則語法:keyword  = 或者 != "expression"; (注:timeofday 關(guān)鍵字也支持不等式<、<=、>、>=)。
    LDIF 綁定規(guī)則關(guān)鍵字表


    (更多詳細(xì)的綁定規(guī)則用法,請參閱 Sun ONE Directory Server 5.2 Administration Guide )

    ACI樣例
    • 1.用戶 bjensen 具有修改其自己的目錄條目中所有屬性的權(quán)限。 aci:(target="ldap:///uid=bjensen,dc=example,dc=com")(targetattr=*)(version 3.0; acl "aci1"; allow (write) userdn="ldap:///self";)
    • 2.允許 Engineering Admins 組的成員修改 Engineering 業(yè)務(wù)類別中所有條目的 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.向所有經(jīng)過驗(yàn)證的用戶授予對整個樹的讀取訪問,可以在dc=example,dc=com 節(jié)點(diǎn)創(chuàng)建下列 ACI: aci:(version 3.0; acl "all-read"; allow (read)userdn="ldap:///all";)
    • 5.允許對整個 example.com 樹進(jìn)行匿名讀取和搜索訪問,可以在dc=example,dc=com 節(jié)點(diǎn)創(chuàng)建下列 ACI: aci:(version 3.0; acl "anonymous-read-search";allow (read, search) userdn = "ldap:///anyone";)
    • 授予Administrators 組對整個目錄樹寫入的權(quán)限,則可以在 dc=example,dc=com 節(jié)點(diǎn)創(chuàng)建下列 ACI: aci:(version 3.0; acl "Administrators-write"; allow (write) groupdn="ldap:///cn=Administrators,dc=example,dc=com";)
    posted on 2008-09-19 02:00 憶風(fēng) 閱讀(671) 評論(0)  編輯  收藏 所屬分類: Java EE
    主站蜘蛛池模板: 亚洲精品国产成人影院| 日本久久久免费高清| 亚洲精品无码不卡在线播放HE| 国产精品亚洲片在线花蝴蝶| 猫咪社区免费资源在线观看| 亚洲成a人片在线看| 国产一卡二卡3卡四卡免费| 亚洲一区在线免费观看| 永久免费AV无码国产网站| 亚洲 日韩 色 图网站| 久久精品a一国产成人免费网站 | 99精品免费观看| 亚洲A∨无码无在线观看| 人妻无码久久一区二区三区免费 | 噜噜综合亚洲AV中文无码| 日日操夜夜操免费视频| 免费看一级毛片在线观看精品视频| 全部免费a级毛片| 一级毛片在线播放免费| 国产亚洲精品美女久久久| 一个人免费日韩不卡视频| 2020久久精品亚洲热综合一本 | 青苹果乐园免费高清在线| 亚洲色大成网站www久久九| 国产成人精品免费视频大全五级 | 2022年亚洲午夜一区二区福利 | 国产成人免费ā片在线观看| 深夜特黄a级毛片免费播放| 亚洲午夜国产精品无码老牛影视 | 久久er国产精品免费观看2| 亚洲黄色网站视频| 全免费A级毛片免费看网站| 羞羞视频在线观看免费| 亚洲国产精品人久久| 岛国大片免费在线观看| 成人毛片100免费观看| 亚洲第一精品电影网| 免费A级毛片无码久久版| 国偷自产一区二区免费视频| 在线综合亚洲欧洲综合网站| 亚洲熟女乱综合一区二区|