
我正在 Alma Linux 9.2 上實驗和學習 SELinux。目的是建立一個具有文件包含漏洞的 Flask 應用程序,並展示 SELinux 如何防止漏洞,以保護某些文件,即使 Flask 應用程式遭到破壞,攻擊者也無法存取這些文件。為了測試這一點,我在使用者的主目錄中建立了一個文字文件,並嘗試透過 Flask 應用程式和強制的 SELinux 來存取它。 SELinux 阻止了它。到目前為止,一切都很好。然後我嘗試/etc/passwd
透過 Flask 應用程式讀取該文件,它允許了。我不知道為什麼!我認為它/etc/passwd
足夠敏感,SELinux 可以阻止未經授權的存取。這是ls -Z
兩個文件的輸出。
system_u:object_r:passwd_file_t:s0 /etc/passwd
unconfined_u:object_r:user_home_t:s0 /home/vagrant/test.txt
我不確定這是否是有意的行為。
答案1
重複我最初的評論:
- 一般來說,
/etc/passwd
不被視為敏感。例如,應用程式需要這些資訊來查找 UID 號碼並顯示人類友善的用戶名。
第二個考慮因素:
- 除非您為自訂應用程式/守護程式建立自訂 SELinux 上下文,否則它將不會在任何特定保護/限制下運行。 (實際上只有傳統的檔案系統權限拒絕存取。)
-Z
您可以使用 中的選項檢查正在執行的守護程式的目前 SELinux 上下文ps
。您所看到的內容在一定程度上取決於您啟動守護程序的方式,但對於例子:
ps -efZ | grep mydaemon
system_u:system_r:unconfined_service_t:s0 root 4117 1 0 16:56 ? 00:00:00 /usr/local/bin/mydaemon
顯示unconfined_service_t
這意味著:沒有限制,沒有 SELinux 政策。
這紅帽 SELinux 手冊提供如何建立此類自訂 SELinux 策略的快速介紹:
- 產生自訂策略:
sepolicy generate --init /usr/local/bin/mydaemon
- 使用設定腳本使用新策略模組重建系統策略:
cd /home/example.user/mysepol ; ./mydaemon.sh
- 使用restorecon指令重新標記檔案系統的相應部分:
restorecon -v /usr/local/bin/mydaemon /usr/lib/systemd/system
- 重新啟動守護進程,並檢查它現在是否受 SELinux 限制運行
- 現在您應該會看到 SELinux 拒絕/錯誤。