我有一个脚本,它调用以下命令来获取未读消息的数量:

sudo ls /var/vmail/username/new | wc -l

这在从 shell 运行时运行良好(设置了权限并且它在不提供密码的情况下运行良好)。

但是当使用 exec 从 PHP 运行时,它按预期执行,但它总是返回 0

什么可能导致这种情况?如何调试或修复问题?

(php 5.3, redhat, apache with ~default config)

编辑

感谢 ruaks 的提示。问题是: sudo: sorry, you must have a tty to run sudo 。注释掉 /etc/sudoers 中的条目有帮助:
Defaults            requiretty
Defaults:apache     !requiretty

但看起来这对安全性不太好。还有其他更好的解决方案吗?

最佳答案

当通过 apache 执行 PHP 时,该进程由 apache 运行的任何用户拥有。请参阅:Finding out what user Apache is running as? 正如那里提到的,该用户在 sudoers 中通常存在安全风险。

关于php - 使用 php 使用 sudo 执行命令,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8581950/

10-15 12:14
查看更多