Altermime 和 SELINUX
我已經為 postfix(SMTP 伺服器)設置了一個名為 altermime ( http://www.pldaniels.com/altermime/ ) 的應用程序,它可以在中途更改電子郵件。出於垃圾郵件的原因,我在從我們的伺服器發送的每封電子郵件中都注入了一個“X-ListUnsubscribe”標頭。
Altermime 需要能夠寫入 /var/spool/filter(通常我認為 postfix 寫入 /var/spool/postfix)。無論如何,這一切都可以在禁用 SELinux 的情況下正常工作,但啟用它會中斷。
儘管簡單地關閉 SELinux 並完成它可能很誘人,但我寧願不要以這種方式損害我的機器的安全性。所以我試圖修改 SELinux 以允許寫入 /var/spool/filter 。
我試過了:
cat /var/log/audit/audit.log | audit2why
這向我展示了例外情況(我將在下麵包括它們)。
我已經多次這樣做了:
audit2allow -M altermime < /var/log/audit/audit.log semodule -i altermime.pp
但是,這似乎不起作用。我假設這可能是因為 audit2allow 正在命名被阻止的單個文件(/var/spool/filter/xxxx)與整個目錄(/var/spool/filter/*)。我不知道如何創建策略或更改 SELinux 以允許訪問。
這是我的audit2why的摘錄:
type=AVC msg=audit(1409231063.712:263024): avc: denied { add_name } for pid=21280 comm="disclaimer" name="in.21279" scontext=unconfined_u:system_r:postfix_pipe_t:s0 tcontext=unconfined_u:object_r:var_spool_t:s0 tclass=dir Was caused by: Missing type enforcement (TE) allow rule. You can use audit2allow to generate a loadable module to allow this access. type=AVC msg=audit(1409231065.905:263025): avc: denied { add_name } for pid=21285 comm="disclaimer" name="in.21284" scontext=unconfined_u:system_r:postfix_pipe_t:s0 tcontext=unconfined_u:object_r:var_spool_t:s0 tclass=dir Was caused by: Missing type enforcement (TE) allow rule. You can use audit2allow to generate a loadable module to allow this access. type=AVC msg=audit(1409231067.380:263026): avc: denied { add_name } for pid=21289 comm="disclaimer" name="in.21288" scontext=unconfined_u:system_r:postfix_pipe_t:s0 tcontext=unconfined_u:object_r:var_spool_t:s0 tclass=dir Was caused by: Missing type enforcement (TE) allow rule. You can use audit2allow to generate a loadable module to allow this access.
我要回答我自己的問題。首先,我做了以下事情:
semodule -l | grep mymodulename
(將 mymodulename 替換為您之前可能已導入的任何模組)。如果您之前沒有導入任何模組,請跳過此步驟。
然後執行此命令以刪除任何以前導入的模組。如果您尚未導入任何以前的模組,請再次跳過此步驟。
semodule -r names_of_modules_returned_from_prior_command
我們現在應該回到“乾淨”的狀態。
接下來執行以下命令將 selinux 設置為允許(監控/記錄但不阻止):
setenforce 0
執行 getenforce 並確保它返回:permissive
執行以下命令清除 SELinux 日誌:
echo "" >/var/log/audit.log
等待至少 15-20 分鐘,讓 selinux 在 /var/log/audit/audit.log 中創建新的日誌條目
然後執行以下命令來創建一個全面的 selinux 策略:
cat /var/log/audit/audit.log | audit2allow -m yourname >yourname.te
然後執行以下命令,我相信它會檢查 .te 文件並創建一個 .mod 文件(?)
checkmodule -M -m -o yourname.mod yourname.te
接下來使用以下命令將 .mod 文件編譯成二進制 .pp 文件:
semodule_package -m yourname.mod -o yourname.pp
最後安裝模組:
semodule -i yourname.pp
監視 /var/log/audit/audit.log 一段時間並確保沒有新條目出現。
cat /var/log/audit/audit.log | audit2why
如果沒有出現新條目,則將 selinux 設置為強制執行:
setenforce 1
這似乎對我有用。它可能比需要的要寬鬆一些,但至少我沒有完全關閉 SELinux。
希望這對其他人有幫助。
謝謝布拉德