SELinux 基礎入門

第五章:Policy 與 Boolean 管理

什麼是 SELinux Boolean?

政策規則通常是寫死、編譯過的,但有些「常見的彈性需求」會被預先包成開關,叫做 Boolean,讓管理員不需要寫自訂政策就能調整行為。

查看所有 Boolean

getsebool -a               # 列出所有 boolean 與目前狀態
getsebool -a | grep httpd   # 只看跟 httpd 相關的

常見的 httpd 相關 Boolean

  • httpd_can_network_connect:允許 nginx/Apache 對外發起網路連線(例如反向代理到後端 API)
  • httpd_can_sendmail:允許 web server 寄送郵件
  • httpd_enable_homedirs:允許存取使用者家目錄下的網頁內容

開啟 / 關閉 Boolean

sudo setsebool httpd_can_network_connect on        # 暫時生效(重開機失效)
sudo setsebool -P httpd_can_network_connect on     # 永久生效(寫入政策)

-P 代表 persistent,會把設定寫進政策資料庫,重開機後仍然有效,正式環境建議都加上 -P

範例:架設反向代理

如果 nginx 設定檔裡有:

location /api/ {
    proxy_pass http://127.0.0.1:8000;
}

但 SELinux 預設不允許 httpd_t 對外發起連線,nginx 轉發請求時就會被拒絕(503 或連線失敗)。這時就需要:

sudo setsebool -P httpd_can_network_connect on

Policy 類型:targeted vs mls

  • targeted(預設):只對特定的、常見的服務(如 httpd、sshd、named 等)套用嚴格規則,其餘程序在 unconfined_t 下運作,相容性好、是大多數系統的選擇
  • mls(Multi-Level Security):軍規等級的多層級安全模型,規則嚴格、設定複雜,通常只用於有特殊合規需求的環境

小提醒

Boolean 是「政策作者預先想好的彈性開關」,能解決的是常見情境;如果遇到 Boolean 沒涵蓋的特殊需求,就需要進入下一章的疑難排解流程,自行分析並建立客製化政策。