SELinux - 阻止從 Web 應用程式發送的 postfix 電子郵件

SELinux - 阻止從 Web 應用程式發送的 postfix 電子郵件

我的系統環境是Centos-7.9、Apache2.4、Php-fpm、PHP-7.4

我有 postfix 設定來從網站發送電子郵件,該網站在獨立測試電子郵件中以及當我關閉 SELinux 時工作。

但是,如果啟用了 SELinux,它將阻止從伺服器發送電子郵件,並出現以下錯誤 /var/log/郵件日誌

 postfix/sendmail[10883]: fatal: execv /usr/libexec/postfix/smtpd: Permission denied

當我做

  sudo setenforce 0

它發送電子郵件,但是,我不想關閉 SELinux,但我想允許我的 Web 應用程式將發送電子郵件列入白名單。我在下面嘗試過,但沒有成功

sudo setsebool -P httpd_can_sendmail 1

關於如何解決這個問題有什麼想法嗎?

答案1

這是 RHEL 7.7 及更高版本使用php-fpmApache 的mod_php.由於您使用的是 CentOS 7.9,因此它適用。

您可以在 Red Hat 的 Bugzilla 上閱讀有關該問題的更多資訊:http://bugzilla.redhat.com/show_bug.cgi?id=1754622

至於您的問題的解決方案,第一個也是最明顯的一個是停用 SELinux,但作為第二個選擇,我建議以下方法:

  1. 安裝包policycoreutils-python
  2. 使用audit2whyaudit2allow建立自訂規則以php-fpm啟用 SELinux。
  3. tail -f/var/log/audit/audit.log嘗試從 發送郵件httpd。獲取輸出並通過audit2why和為其播種audit2allow。這是不言自明的。
  4. 應用兩個程序建議的規則。

如果您不想制定特定於該機器的自訂規則,第三種解決方案是將httpd_tor system_mail_t(取決於 的輸出)置於寬鬆模式。audit2allow但請記住,這樣做將在整個上下文中停用 SELinux。

這可以透過以下命令來完成:semanage permissive -a httpd_tsemanage permissive -a system_mail_t。要撤消更改,只需更改-a-d.

答案2

我在這裡要做的是

將 SELinux 置於寬容模式

setenforce 0

輪換auditd日誌,這樣我就可以得到一份乾淨的AVC拒絕列表

kill -USR1 $(cat /run/auditd.pid) 

原因 發生問題並產生審核訊息

建立本地策略模組

grep denied /var/log/audit/audit.log | audit2allow -m mypolicy >mypolicy.te 

檢查生成的策略文件是否像我期望的那樣,並且沒有“洩露”我不想要的東西,並根據需要進行編輯。

建立並安裝策略

checkmodule -M -m -o mypolicy.mod mypolicy.te
semodule_package -o mypolicy.pp -m mypolicy.mod
semodule -i mypolicy.pp 

您可能會發現,將所有 AVC 拒絕放入單獨的檔案中,然後在對檔案使用audit2alow 之前刪除與您要解決的問題無關的檔案會更容易。如果這對您來說效果更好,您可以跳過中間步驟並直接轉到 .pp 文件

cat myavcs.log | audit2allow -M mypolicy

相關內容