我有一个脚本,它调用以下命令来获取未读消息的数量:
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/