基于角色的訪問控制(RBAC)是常用的簡化管理的安全模式,通過給用戶指定角色,然后再給角色授權來實現,RBAC在SELinux中扮演用戶與基礎類型加強模式(TE)之間的抽象層,它提供非常細粒度的訪問控制,但是管理難度并沒有降低,研究如何將SELinux上下文的3部分(策略、內核和用戶空間)協同工作以強制使用RBAC和限制Linux用戶在TE策略中。
在SELinux下安全策略的實施是在基于角色的訪問控制(RBAC)下的類型增強(TE),(SELinux也能實現多級安全(MLS)的實施,MLS在本文范圍之外),類型增強(TE)是最常見的,但也是最不容易理解的,因為它強制實施更細粒度的許可:當某些東西因為異常訪問拒絕而遭到破壞時,類型增強(TE)是最可靠的,在TE中,一個進程的安全域(它的影響超過了系統)是由任務歷史和當前執行的程序決定的
RBAC的概念并不象TE一樣被經常提到,并且因為他與TE集成的原因,總是讓人難以理解,你通常會認為RBAC是按照用戶被分配的角色進行訪問的,從TE方面來說SELinux明確指出了基于角色的訪問,因此SELinux下RBAC的目標是允許基于角色的權限管理,然后限制一個角色的權利域,合成一個有效的安全上下文。
要知道這是如何工作的,請看一個簡單的現金帳簿會計系統是如何使用SELinux提供安全保護的,你將在兩個完全不同的環境(看這兩個環境相關的下載,附錄A)下看到一樣的解決方案:
在developerWorks網站上有一篇文章“從零開始SELinux”介紹了如何從零開始一個SELinux系統,這個系統顯示在內核和用戶空間里的部分是綁定在一起的。
Fedora Core 8 系統,Fedora Core 8 系統(寫本文時的最新版本)展示了SELinux與RBAC是如何高度地集成在一起的。
與角色一起工作
假設你已經要求一個庫房部門部署一套安全登記庫存會計系統,因為每天都進行現金帳簿,最終數量必須同時被出納和經理統計,因此我們首先定義兩個角色,出納和經理,然后我們將角色賦予了需要它的雇員,即賦予出納和經理。
在兩個系統上的策略文件或許會稍微不同,在兩個系統上都使用現金帳簿系統,數據一樣,所有數據存儲在/data目錄下,并且只能通過/bin/register.py程序進行訪問,register.py能同時被經理和出納使用,用于存儲數值,為了保持代碼簡潔,缺少一些特點,出納每天為他自己存儲現金帳簿值,經理能為其他雇員存儲數值,當出納與經理為同一個出納存儲相同的數值時,經理能夠提交這個數值。
在2007/12/12晚上9點,當出納Bob使用register.py存儲了一個數值109.95時,文件/data/cashier_r/bob/12-12-2007被創建,內容是"bob 09:00 109.95.",后來,經理Mary在9:25存儲了一個相同的數值,結果文件/data/cashier_r/bob/12-12-2007被覆蓋,內容為"mary 09:25 109.95.",最后,Mary在晚上9:27提交了這個數值,bob使用register.py提交后創建了文件/data/final/bob/12-12-2007,內容為"mary 09:27 bob mary 109.95."。
如果Bob和Mary對他們的數值都不同意,Mary將不能為Bob提交數值了,他不得不去找Bob協商,除非他們兩個都同意,否則這兩個數值都必須重新計算,重新運行register.py命令用前面的數值再計算一次,新的結果將附加到先前的結果后以便倉庫管理員稍后容易閱讀,bob使用/bin/register.py命令提交時將使用最后的那個數值而不是/data/cashier_r/bob/12-12-2007和/data/mgr_r/bob/12-12-2007。
注意:在這個例子中討論的代碼都為訪問控制需要使用了SELinux,我們的例子簡單地允許所有擁護都能完全往/data目錄下的文件和目錄中進行寫入訪問,在一個真實的部署環境中,你可能會想到使用DAC[譯者注:即傳統的linux權限控制,使用訪問控制列表ACL]許可來進行深度防御,所有經理都希望在/data/mgr_r/bob/和/data/final/bob/目錄下創建文件,牽涉到UNIX組權限的小心使用,但是更簡單的辦法是,完全依靠SELinux來實現強制訪問控制。
首先阻止經理和出納訪問/data目錄下的任何文件,除非通過register.py程序,實際上,Bob將以cashier_t類型登陸到角色cashier_r,但是cashier_t不能讀取/data目錄下的內容,為了能讀取,他必須進入cashier_register_t類型,進入后也只能執行/bin/register.py程序,類似地,Mary將以mgr_t登陸到角色mgr_r,但是他必須進入mgr_register_t類型后才能執行/bin/register.py程序來訪問/data目錄下的內容。
第一個訪問控制實際上發生在登陸的時候,PAM模塊認為Bob必須登陸到cashier_r角色,當在內核中的SELinux類型增強服務器拒絕同意bob_u:cashier_r:cashier_t進入bob_u:cashier_r:cashier_register_t時也會發生,除了執行cashier_exec_t類型的文件,cashier_exec_t是管理員僅僅為/bin/register.py指定的類型。
當register.py拒絕同意出納提交數據或為另一個用戶存儲數據時也會發生,將來通過SELinux策略進行加強,并且內核代碼也會加強策略的控制,它不允許cashier_register_t訪問/data/mgr_r或/data/final目錄下的文件。
共6頁: 1 [2] [3] [4] [5] [6] 下一頁 | ||||||||
|