【发布时间】:2016-10-04 12:14:38
【问题描述】:
我在 centos 7 上遇到了 shell_exec 和 sudo 的问题。 从 apache 执行时,以下行没有输出:
$stat = shell_exec('sudo scripts/usb/hidusb-relay-cmd ID=HIUPS stat');
var_dump($stat);给出NULL
我使用 visudo 添加了以下几行:
apache ALL=NOPASSWD: /var/www/html/scripts/usb/hidusb-relay-cmd
默认值!/var/www/html/scripts/usb/hidusb-relay-cmd !requiretty
在 /var/log/secure 我可以阅读如下:
6 月 4 日 17:45:43 anhelli sudo: apache : TTY=unknown ;密码=/var/www/html ;用户=根; COMMAND=scripts/usb/hidusb-relay-cmd ID=HIUPS stat
我尝试了 su - apache 并像上面一样运行 sudo,但它工作正常。 为什么我不能得到 shell_exec 的输出,有什么想法吗?
非常感谢您的帮助。 最好的祝福 bzc0fq
【问题讨论】:
-
scripts/usb/hidusb-relay-cmd ID=HIUPS stat这在普通命令行中有效吗? -
是的,它在以 root 身份运行时工作正常。它也可以从 apache 用户命令行作为 sudo 工作。我还尝试更改 /etc/sudoers 以便它为 apache 用户运行的所有文件提供 sudo privs 但它没有帮助。
-
你试过做'ps aux | grep Apache' 以确保它作为 Apache 运行并且不会放弃特权?
-
我做了其他事情,我把 ls -al 放入 shell_exec 并且工作正常。然后我像这样添加了 sudo: $stat = shell_exec('sudo ls -al');我在 $stat 中一无所获......与以前使用 hidusb 命令的情况相同。我不确定我是否正确设置了 sudo 权限...我在 /etc/sudoers 中放置了类似的内容: apache ALL=NOPASSWD: ALL Defaults!ALL !requiretty 它并没有改变这种情况。我仍然在 $stat 中得到 NULL
-
我找到了一些东西。我已将 SELinux 设置为许可模式并且脚本工作正常我的意思是我得到了预期的 shell_exec 输出。我会尝试不禁用 SELinux 并找到更好的解决方案...任何想法如何进一步调查...?
标签: php apache centos shell-exec