Openldap

OpenLDAP ACL 的使用集合

  • August 13, 2013

所以,我正在嘗試編寫一些 LDAP 規則,讓某些人能夠編寫一些子樹。

假設我們有這個使用者:

dn: uid=minion1,o=mycompany,ou=cust,dc=some,dc=domain
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
isAdmin: TRUE

而這個使用者:

dn: uid=minion2,o=mycompany,ou=cust,dc=some,dc=domain
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
isAdmin: FALSE

哦,還有這個使用者:

dn: uid=minion3,o=notmycompany,ou=cust,dc=some,dc=domain
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
isAdmin: FALSE

我正在嘗試為 minion1 設置權限以修改 minion2 的帳戶,但不是 minion3(如果您看的話,minion3 位於不同的組織“notmycompany”中,而其他兩個位於“mycompany”中)。

基本規則是使用者應該能夠根據“isAdmin”屬性是否設置為 TRUE 以及對像是否與他/她希望的使用者在同一個組織中來添加/修改/刪除其組織中的條目調整。

我的部分工作 ACL 是:

to dn.regex="^.+o=([^,]+),ou=cust,dc=some,dc=domain$" 
by set="user/isAdmin & [TRUE]" write 

這當然也允許他們修改​​ minion3 的帳戶。我想補充

"[^.+,o=$1,ou=cust,dc=some,dc=domain$]"

到上面的by line,但到目前為止我失敗得很慘。有沒有人有什麼好主意我可以嘗試?(我是否充分解釋了我在這裡嘗試做的事情)?

提前致謝;

我花了一些時間查看有關 sets 的文件,您遇到的問題是 set 運算符(如&)實際上僅適用於相同類型的數據……所以您可以要求 DN 和DN,或屬性值和字元串,但不同類型事物的交集沒有意義。

isAdmin因此,我們使用屬性和字元串連接的奇蹟來建構一個字元串,如下所示:

olcAccess: {1}to dn.regex="o=([^,]+),ou=cust,dc=some,dc=domain$" 
   by set.expand="([admin=] + user/isAdmin + [,] + user/-1) & ([admin=TRUE] + [,o=$1,ou=cust,dc=some,dc=domain])" write 
   by * break

注意 的使用者set.expand,因為我們想$1在集合定義中使用,並註意使用[...]將文字值放入我們正在評估的字元串中。

對於以 身份登錄的人minion1,這將要求以下交集:

admin=TRUE,o=mycompany,ou=cust,dc=some,dc=domain

和文字值:

admin=TRUE,o=mycompany,ou=cust,dc=some,dc=domain

這是一個非空集,所以它有效。對於有isAdmin=FALSE(或沒有isAdmin屬性)的人,比較將是 withadmin=FALSE,...admin=,...。同樣,對於與目標不在同一組織o=...中的人,交集將產生一個空集。

如果你有興趣,是我實際用於測試的。我使用employeeType而不是isAdmin因為我不想為向我的模式添加新屬性而煩惱。

另外:slapd -dacl ...是你的朋友。

引用自:https://serverfault.com/questions/530512