SELinux 是否允許 apache 使用者讀取 /etc/passwd 檔案?

SELinux 是否允許 apache 使用者讀取 /etc/passwd 檔案?

我正在 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 策略的快速介紹:

  1. 產生自訂策略:
    sepolicy generate --init /usr/local/bin/mydaemon
  2. 使用設定腳本使用新策略模組重建系統策略:
    cd /home/example.user/mysepol ; ./mydaemon.sh
  3. 使用restorecon指令重新標記檔案系統的相應部分: restorecon -v /usr/local/bin/mydaemon /usr/lib/systemd/system
  4. 重新啟動守護進程,並檢查它現在是否受 SELinux 限制運行
  5. 現在您應該會看到 SELinux 拒絕/錯誤。

相關內容