【问题标题】:Bash cgi script sending email as apache@ user and ignoring mail command parametersBash cgi 脚本以 apache@ 用户身份发送电子邮件并忽略邮件命令参数
【发布时间】: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

标签: bash apache centos cgi


【解决方案1】:

所以我设法满足了我的要求,但最后我不得不放弃 bash 并改用 perl。这令人沮丧,因为 bash 脚本唯一不会做的就是发送电子邮件。 perl 脚本具有所有相同的用户权限,并且可以正常工作。 感谢 Nicholas 的建议。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多