查看檔案的 Context
在指令後面加上 -Z,就能看到 SELinux context:
ls -Z 檔案或目錄
輸出範例:
system_u:object_r:httpd_sys_content_t:s0 index.html
Context 的四個欄位
使用者:角色:類型:等級
- SELinux User(如
system_u、unconfined_u):對應系統帳號的角色分類,與一般 Linux 使用者帳號是不同層級的概念 - Role(如
object_r):檔案類物件通常都是object_r - Type(如
httpd_sys_content_t):最關鍵的欄位,政策規則幾乎都是針對 type 撰寫 - Level(如
s0或s0: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 -Z、ps -Z、id -Z 是觀察 SELinux 現況最基本的三個指令,遇到任何「權限」問題時,養成先查看 context 的習慣,往往能很快縮小問題範圍。