Linux Context(安全上下文)是SELinux(Security-Enhanced Linux)實現強制訪問控制(MAC)的核心標識機制,兩者通過“標簽-策略”的聯動,為Linux系統提供比傳統自主訪問控制(DAC)更細粒度的安全防護。
SELinux通過為系統中的進程、文件、端口等資源分配唯一的“安全上下文”(Security Context),實現對資源的分類與識別。安全上下文是一個結構化的標簽,通常包含四個字段(格式:user:role:type:level),其中:
unconfined_u代表普通用戶,root代表系統root用戶),用于標識資源的創建者或所屬主體;object_r用于文件/目錄,system_r用于進程),是連接用戶與類型的橋梁;httpd_sys_content_t代表httpd服務可訪問的網頁文件,httpd_t代表httpd進程的域),是SELinux“類型強制”(Type Enforcement)的關鍵;s0:c123代表特定類別)。通過安全上下文,SELinux能精準識別“誰(進程)可以訪問什么(資源)”。
SELinux的訪問控制邏輯基于“主體-客體”模型:
httpd服務進程),其安全上下文中的domain(域)代表進程的運行環境;/var/www/html/index.html文件),其安全上下文中的type(類型)代表資源的類別。當進程嘗試訪問資源時,SELinux會檢查兩者的安全上下文是否符合策略規則(Policy Rules)。例如,若策略中存在allow httpd_t httpd_sys_content_t:file { read write };規則,且進程的domain為httpd_t、資源的type為httpd_sys_content_t,則允許訪問;否則,即使文件系統權限(如rwx)允許,訪問也會被拒絕。
SELinux的安全策略(如targeted策略,默認覆蓋大部分服務)通過“allow/deny”規則定義了域與類型之間的訪問權限。這些規則的執行完全依賴安全上下文的匹配:
例如,httpd_t域的進程默認只能訪問httpd_sys_content_t類型的文件(如網頁內容),若將某個腳本文件的類型改為httpd_sys_script_exec_t(可執行腳本類型),則httpd_t進程才能執行該腳本。這種機制徹底避免了傳統DAC中“root用戶權限過高”的問題——即使root啟動的進程,若其域不符合策略,也無法訪問未授權的資源。
SELinux提供了豐富的命令來管理安全上下文,確保其符合安全策略:
ls -Z(查看文件/目錄的上下文)、ps -Z(查看進程的上下文);chcon(臨時修改,如chcon -t httpd_sys_content_t /var/www/html/test.html)、restorecon(恢復默認上下文,如restorecon -Rv /var/www/html,基于/etc/selinux/targeted/contexts/files/file_contexts中的策略);semanage fcontext(添加自定義上下文規則,如semanage fcontext -a -t httpd_sys_content_t "/data/web(/.*)?",再通過restorecon應用)。這些命令的核心目的是確保資源的上下文與SELinux策略一致,從而實現“最小權限”的安全目標。
綜上,Linux Context是SELinux實現強制訪問控制的“語言”,而SELinux是解讀這種語言的“引擎”——通過安全上下文的標識與策略的匹配,SELinux為Linux系統構建了多層安全防線,彌補了傳統DAC的不足。