在Linux中,SELinux工作原理是什麼?如何啟用/禁用?

黄嘉波發表於2024-03-27

SELinux(Security-Enhanced Linux)是由美國國家安全域性(NSA)主導開發的一種強制訪問控制(MAC)安全框架,它內建於Linux核心中,為系統提供細粒度的安全策略控制。SELinux增強了傳統Linux安全模型,透過實施嚴格的訪問控制策略,阻止未經授權的程序訪問敏感資源,即使這些程序擁有超級使用者許可權(如root許可權)。

SELinux工作原理主要包括以下幾個方面:

  1. 標籤(Labeling):SELinux為系統中的所有物件(如程序、檔案、套接字等)分配一個安全上下文(Security Context),這個上下文是一個獨特的標籤,包括使用者(User)、角色(Role)、型別(Type)和類別(Category/MCS/MLS)。這些標籤用於決定程序能否訪問特定資源。

  2. 安全策略(Policy):SELinux的核心是一系列預定義的安全策略規則,這些規則決定了不同型別和角色的程序之間允許哪些操作。策略檔案描述了主體(Subject,即程序)和客體(Object,如檔案)之間的合法互動。

  3. 強制訪問控制(MAC):SELinux採用MAC機制,這是相對於傳統的自主訪問控制(DAC)而言的。在DAC中,資源的所有者可以自由地賦予其他使用者訪問許可權;而在MAC中,系統強制執行策略規定,只有符合策略規則的訪問請求才會被允許。

  4. 決策引擎:當程序嘗試訪問資源時,SELinux的決策引擎會依據當前的安全上下文和安全策略評估這次訪問是否合法。如果不合法,訪問將被拒絕。

啟用/禁用SELinux

  • 臨時禁用(僅影響當前會話,重啟後恢復原有設定):
    在執行時臨時關閉SELinux,可以改變核心的 SELinux 狀態標記為寬容模式(Permissive Mode),在這種模式下,SELinux策略不會阻止任何操作,但會記錄違規事件到日誌中:

    sudo setenforce 0
    

    若要臨時啟用(Enforcing Mode):

    sudo setenforce 1
    
  • 永久禁用(影響系統重啟後的設定):
    要永久禁用SELinux,需要修改配置檔案 /etc/selinux/config。開啟檔案並更改如下行:

    從:

    SELINUX=enforcing
    

    更改為:

    SELINUX=disabled
    

    儲存更改後,需要重啟系統以使配置生效。

  • 永久啟用並設定為寬容模式
    若要永久啟用SELinux但設定為寬容模式,修改 /etc/selinux/config 中的相應行:

    從:

    SELINUX=enforcing
    

    SELINUX=disabled
    

    更改為:

    SELINUX=permissive
    

綜上所述:除非特殊情況,一般不建議禁用SELinux,因為它有助於增強系統的整體安全性。在遇到SELinux相關問題時,通常應該嘗試修復策略而不是禁用SELinux。如果確實需要調整策略,可以使用工具如semanage、audit2allow等來幫助生成和管理SELinux策略模組。

相關文章