訪問控制模型
在項目中需要加入訪問空值,於是對訪問控制模型多了一些調研,介紹一些常見的訪問控制模型.
訪問控制模型三要素
- 主體(Subject) 指主動對其它實體施加動作的實體
- 客體 (Object) 是被動接受其他實體訪問的實體
- 控制策略 (Policy) 為主體對客體的操作行為和約束條件
自主訪問控制模型(DAC)
概念
自主訪問控制模型(DAC,Discretionary Access Control)是根據自主訪問控制策略建立的一種模型,允許合法用戶以用戶或用戶組的身份訪問策略規定的客體,同時阻止非授權用戶訪問客體。擁有客體權限的用戶,可以將該客體的權限分配給其他用戶。例如沒有文件 File1 訪問權限的用戶可以從有訪問權限的 B 用戶那里得到訪問權限。
DAC訪問控制的實現
權限控制列表
訪問控制列表 (ACL, Access Control List),每一個客體都配有一個列表,這個列表記錄了主體對客體進行何種操作。當系統試圖訪問客體時,先檢查這個列表中是否有關於當前用戶的訪問權限。ACL 是一種面向資源的訪問控制模型,它的機制是圍繞資源展開的。
對於一個文件對象的 ACL:
- Alice: read,write
- Bob: read
表示 Alice 可以對該文件進行讀寫操作,Bob 只能讀取。
權限控制矩陣
訪問控制矩陣 (ACM,Access Control Matrix) 是通過矩陣形式描述主體和客體之間的權限分配關系。每個主體而言,都擁有對哪些客體的哪些訪問權限;而對客體而言,又有哪些主體對他可以實施訪問;
應用場景
DAC 常見於文件系統,LINUX,UNIX、WindowsNT 版本的操作系統都提供 DAC 的支持。在實現上,先對用戶鑒權,然后根據控制列表決定用戶能否訪問資源。用戶控制權限的修改通常由特權用戶或者管理員組實現。
特點和缺點
特點
授權的實施主體(1、可以授權的主體;2、管理授權的客體;3、授權組)自主負責賦予和回收其他主體對客體資源的訪問權限。DAC 模型一般采用訪問控制矩陣和訪問控制列表來存放不同主體的訪問控制信息,從而達到對主體訪問權限的限制目的。
缺點
- 主體的權限太大,無意間就可能泄露信息
- 不能防備特洛伊木馬的攻擊訪問控制表
- 當用戶數量多、管理數據量大時,ACL 就會很龐大。不易維護。
強制訪問控制 MAC
強制訪問控制模型 (MAC, Mandatory Access Control), 是為了彌補 DAC 權限控制過於分散的問題而誕生的。在計算機安全領域指一種由操作系統約束的訪問控制,目標是限制主體或發起者訪問或對對象或目標執行某種操作的能力。任何主體對任何對象的任何操作都將根據一組授權規則(也稱策略)進行測試,決定操作是否允許。
- Subject 被賦予一定的安全級別
- Object 被賦予一定的安全級別
- Subject 能否訪問 Object 由雙方的關系安全級別決定,這個判斷通常有系統硬性限制.
MAC 非常適合機密機構或者其他等級觀念強烈的行業,過重強調保密性,管理不夠靈活。在實現上,MAC 和 DAC 通常為每個用戶賦予對客體的訪問權限規則集,考慮到管理的方便,在這一過程中還經常將具有相同職能的用戶聚為組,然后再為每個組分配許可權。
強制訪問策略
強制訪問控制系統根據主體和客體的敏感標記來決定訪問模式,模式包括
- 不上讀(NRU),主體不可讀安全級別高於他的數據;
- 不下讀(NRD),主體不可讀安全級別低於他的數據
- 不上寫(NWU),主體不可寫安全級別高於他的數據。
- 不下寫(NWD),主體不可寫安全級別低於他的數據。
由於安全性,這種方式一直被軍方所使用,下面講述兩種被廣泛使用的強制訪問控制安全模型
- BLP 模型:在 BLP 模型中,不上讀,不下寫,也就是不允許低安全等級的用戶讀取高安全等級的信息,不允許高敏感度的信息寫入低敏感度的區域,禁止信息從高級別流向低級別,強制訪問控制通過這種梯度的安全標簽實現信息的單向流通
- Biba 模型:由於 BLP 模型存在不保護信息的完整性和可用性,不涉及訪問控制等缺點,所以使用 Biba 模型作為一個補充,它針對的是信息的完整性保護,主要用於非軍事領域,Biba 模型使用不下讀,不上寫的原則來保證數據的完整性,在實際的應用中主要是避免應用程序修改某些重要的系統程序或系統數據庫,這樣可以使資源的完整性得到保障。也就是寫,只能讀上級發給他的命令,不能讀他的下級接收到什么命令
基於角色的訪問控制(RBAC)
管理員定義一系列角色(roles)並把它們賦予主體。系統進程和普通用戶可能有不同的角色。設置對象為某個類型,主體具有相應的角色就可以訪問它。這樣就把管理員從定義每個用戶的許可權限的繁冗工作中解放出來。
基於角色的訪問控制 (RBAC, Role Based Access Control) 在用戶和權限之間引入了 “角色(Role)” 的概念,角色解耦了用戶和權限之間的關系。
角色和組的主要區別:
- 組是用戶的集合
- 角色是權限的集合
- 角色 / 權限之間的變化比組 / 用戶關系之間的變化相對要慢得多,減小了授權管理的復雜性
基於角色的訪問控制模型 RBAC,有時成為基於規則的基於角色的訪問控制(Rule-Based Role-Based Access Control,RB-RBAC)。它包含了根據主體的屬性和策略定義的規則動態地賦予主體角色的機制。例如,你是一個網絡中的主體,你想訪問另一個網絡中的對象。這個網絡在定義好了訪問列表的路由器的另一端。路由器根據你的網絡地址或協議,賦予你某個角色,這決定了你是否被授權訪問。
發展歷程
RBAC0
RBAC0 作為基礎模型,只包含核心的三要素,用戶,角色,權限。用戶和角色可以是多對多的關系,權限和角色也是多對多的關系。
RBAC1
RBAC1 包括了 RBAC0 並且添加了角色繼承。顧名思義,角色繼承就是指角色可以繼承於其他角色,在擁有其他角色權限的同時,自己還可以關聯額外的權限。這種設計可以給角色分組和分層,一定程度簡化了權限管理工作。也就是角色之間存在上下級的關系,對應到實體設計中也就是角色實體的自身關聯。
RBAC2
RBAC2 也包括 RBAC0 並且添加了約束。RBAC1 和 RBAC2 相互獨立.
RBAC2 的約束規定了權限被賦予角色時,或角色被賦予用戶時,以及當用戶在某一時刻激活一個角色時所應遵循的強制性規則。
互斥約束:包括互斥用戶,互斥角色,互斥權限。同一個用戶不能擁有相互排斥的角色,兩個互斥角色不能分配一樣的權限集,互斥的權限不能分配給同一個角色,在 session 中,同一個角色不能擁有互斥權限。
基數約束:一個角色被分配的用戶數量受限,它指的是有多少用戶能擁有這個角色。例如:一個角色專門為公司 CEO 創建的,那這個角色的數量是有限的。
先決條件角色:指要想獲得較高的權限,要首先擁有低一級的權限。例如:先有副總經理權限,才能有總經理權限。
RBAC3
RBAC3 是一個全功能的 RBAC,RBAC3 合並了 RBAC0,RBAC1,RBAC2.
基於屬性的訪問控制 (ABAC)
基於屬性的訪問控制 (ABAC, Attribute Based Access Control) 通過動態計算一個或一組屬性是否滿足某種條件來進行授權判斷。可以按需實現不同顆粒度的權限控制,但定義權限時不易看出用戶和對象間的關系。如果規則復雜,容易給管理者帶來維護和追查帶來麻煩。
屬性通常來說分為四類:
- 用戶屬性(如用戶年齡)
- 環境屬性(如當前時間)
- 操作屬性(如讀取)
- 對象屬性(如一篇文章,又稱資源屬性)
指定基於屬性的控制協議需要將主體,環境,客體的屬性構建集合,通過關聯控制策略形成響應結果.
跟 RBAC 相比,ABAC 對權限的控制粒度更細,如控制用戶的訪問速率。實際開發中可以結合 RBAC 角色管理的優點和 ABAC 的靈活性一起使用。
參考
[1] https://blog.csdn.net/fei33423/article/details/106588580