OPENLDAP 訪問控制

2021-05-18 06:56:32 字數 4200 閱讀 4088

1 語法

access to [by ]+

其中,access to指示啟用訪問控制,上句大致可以理解為:

access to 《對什麼目標進行控制》[by 《作用於哪些訪問者》 《授予什麼樣的訪問許可權》《採取什麼樣的匹配控制動作》]+

2 剖析

2.1 控制目標這一域主要是實現對acl應用物件的指定,物件可以是記錄和屬性。選擇acl目標記錄的方法一般有兩種:dn和filter,語法為:

::= * |

[dn[.]=| dn.=]

[filter=] [attrs=]

2.1.1 指定所有的記錄

access to *

2.1.2 通過dn指定

語法如下:

to dn[.]=::= regex | exact

to dn.=::= base | one | subtree | children

第一種方法是使用正規表示式(dn.regex)或精確匹配(dn.style)的方式來匹配符合條件的記錄(這個好像不像想象的那麼簡單,實現起來頗為費腦筋),例如:

access to dn="^.*,uid=([^,]+),ou=users,(.*)$"

第二種方法通過「區域」選擇的方法進行目標記錄的選取,對以指定的dn開始的目錄樹區域進行目標記錄匹配。匹配區域的方式共有四種:

base 只匹配dn本身一條記錄

one 匹配以給定dn為父目錄的所有記錄

subtree 匹配以給定dn為根目錄的所有子樹內的記錄

children 匹配給定dn下的所有記錄,但應該不包括以dn直接命名的那條記錄(參見例子的解釋)

例如:對於

0: dc=mydomain,dc=org

1: cn=root,dc=mydomain,dc=org

2: ou=users,dc=mydomain,dc=org

3: uid=samba,ou=users,dc=mydomain,dc=org

4: cn=administator,uid=samba,ou=users,dc=mydomain,dc=org

5: uid=guest,ou=users,dc=mydomain,dc=org

規則 dn.base="ou=users,dc=mydomain,dc=org" 只會匹配記錄2

規則 dn.one="ou=users,dc=mydomain,dc=org" 匹配記錄3和記錄5,記錄4是記錄3的子目錄,故不算在內

規則 dn.subtree="ou=users,dc=mydomain,dc=org" 匹配記錄2、3、4、5

規則 dn.children="ou=users,dc=mydomain,dc=org" 匹配記錄3、4、5,因為記錄0、1和2都是以dn直接命名的,故不匹配

2.1.3 通過filter匹配記錄

通過filter指定過濾規則進行記錄過慮,語法如下:

access to filter=其中filter指定的為search的過濾規則,這類同於linux系統中grep的匹配方式。如:

access to filter=(objectclass=sambasamaccount)

也可以結合使用dn和filter進行記錄的匹配,例如:

access to dn.subtree="ou=users,dc=mydomain,dc=org" filter=(objectclass=posixaccount)

2.1.4 通過attrs選取匹配記錄

語法:attrs=例如:

access to attrs=uid,uidnumber,gidnumber

也可以結合使用dn和attrs進行記錄的匹配,例如:

access to dn.subtree="ou=users,dc=mydomain,dc=org" attrs=uid

2.2 被用來授權的訪問者的指定

指定被授權的使用者範圍的方法大致有以下幾種:

* 所有的訪問者,包括匿名的使用者

anonymous 非認證的匿名使用者

users 認證的使用者

self 目標記錄的使用者自身

dn[.]=在指定目錄內匹配正規表示式的使用者

dn.=指定dn內的使用者

例如:by dn.subtree="ou=users,dc=domain,dc=org"="^samba*"

2.3 被授予的許可權當選取好acl作用的目標記錄並選取好使用者範圍後,就該給這些使用者授予他們應該得到的許可權了。大致的許可權(由低到高)有以下幾類:

none 無許可權,即拒絕訪問

auth 訪問bind(認證)設定的許可權;前提是需要使用者提交乙個dn形式的使用者名稱並能通過認證

compare 比較屬性的許可權;(例如:對照檢視某使用者的telephonenumber值是不是158 8888 8888),但並不具有搜尋的許可權

search 利用過慮條件進行搜尋的許可權,但這並不一定具有可讀取搜尋結果的許可權

read 讀取搜尋結果的許可權

write 更改記錄屬性值的許可權

可以在slapd.conf檔案中通過defaultaccess指定預設的許可權級別,如:

defaultaccess search

2.4 採取什麼樣的匹配控制動作在進行記錄的匹配時,如果有多條規則存在,那麼在第一次匹配產生後是否還進行後續的匹配或採取其它的動作將取決於此項的設定;控制方式共有以下三種:

stop 這個是預設值,這表示在一次匹配產生後將不再進行下乙個匹配,所有後續的匹配將會停止。

continue 無論匹配是否已經發生,繼續進行直到所有的規則全部進行完匹配檢查

break 乙個匹配發生後,跳出當前的子句進行後乙個子句的檢查

2.5 乙個例子

access to dn.chilren="ou=users,dc=mydomain,dc=org"

attrs=userpassword #指定「密碼」屬性

by self write #使用者自己可更改

by * auth #所有訪問者需要通過認證

by dn.children="ou=admins,dc=mydomain,dc=org" write #管理員組的使用者可更改

經常需要對不同的保護級別執行不同的受限操作。以下顯示了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字據將會起作用。

2.6 官方給出的完整語法

::= access to [by ]+

::= * |

[dn[.]=| dn.=]

[filter=] [attrs=]

::= regex | exact

::= base | one | subtree | children

::= [val[.]=] | , ::= | entry | children

::= * | [anonymous | users | self

| dn[.]=| dn.=]

[dnattr=]

[group[/[/][.]]=]

[peername[.]=]

[sockname[.]=]

[domain[.]=]

[sockurl[.]=]

[set=]

[aci=]

::= [self]

::= none | auth | compare | search | read | write

::= +

::= [stop | continue | break]

Openldap 訪問控制列表

這些是我的個理解,其中或許不當之處還很多,大家討論一下 1 語法 access to by 其中,access to指示啟用訪問控制,上句大致可以理解為 access to 對什麼目標進行控制 by 作用於哪些訪問者 授予什麼樣的訪問許可權 採取什麼樣的匹配控制動作 2 剖析 2.1 控制目標 這一...

訪問控制模型 強制訪問控制

強制安全訪問控制基於安全標籤的讀寫策略使資料庫管理系統能夠跟蹤資料的流動,可以避免和防止大多數對資料庫有意或無意的侵害,因而,可以為木馬程式問題提供一定程度的保護,在資料庫管理系統中有很大的應用價值。其典型代表是bell la padula模型 簡稱 blp模型 和 biba 模型,也是目前應用最為...

關於linux訪問控制(ACL訪問控制)

由於linux系統的基本許可權控制是針對文件所有者或其他賬戶來進行控制的,無法對單獨賬戶控制,這是acl訪問控制許可權,使用acl我們可以針對單一賬戶設定文件的訪問許可權 描述 檢視文件的acl全新啊 用法 通過getfacl對檔案或目錄進行acl許可權檢視 用來對檔案進行訪問控制 用法 setfa...