在計算機工業界,訪問控制指的是管理不一樣的人對計算機和計算機資源的訪問權限。本文簡要介紹了在工業界內被承認並普遍應用的主流訪問控制機制(概念及模型),並簡要分析了它們的使用場景與侷限性。可讓讀者更好的理解各個機制的區別來幫助讀者選擇最適合本身項目的模型和方法。安全
訪問控制(Access Control)正如其名字,是一種經過驗證用戶權限規範用戶訪問資源的一種安全措施。所以標識(Identification)、認證(authentication)以及受權(authorization)就是組成一個訪問控制模型的三個重要部分。ide
若是讀者看過與安全或權限相關的書或有過相關實踐應該對這三個概念的區別熟悉一些,若是不太瞭解的話能夠經過identification-authentication-authorization瞭解一下spa
訪問控制機制容許主體(Subject,表明了當前「用戶」,不必定是人,也能夠是爬蟲或robot)使用它們的憑證(Credential,好比密碼或Token)去標識(identify)它們本身是合法的用戶,並讓主體可以訪問資源。一個簡單的例子就是Linux系統中的訪問控制,在Linux系統中用戶能訪問什麼文件都經過一個預先定義好的Access Control List(ACL)作了限制。翻譯
訪問控制有時被劃分爲兩大類Discretionary 和 non-Discretionary,被流傳和應用最廣的主要有三類訪問控制模型:強制訪問控制(MAC,Mandatory access control),自主訪問控制(DAC,Discretionary access control),基於角色的訪問控制(RBAC,Role Based Access Control)設計
DAC是由對象(Object,能夠是系統中的file或data)的全部人制定policy,全部者決定誰可以訪問這個對象(Object),以及它有什麼Privileges(讀寫等)。code
部分中文把policy翻譯成策略我以爲不是很妥,這裏乾脆就直接用英語,policy一詞會常常出如今和安全相關的話題中en.wikipedia.org/wiki/Comput…。cdn
DAC有兩個重要概念:對象
主流的DAC模型中常用ACL或ACM(Access Control Matrix)來記錄policy,好比在casbin中經過以下內容表示policyblog
p alice data1 read
p bob data2 write
複製代碼
擁有對象權限的用戶,又能夠將該對象的權限分配給其餘用戶,因此稱之爲「自主(Discretionary)」控制。 這種設計最多見的應用就是文件系統的權限設計,如微軟的NTFS。進程
DAC最大缺陷就是對權限控制比較分散,不便於管理,好比沒法簡單地將一組文件設置統一的權限開放給指定的一羣用戶。同時主體的權限太大無心間就可能泄露信息,並且不能防備木馬攻擊訪問控制表。
MAC是一種更加「嚴格」的系統。這樣的訪問控制規則一般對數據和用戶按照安全等級劃分標籤,訪問控制機制經過比較安全標籤來肯定的授予仍是拒絕用戶對資源的訪問。用戶只能根據被授予的安全標籤的權限去訪問對應的對象。
在強制訪問控制系統中,全部Subject(用戶,進程)和Object(文件,數據)都被分配了安全標籤,安全標籤標識一個安全等級。訪問控制執行時對主體和客體的安全級別進行比較,是一種強加給Subject(即系統強制Subject服從訪問控制策略)的一種訪問方式,它利用上讀/下寫來保證數據的完整性,利用下讀/上寫來保證數據的保密性。
主要有Bell LaPadula(BLP) Model,以及Lattice Model。
MAC的訪問控制方式經過梯度安全標籤實現信息的單向流通,能夠有效地阻止木馬的攻擊,但其實現工做量較大,且管理不便、不夠靈活,並且它太重強調保密性,對系統連續工做能力、受權的可管理性方面考慮不足,在商用軟件中較少使用,主要出如今軍事以及對信息保密要求極高的組織中使用。
RBAC是繼MAC和DAC後的一個主要選擇,由於它對於商業軟件來講比DAC以及MAC都更加合適。Role-based access control (RBAC)指的是將系統中的用戶的權限以角色(role)劃分,好比在一個系統中醫生有權限新建病例,而普通護工沒有。它提供了細粒度的控制,並提供了一種簡單,易於管理的訪問控制方法,與單獨爲用戶分配權限(好比ACL)相比,它更不容易出錯。
本文介紹了訪問控制並介紹了相關的主流幾個模型,一些好比ABAC和一些模型的變種就沒詳細介紹。留待後續文章詳細介紹。