TE模型
主體划分為若干組,稱為域
客體划分為若干組,每個組稱為一個類型
DDT(Domain Definition Table,域定義表,二維),表示域和類型的對應訪問權限,權限包括讀寫執行
一個域通常有多個主體
一個類型通常有多個客體
DIT(Domain Interaction Table,域交互表)當主體成為客體的時候,用DIT表來實現訪問控制。權限包括發信號、創建進程、殺死進程等
缺點:
1、訪問控制權限的配置比較復雜
2、二維表結構無法反映系統的內在結構
3、控制策略的定義比較復雜
DTE模型
立足於解決TE模型在實際應用中遇到的問題
-
提供了用於描述安全數學和訪問控制配置的高級語言,DTE語言(DTEL)
-
采用了隱含方式表示文件的安全屬性
假設有如下的DTE語句:type unix_t, specs_t, budget_t, rates_t;
表示定義四個客體類型,名稱分別是unix_t, specs_t, budget_t, rates_t;
DTE的賦值語句把客體和客體類型聯系起來,也就是設置客體的類型屬性
客體間的層次關系,可以采用隱含賦值的方式給客體賦類型值,比如,給該目錄賦值類型,相當於把該類型賦值給該目錄及其下面的所以目錄和文件。這就是客體賦值的隱含規則
assign -r -s uinix_t /;
將/下所有目錄和文件賦值為類型unix_t,-r表示遞歸、-s表示禁止系統在循行期間創建與目錄的類型不同的客體
DTEL還定義了域入口點,一個域的入口點是一個可執行程序,執行該可執行程序可以使程序進入到該域中。
SELinux實現的TE模型
SELinux實現的TE模型對DTE模型進行了擴充
1、類型的細分,在類型的基礎之上增加類別(class)的概念
2、權限的細化,定義了幾十個class,為每個class定義了大量精細的訪問控制
SELinux中幾個常用的客體類別(class),及其權限
file:read、write、execute、getattr、create
dir:read、write、search、rmdir
process:signal、transition(域的轉換)、fork、getattr
socket:bind、listen、connect、accept
filesystem:mount、unmount
訪問控制方法
allow是描述訪問控制授權的基本方法,語法規則如下:
allow source_type target_type : object_class perm_list
source_type:主體的域
target_type:客體類型
object_class:訪問權限所針對的客體類別
perm_list:允許源類型對目標類型的客體類別進行的訪問
allow user_d bin_t : file{read、execute、getattr}
允許user_d域的進程對bin_t類型的普通文件進行讀、寫、取屬性操作
舉例:
3條allow規則的含義
如果要實現域的轉移,則需要以下3條規則:
進程工作域的字段切換
當滿足了以上的三個條件的時候,可以實行進程工作域的切換
SELinux通過類型切換規則來描述進程工作域的字段切換方法,規則如下:
type_transition source_type target_type : process default_type
該規則的含義是,當source_type(該字段表示域)的進程執行target_type(表示文件類型)的入口程序的時候,自動把進程的域切換到 default_type(表示域)。
訪問判定
SELinux中,一個權限的判定通過以下的四元組來確定
source_type target_type object_class perm_list
perm_list用來做為判定結果,每種權限用一個位表示
切換判定
切換判定指給新的主體或新的客體分配新的標簽及新的標簽該取什么值,給主體和客體分配新的標簽就被稱為標簽切換
可以使用type_transition規則描述文件的類型切換控制,該規則的描述如下:
type_transition source_type target_type : file default_type
在source_type域中、target_type類型的目錄下創建新文件時,該規則把新文件的類型標簽切換為default_type
客體類型標簽的存儲
linux中客體分為臨時客體和永久客體
臨時客體的安全屬性保存在內存的表結構中
永久客體如文件和目錄,保存在文件系統的擴展屬性結構中,系統運行時,SELinux再把文件系統拓展屬性中的永久客體的類型標簽映射到內存結構的表結構
SELinux中系統結構設計
LSM框架是inux內核支持安全拓展的方式,實現是在linux內核的系統調研中安插一系列的鈎子,這些鈎子安插在linux訪問控制之后,實施訪問操作之前
在linux中,如果調用open時成功,之后又被撤銷了讀取權限,進程還是可以讀取文件
但是SELinux在每次操作文件時都會檢查權限
SELinux的策略語言