OpenLDAP ACL 的使用集合
所以,我正在嘗試編寫一些 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 ...
是你的朋友。