S008SELinux的約束操作
約束(constraints),是SELinux很有用的特新,它的使用十分普遍。很多時候,使用者覺得約束是一種新增到黑名單上,並使其受限的方法。當然前提是預設允許,約束它告訴人們的是在指定情況下這是不允許的。但是在SELinux中,這種感覺是不準確的。SELinux中,約束更像是過濾器,它遵循白名單的方法。SELinux中的約束(constraints)是在指定的情況下允許某些操作,不匹配要求的操作則被禁止。
但是話又說回來,如果沒有針對操作定義約束(constraints),SELinux是允許操作執行的(當然需通過其他檢查,比如型別強制規則)。
約束(constraints)和型別強制(TE)的區別
型別強制使用安全上下文中的型別欄位(第三部分)。不同於型別強制,約束則在規則中使用整個上下文,比起域(domains)對於操作更加有針對性。比如以下例子:
CODE SELinux object identity change constraint
constrain dir_file_class_set{create relabelto relabelfrom}
(
u1 == u2
or t1 ==can_change_object_identity
);
上面看到的是一條約束,它描述瞭如果兩個上下文中的SELinux部分一致(u1==u2)或者如果域被分配了can_change_object_identity屬性,則域可以建立、重打標籤目錄和檔案。這裡的屬性可以使用seinfo工具進行查詢:
user $seinfo -acan_change_object_identity –x
如果不滿足這些限制,操作將會被拒絕。哪怕通過其他的型別強制規則明確執行此操作。
SELinux中的約束
SELinux使用約束來修整它的策略。它的很多特性都是通過約束(constraints)來實現的,基於使用者訪問控制(User-based access control)便是其中之一。MLS和MCS很多的規則也是通過約束來實現的。修改約束需要認真斟酌。很多情況下,如果需要修改,它將會放入釋出版本的基礎策略中一起構建。
羅列約束
可以使用seinfo工具來顯示系統中的約束。但是它立刻返回的是完全展開的輸出,使用的是數學表示式上的語法。如下所示:
user $seinfo --constrain
constrain{ file } { create relabelfrom relabelto }
( u1 u2 == t1 { logrotate_t policykit_auth_t sysadm_t lvm_t rpm_t xdm_t krb5kdc_tnewrole_t portage_t
local_login_trpm_script_t sysadm_passwd_t policykit_t portage_sandbox_t groupadd_t kpropd_tpasswd_t
updpwd_tchfn_t cupsd_t gssd_t httpd_t slapd_t sshd_t udev_t virtd_t puppetmaster_trestorecond_t
setfiles_tkadmind_t sulogin_t useradd_t } == || );
需要記住
- 約束是SELinux策略中完整的部分
- 當某些操作被拒絕時,即使有相應的TE規則也被拒絕。此時很有可能是約束的限制
- 約束使用白名單方法,滿足約束則被允許
參考連結
相關文章
- MySQL 中的約束及相關操作MySql
- 【SQL】15 SQL 約束(Constraints)、NOT NULL 約束、UNIQUE 約束、PRIMARY KEY 約束、FOREIGN KEY 約束、CHECK 約束、DEFAULT約束SQLAINull
- SQLite語句(一):表的操作和約束SQLite
- 約束你的git操作,讓你生無可戀。Git
- Javaweb-約束-外來鍵約束JavaWeb
- Oracle定義約束 外來鍵約束Oracle
- oracle中的約束Oracle
- Oracle - 約束、索引等相關常用操作語句Oracle索引
- SQL約束SQL
- Oracle約束Oracle
- oracle 約束Oracle
- 03約束
- 綜合約束
- MySQL 約束MySql
- (10)邏輯綜合新增約束(環境約束)
- 資料庫維護常用操作命令1--約束資料庫
- 資料庫維護常用操作命令2--約束資料庫
- 通過大容量匯入操作控制約束檢查
- 泛型的約束理解泛型
- REST 的 6 個約束REST
- oracle的延遲約束Oracle
- 約束介紹
- 差分約束
- Oracle主鍵約束、唯一鍵約束、唯一索引的區別(轉)Oracle索引
- 修改oracle的約束欄位Oracle
- Javaweb-約束的分類JavaWeb
- C# 泛型 引用型別約束 值型別約束C#泛型型別
- PostgreSQL違反唯一約束的插入操作會產品HEAP垃圾嗎?SQL
- SQLServer約束介紹SQLServer
- MySQL自增約束MySql
- MySQL 欄位約束MySql
- 約束CONSTRAINTAI
- 《學習》6約束
- sql: 查詢約束SQL
- constraint約束AI
- oracle 約束詳解Oracle
- Oracle約束簡介Oracle
- oracle鍵約束控制Oracle