SELinux - 阻止从 Web 应用程序发送的 Postfix 电子邮件

SELinux - 阻止从 Web 应用程序发送的 Postfix 电子邮件

我的系统环境是Centos-7.9,Apache2.4,Php-fpm,PHP-7.4

我已经设置了 postfix 来从网站发送电子邮件,它在独立测试电子邮件中工作,并且当我关闭 SELinux 时也是如此。

然而,如果启用了 SELinux,它将阻止从服务器发送电子邮件,并出现以下错误 /var/log/邮件日志

 postfix/sendmail[10883]: fatal: execv /usr/libexec/postfix/smtpd: Permission denied

当我做

  sudo setenforce 0

它会发送电子邮件,但我不想关闭 SELinux,但我想允许我的 Web 应用程序将发送电子邮件列入白名单。我尝试了以下方法,但没有成功

sudo setsebool -P httpd_can_sendmail 1

关于如何解决这个问题您有什么想法吗?

答案1

这是 RHEL 7.7 中的一个已知错误,在使用时会出错,php-fpm而不是 Apache 的mod_php。由于您使用的是 CentOS 7.9,因此它适用。

您可以在 Red Hat 的 Bugzilla 上阅读有关此问题的更多信息:http://bugzilla.redhat.com/show_bug.cgi?id=1754622

至于解决您的问题的方法,第一个也是最明显的方法是禁用 SELinux,但作为第二种选择,我建议执行以下操作:

  1. 安装包policycoreutils-python
  2. 使用audit2whyaudit2allow创建自定义规则以便与php-fpm启用 SELinux 一起工作。
  3. tail -f/var/log/audit/audit.log尝试从 发送邮件消息httpd。获取输出并通过audit2why和进行播种audit2allow。这将是不言自明的。
  4. 应用两个程序建议的规则。

如果您不想制定特定于此机器的自定义规则,第三个解决方案是将httpd_tsystem_mail_t(取决于 的输出)置于宽容模式。但请记住,这样做会禁用整个上下文的 SELinux。audit2allow

可以使用以下命令完成:semanage permissive -a httpd_tsemanage permissive -a system_mail_t。要撤消更改,只需更改-a-d

答案2

我在这里要做的是

将 SELinux 置于宽容模式

setenforce 0

轮换审计日志,以便获得一份更干净的 AVC 拒绝列表

kill -USR1 $(cat /run/auditd.pid) 

导致问题发生并生成审计消息

创建本地策略模块

grep denied /var/log/audit/audit.log | audit2allow -m mypolicy >mypolicy.te 

检查生成的策略文件是否符合我的预期,并且不会“泄露”我不想要的东西,并根据需要进行编辑。

创建并安装策略

checkmodule -M -m -o mypolicy.mod mypolicy.te
semodule_package -o mypolicy.pp -m mypolicy.mod
semodule -i mypolicy.pp 

您可能会发现,将所有 AVC 拒绝放入单独的文件中,然后删除与您尝试解决的问题无关的拒绝,然后再对文件使用 audit2alow,这样会更容易。如果这种方法对您更有效,您可以跳过中间步骤,直接转到 .pp 文件

cat myavcs.log | audit2allow -M mypolicy

相关内容