Altimeme 和 SELINUX

Altimeme 和 SELINUX

我已经设置了一个名为 altermime 的应用程序(http://www.pldaniels.com/altermime/)用于 postfix(SMTP 服务器),它会在中途更改电子邮件。出于垃圾邮件原因,我将“X-ListUnsubscribe”标头注入到从我们的服务器发送的每封电子邮件中。

Altimeme 需要能够写入 /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 以允许访问。

以下是我的审核2why 的摘录:

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.

答案1

我要回答我自己的问题。首先我做了以下事情:

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。

希望这对其他人有帮助。

谢谢布拉德

相关内容