我有一个 CentOS 7 系统,我在其中使用 postfix 作为 MTA。某些用户.forward
在他们的主目录中使用 procmail via:
# cat .forward
"|exec /usr/bin/procmail -f- || exit 75"
在这种情况下,我很难弄清楚为什么 SELinux 不允许 procmail 从以下位置执行 dspam .procmailrc
:
:0fw: dspam.lock
| /usr/bin/dspam --client --stdout --deliver=spam,innocent
在 procmail 日志中,我得到:
procmail: Locking "dspam.lock"
procmail: Executing "/usr/bin/dspam,--client,--stdout,--deliver=spam,innocent"
/bin/sh: /usr/bin/dspam: Permission denied
procmail: Program failure (126) of "/usr/bin/dspam"
procmail: Rescue of unfiltered data succeeded
procmail: Unlocking "dspam.lock"
但是,如果我将 SELinux 设置为宽容模式,它就可以正常工作。
问题是它没有记录任何关于被拒绝内容的 AVC 消息。当我第一次设置时,我发现了一些差距audit2why
并ausearch
修复了它们。现在我什么也得不到,即使它显然是 SELinux 阻止它工作。
编辑:这是 dspam 二进制文件:
# ls -lZ /usr/bin/dspam
-r-x--s--x. dspam mail system_u:object_r:dspam_exec_t:s0 /usr/bin/dspam
我有一个非常相似的问题。在我的例子中,selinux 悄悄地阻止了我的 .procmailbin 文件夹中的代码执行(我已经将 .procmailbin 的默认上下文设置为 procmail_exec_t)。
我还没有完全解决这个问题,但我相信答案的路径是指示 selinux 报告所有拒绝,默认情况下它不会这样做。
要启用所有拒绝的完整报告,请使用以下命令:
查看 audit.log 并酌情使用 sealert 来确定发生了什么。
然后在完成使用后恢复正常:
祝你好运!就我而言,我正处于 sealert 阶段,向我展示了之前未出现过的信息:
...但我仍然需要审查这是否是实际问题以及最佳解决方案是什么。
更新:所以,事实证明这为我解决了这个问题。
以下是我构建的自定义模块的内容:
在我看来,这应该是默认行为,所以我想我会看看是否可以找出向谁报告此“错误”的人。
因此,在查看了 Chris Bennett 的回答后,我使用
semodule --disable_dontaudit
了并且能够弄清楚我需要什么。这是我最终使 postfix+procmail+dspam 工作的结果: