PHP Sudo 权限仅适用于使用 exec() 时的 'ALL' 命令

PHP Sudo permissions only works for 'ALL' commands when using exec()

我需要我的 PHP 代码作为不同用户使用 exec() 编写脚本 运行,因此在 sudoers 文件中我添加了:www-data ALL=(csgo) NOPASSWD: WWW_COMMANDS 其中 WWW_COMMANDS是我需要 运行 的脚本的别名列表。虽然当我使用 su -s /bin/bash www-data 以 php 身份登录并测试它是否通过 ssh 工作时这工作正常,但当我尝试使用 exec("sudo -u csgo sh /path/to/script.sh") 在我的站点上实际发送命令并打印输出时它告诉我 sudo: no tty present and no askpass program specified 而脚本不会有 运行。我还在我的 sudoers 文件中添加了 Defaults:www-data !requiretty 但没有效果。当 运行 在我的页面上执行 exec() 时,我可以让它工作的唯一方法是设置 www-data ALL=(csgo) NOPASSWD: ALL,这显然不是一个很好的解决方案。任何人都知道为什么会发生这种情况/如何解决它。

我什至不知道脚本会 运行 没有 .或嘘。 meuh 的评论有效,在命令修复问题之前删除了 sh。