Sendmail-8.12+ 安装:文件权限

Sendmail-8.12+ 安装:文件权限

我的 centos 服务器可以使用“mail”命令发送邮件,但不能通过 php 发送。Maillog 说:

sendmail[18010]: NOQUEUE: SYSERR(nginx): can not chdir(/var/spool/clientmqueue/): Permission denied

我的权限如下:

lrwxrwxrwx 1 nginx nginx 30 Oct 30 20:27 /usr/lib/sendmail -> /etc/alternatives/mta-sendmail 
lrwxrwxrwx 1 nginx nginx 21 Oct 30 20:27 /usr/sbin/sendmail -> /etc/alternatives/mta

lrwxrwxrwx 1 nginx nginx 27 Oct 30  2012 /etc/alternatives/mta -> /usr/sbin/sendmail.sendmail
lrwxrwxrwx 1 nginx nginx 26 Oct 30  2012 /etc/alternatives/mta-sendmail -> /usr/lib/sendmail.sendmail

lrwxrwxrwx 1 nginx nginx     16 Oct 30  2012 /usr/lib/sendmail.sendmail -> ../sbin/sendmail
-rwxr-xr-x 1 root  smmsp 775064 Aug 11  2011 /usr/sbin/sendmail.sendmail

这些链接有什么用途?

答案1

Sendmail-8.12+ 安装:文件权限

Sendmail-8.12+ 二进制文件应按设置安装团体id.
(在您的情况下为 /usr/sbin/sendmail.sendmail)

它描述于SECURITYsendmail(.org) 分发中的文件:

-r-xr-sr-x  root   smmsp    ... /PATH/TO/sendmail
drwxrwx---  smmsp  smmsp    ... /var/spool/clientmqueue

答案2

还有一个名为 httpd_can_sendmail 的 SELINUX 布尔策略....我很确定它也必须设置为 true。

答案3

如果您继承了一个系统,并且想要将 /var/spool/mqueue 的位置更改为其他位置,并且当您修改 sendmail.mc 并重新制作 sendmail.cf 或编辑 sendmail.cf 目录时,您启动 sendmail 时它会抱怨“权限被拒绝”,并且以上方法都无济于事——请尝试此方法。即使您已完全禁用 SELINUX 等。

多年来,我已经在众多系统上尝试过上述所有建议,但无论用户是什么、sendmail 上的 setgid 是什么,或者任何目录上的权限和所有权信息是什么,我仍然会收到错误。在每种情况下,我都发现这是与现有安装的 sendmail 版本有关的问题。即使它是最新版本。在每一个在这种情况下,我能够通过以下方式克服该问题:

  1. 如果您不从 mc 文件构建,请备份 sendmail.mc 或 sendmail.cf
  2. 备份别名、virtusertable 等...全部备份,因为有时重新安装会覆盖它们(通常会保存它们,但是...)
  3. 卸载 sendmail (例如,“yum remove sendmail -y”或“apt remove sendmail -y”)
  4. 重新安装 sendmail(例如,“yum install sendmail sendmail-cf -y”或“apt install sendmail sendmail-cf -y”

重新安装似乎可以解决问题。

您可能需要使用更改后的 QUEUEDIR 来更新 /etc/sysconfig/sendmail 中的 sendmail.cf 文件的位置,然后可能运行“journalctl daemon-reload”来修复该问题,这样它就可以正常工作了。

这是 sendmail 的 OEM 安装版本存在的一些问题,例如缺少用户/组 smmsp 等......但这是在现代 Linux 安装中解决此问题的最简单方法。

相关内容