我的系統環境是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-fpm
Apache 的mod_php
.由於您使用的是 CentOS 7.9,因此它適用。
您可以在 Red Hat 的 Bugzilla 上閱讀有關該問題的更多資訊:http://bugzilla.redhat.com/show_bug.cgi?id=1754622
至於您的問題的解決方案,第一個也是最明顯的一個是停用 SELinux,但作為第二個選擇,我建議以下方法:
- 安裝包
policycoreutils-python
- 使用
audit2why
和audit2allow
建立自訂規則以php-fpm
啟用 SELinux。 tail -f
並/var/log/audit/audit.log
嘗試從 發送郵件httpd
。獲取輸出並通過audit2why
和為其播種audit2allow
。這是不言自明的。- 應用兩個程序建議的規則。
如果您不想制定特定於該機器的自訂規則,第三種解決方案是將httpd_t
or system_mail_t
(取決於 的輸出)置於寬鬆模式。audit2allow
但請記住,這樣做將在整個上下文中停用 SELinux。
這可以透過以下命令來完成:semanage permissive -a httpd_t
或semanage 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