LDAP介紹和使用ACL示例

2021-06-29 04:25:54 字數 4796 閱讀 3642

決定了將要應用訪問控制的條目和屬性。條目通常通過兩種方式選定:通過dn或者通過過濾器。下面的示例通過dn選擇條目:

to * 

to dn[.]=

to dn.=

第一種格式用於選擇所有的條目。第二種格式用於選擇標準化的dn與所給正規表示式相匹配的條目(第二種格式不會在本文件中深入討論)。第三種格式用語選擇在所請求的dn範圍之內的條目。是乙個標識名的字串表示,如rfc2253中所述。 

dn範圍可以是以下四種之一:base, one, subtree, 或者 children。這裡的base只與所給的dn相匹配,one只與父條目是所給dn的條目相匹配,subtree只與根為所給dn的子樹下是所有條目相 匹配,而children匹配所有位於dn之下的條目(除了以dn為標識名的條目以外)。

比如,如果目錄包含以如下方式命名的條目:

0: o=suffix

1: cn=manager,o=suffix

2: ou=people,o=suffix

3: uid=kdz,ou=people,o=suffix

4: cn=addresses,uid=kdz,ou=people,o=suffix

5: uid=hyc,ou=people,o=suffix

那麼:

dn.base=」ou=people,o=suffix」 匹配 2;

dn.one=」ou=people,o=suffix」 匹配 3, 和 5;

dn.subtree=」ou=people,o=suffix」 匹配 2, 3, 4, 和 5;

dn.children=」ou=people,o=suffix」 匹配 3, 4, 和 5。

條目也可以通過過濾器收集起來:

to filter=

這裡的是ldap搜尋過濾器的乙個字串表示,如rfc2254所述。比如:

to filter=(objectclass=person)

注意到條目可以同時通過dn和過濾器來蒐集,只需要同時把兩者都包含在子句中即可:

to dn.one=」ou=people,o=suffix」 filter=(objectclass=person)

條目的屬性通過在蒐集器中包含用逗號分隔的屬性名列表指定:

attrs=

乙個屬性的具體取值通過單個的屬性名和值選取器來指定:

attrs= val[.

部分指明了被賦予訪問許可權的身份。注意,許可權被賦予「身份」(實體:entities)而不是「條目」(entries)。下表說明了身份說明選項:
—specifier— —entities—

* all, including anonymous and authenticated users

anonymous anonymous (non-authenticated) users

users authenticated users

self user associated with target entry

dn[.]= users matching a regular expression

dn.= users within scope of a dn

dn說明選項使用乙個正規表示式來匹配當前身份的「規範」dn。
dnattr=

dnattr用來授權給乙個條目,而該條目的dn是在所列的條目的屬性當中(比如,可以給乙個條目組的擁有者所在的條目授權)。

系統還支援其他的控制方式。比如可以通過乙個匹配限制客戶端的網域名稱:
domain=

一些因素可能不是在所有的環境下都是正確的。比如,網域名稱因素依賴於網域名稱查詢。因為這些很容易spoofed,所以網域名稱因素不可避免。

可以賦予的的型別可以是如下幾種:
在評估某個請求者是否具有對乙個條目和/或屬性的訪問許可權時,slapd將條目和/或屬性與配置檔案中的選取器進行比較。對每一 個條目,資料庫級的訪問控制首先生效,跟著生效的是全域性訪問控制指令。按照這樣的先後順序,訪問控制指令以它們在配置檔案中出現的先後次序被檢查。 slapd在碰到第乙個匹配條目和/或屬性的選取器時終止。對應的訪問控制指令就是slapd將要用來評估訪問控制許可權的。 

接下來,slapd把提出訪問的實體與訪問控制指令中的選取器依次比較。當它遇到第乙個匹配請求實體的選取器是它將停止。這也就決定了實體能夠擁有的對條目和/或屬性的訪問許可權。

最後,slapd將訪問控制指令中的與客戶的請求許可權相比較。如果它允許大於或等於的訪問許可權,訪問就被批准。否則,訪問將被拒絕。

訪問控制指令的評估順序使它們在配置檔案中的位置變得很重要。如果乙個訪問控制指令就它所選的條目而言比另乙個更具體,那麼它應當出現在配置檔案的前面。類 似地,如果乙個選取器比另乙個更具體,它也應該在配置檔案的前面出現。下面給出的訪問控制示例將會使這一切變得更清晰。

訪問控制示例:

上面描述的訪問控制應用是非常強大的。下面的部分顯示了它們的一些實用示例。首先,幾個簡單的例子:

這個訪問控制指令將讀許可權賦予每乙個人。
access to * ( 「to *」指的是即控制對什麼的訪問 )

by self write ( 「self」指的是即賦予誰訪問許可權 ; 「write」指的是即賦予什麼許可權 )

by anonymous auth

by * read

該指令允許使用者修改自己的條目,允許認證,並且允許所有其他人讀取。注意,只有第乙個by 語句匹配應用。因此,匿名使用者被賦予認證許可權,而非讀取許可權。因此,最後乙個語句和「by users read」效果相同(因為上一條已經將匿名使用者驗證為users,之後不會再有匿名使用者了)。

經常需要對不同的保護級別執行不同的受限操作。以下顯示了security strength factors (ssf)可以怎樣被使用:
access to *

by ssf=128 self write

by ssf=64 anonymous auth

by ssf=64 users read

這條指令允許使用者修改他們自己的條目,如果安全保護強度為128或者更高的話;允許匿名使用者擁有auth許可權,一般使用者擁有讀許可權,如果確定了級別為64 或者更高的安全保護強度的話。如果客戶沒有確定足夠的安全保護強度的話,暗含的by * none字據將會起作用。

下面的例子顯示了通過style specifiers 在兩個訪問指令中通過dn選擇條目的用法,其中,訪問指令的順序是很重要的。
access to dn.children=」dc=example,dc=com」

by * search

access to dn.children=」dc=com」

by * read

所有使用者都擁有對dc=com 子樹下的條目的讀許可權,例外的是,對那些dc=example,dc=com 子樹下的條目,使用者僅僅有搜尋的許可權。dc=com 是不可訪問的,因為沒有訪問指令匹配該條dn。如果這裡的指令順序顛倒了的話,那麼尾部的指令將永遠不會被用到,因為所有 dc=example,dc=com 下的條目也都是dc=com 下的條目。

(可以理解為:下乙個」access to」是除去上乙個裡的內容的,上面的範圍要更精確)

同時要注意到如果沒有與指令相匹配的訪問許可權或者沒有by 子句的話,訪問將被拒絕。也就是說,每乙個access to 指令都是以乙個暗含的by * none 子句結尾的,並且每乙個訪問列表都以乙個暗含的access to * by * none指令結尾。

下面的示例再一次說明了對access指令和by 子句而言出現順序的重要性。它也顯示了屬性選取器和各種選取器的用法。
access to dn.subtree=」dc=example,dc=com」 attr=homephone

by self write

by dn.children=」dc=example,dc=com」 search

by peername=ip:10..+ read

access to dn.subtree=」dc=example,dc=com」

by self write

by dn.children=」dc=example,dc=com」 search

by anonymous auth

本例對」dc=example,dc=com」子樹中的條目起作用。除了homephone之外,乙個條目可以寫它所有的屬性,example.com 下的條目可以被它自己搜尋,其他任何人都沒有許可權訪問(暗含by * none),例外是經過認證/授權的使用者可以(總是匿名進行)。homephone屬性對條目自身而言是可寫的,對example.com下的條目是可搜 索的,對來自10網路的客戶總是可讀的,否則就是不可讀的(暗含by * none)。所有其他的訪問都將被拒絕,因為暗含有access to * by * none子句。

有時,允許乙個特定的dn來從乙個屬性中增加或者刪除自己是很有用的。比如,如果您想建立乙個組,並且允許人們向該組的member屬性中增加或者刪除自己的dn,應該使用如下的訪問控制指令來完成這一點:
access to attr=member,entry

by dnattr=member selfwrite

這個dnattr說明的選擇器說明,該訪問控制應用於member屬性中列出的條目。selfwrite訪問控制選擇器說明那些成員只能從屬性中增加或者 刪除自己,而不能增加或者刪除其他值。附加的「entry」是必須的,因為要訪問該條目的屬性,能夠訪問該條目是必須的。

LDAP概念和原理介紹

ldap概念和原理介紹 相信對於許多的朋友來說,可能聽說過ldap,但是實際中對ldap的了解和具體的原理可能還比較模糊,今天就從 什麼是ldap ldap的主要產品 ldap的基本模型 ldap的使用案例 四個方面來做乙個介紹。我們在開始介紹之前先來看幾個問題 1.我們日常的辦公系統是不是有多個?...

golang nsq示例使用介紹

直接解壓後 我的重新命名了nsq 1.2.0 bin目錄裡就會出現一大堆nsq 開頭的可執行檔案 上面是結束了nsql的常用使用元件,我們再來回顧下上面的概念問題 nsqlookupd 看看官方的原話是怎麼說 nsqlookupd是守護程序負責管理拓撲資訊。客戶端通過查詢 nsqlookupd 來發...

Dubbox的介紹和簡單示例

dubbo是乙個來自阿里巴巴的開源分布式服務框架,噹噹根據自身的需求,為dubbo實現了一些新的功能,包括rest風格遠端呼叫 kryo fst序列化等等。並將其命名為dubbox 即dubbo extensions 類似範例 dubbo是阿里開源的rpc服務呼叫框架,已經3年沒有維護了,而當當網開...