【发布时间】:2021-05-31 13:37:00
【问题描述】:
我正在使用 Centos 7、Apache 2.4.6、Postfix 2.10.1
我在 cgi-bin 中有一个 bash 脚本,它使用以下语法发送电子邮件:
echo -e "身体" | mail -s "主题" "myemailaddress@hotmail.com"
如果我在命令行上执行此操作,那么它会按预期工作并发送电子邮件。
但是,如果我通过 cgi-bin 目录从网页启动相同的脚本行,则 cgi 脚本不会引发错误,但我会收到一封来自 apache@mydomain.com 的电子邮件,其主题和正文为空。
我已设置脚本的执行权限。
我已经修改了 selinux 设置 httpd_can_sendmail。
有人知道为什么会这样吗?
【问题讨论】:
-
尝试以与您的 Web 服务器相同的用户(可能是 Apache 用户)运行脚本。看看您是否收到更多错误消息。另外,尝试将标准错误重定向到标准输出,看看是否可以为您提供更多信息(将 2>&1 放在末尾)。
-
感谢 Nicholas 的及时回复。我试过命令 sudo -u apache echo -e "Body" | mail -s "subject" "myemailaddress@hotmail.com" 效果很好。尽管我确实相信它以 apache 用户身份运行命令,因为我正在使用文本文件进行调试,并且该文件归 apache 所有。我尝试将标准错误重定向到标准输出,但没有出现其他错误消息。
-
如果它通过 sudo - u 工作,那么我怀疑问题出在您的环境中,因为您自己正在被延续。如果你做 su - apache 并尝试它(su - 意思是加载 apache 的环境而不是你自己的),那会破坏它吗?如果它是我的机器/脚本,我会做的其他事情:尝试不同的邮件程序(例如 mailx 或 nail),设置返回地址(-r),尝试以不同的用户身份运行它。另外,仅供参考,您可能有安全漏洞。它是 SQL 注入的一种变体。想想如果 body 在里面设置了双引号会发生什么:test";cat /etc/passwd