![Altimeme 和 SELINUX](https://linux22.com/image/54840/Altimeme%20%E5%92%8C%20SELINUX.png)
我已经设置了一个名为 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。
希望这对其他人有帮助。
谢谢布拉德