SELinux 基礎入門

第三章:基本操作指令

查看檔案的 Context

在指令後面加上 -Z,就能看到 SELinux context:

ls -Z 檔案或目錄

輸出範例:

system_u:object_r:httpd_sys_content_t:s0 index.html

Context 的四個欄位

使用者:角色:類型:等級

  • SELinux User(如 system_uunconfined_u):對應系統帳號的角色分類,與一般 Linux 使用者帳號是不同層級的概念
  • Role(如 object_r):檔案類物件通常都是 object_r
  • Type(如 httpd_sys_content_t):最關鍵的欄位,政策規則幾乎都是針對 type 撰寫
  • Level(如 s0s0:c52,c144):MCS/MLS 等級與分類,常用於容器之間的隔離

查看程序的 Context

ps -eZ | grep nginx

可以看到 nginx 的程序 context,例如 system_u:system_r:httpd_t:s0。Type Enforcement 的核心邏輯就是:「httpd_t 這個 type 的程序,可以對 httpd_sys_content_t 這個 type 的檔案做讀取操作」。

查看自己的 Context

id -Z

查看連接埠的 Context

SELinux 也會管理網路連接埠:

semanage port -l | grep http

這就是為什麼 nginx 預設可以監聽 80、443,但如果你想讓它監聽一個非標準連接埠(例如 8888),可能需要額外設定 SELinux 政策(後面章節會介紹)。

小結

ls -Zps -Zid -Z 是觀察 SELinux 現況最基本的三個指令,遇到任何「權限」問題時,養成先查看 context 的習慣,往往能很快縮小問題範圍。