Postfix

Altermime 和 SELINUX

  • March 20, 2019

我已經為 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。

希望這對其他人有幫助。

謝謝布拉德

引用自:https://unix.stackexchange.com/questions/152600