10

我有一个运行 Apache 2.2 和 PHP 5.3 的 CentOS 6.2 虚拟机,我试图通过 PHP 的 mail() 函数发送电子邮件。我可以毫无问题地从 CLI 发送电子邮件,但是当 PHP 尝试时它会失败。在 sendmail 日志中如下:

Oct  9 11:42:03 localhost sendmail[3080]: NOQUEUE: SYSERR(apache): can not chdir(/var/spool/clientmqueue/): Permission denied

似乎 Apache 没有这样做的权限,但我不知道如何修复它。我发现了很多关于此的讨论,但没有足够具体到我可以使用的我正在做的事情。任何帮助,将不胜感激。谢谢!

4

5 回答 5

31

Selinux 可能会导致问题,验证运行:

getsebool -a | grep mail

如果显示如下,则为 selinux:

allow_postfix_local_write_mail_spool --> off

你可以禁用它,但如果你想保留它(你应该这样做,因为它提供了额外的安全层)你应该做其他事情:

setsebool -P httpd_can_sendmail on

这将允许 httpd 发送电子邮件,就像您使用 php mail() 时一样。

于 2012-11-20T10:54:13.267 回答
12

讨厌死掉这个,但这里没有一个解决方案对我有用。我对 SELinux 知之甚少,但我最终发现了这个问题(在 CentOS 6 上):

getsebool httpd_can_sendmail

这告诉我它已禁用。固定与

setsebool httpd_can_sendmail 1
于 2013-11-25T17:28:18.737 回答
4

首先,您必须检查权限是否正确。这是我系统中的以下权限

# ls -l /usr/sbin/sendmail.sendmail -r-xr-sr-x root smmsp /usr/sbin/sendmail.sendmail

# ls -l /var/spool/clientmqueue drwxrwx--- smmsp smmsp /var/spool/clientmqueue

如果您的权限或所有权错误,请使用 chown 和 chmod 进行更改。

如果上述正确,则禁用 selinux,或者如果您希望启用 selinux,请使用 chcon 设置正确的 selinux 上下文。

http://docs.fedoraproject.org/en-US/Fedora/13/html/Security-Enhanced_Linux/sect-Security-Enhanced_Linux-Working_with_SELinux-SELinux_Contexts_Labeling_Files.html

用于暂时禁用 selinux#setenforce 0

于 2012-10-09T17:49:27.793 回答
1

您可能启用了 SELinux。

http://selinuxproject.org/page/Main_Page

您可以通过以下方式检查 SELinux 状态:

状态

您应该会看到如下内容:

SELinux status:                 enabled
SELinuxfs mount:                /selinux
Current mode:                   enforcing
Mode from config file:          enforcing
Policy version:                 24
Policy from config file:        targeted

您可以通过以下方式暂时关闭 SELinux:

echo 0 >/selinux/enforce

然后重新开始

echo 1 >/selinux/enforce

如果你做温度。关闭它,不要安装 RPM 或进行更改。我发现这可能会导致重新启用它时出现问题。

如果您想永久禁用 SELinux,请尝试:

https://access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Security-Enhanced_Linux/sect-Security-Enhanced_Linux-Working_with_SELinux-Enabling_and_Disabling_SELinux.html

于 2012-10-09T17:26:30.177 回答
0
getsebool -a | grep mail
allow_postfix_local_write_mail_spool --> off
setsebool -P httpd_can_sendmail on

这个命令对我有用。

于 2018-03-15T13:28:02.030 回答