我在centos 7上遇到了shell_exec和sudo的问题。
从apache执行时,以下行不提供任何输出:
$ stat = shell_exec('sudo脚本/ 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 =未知; PWD = / var / www / html; USER = root; COMMAND =脚本/ usb / hidusb-relay-cmd ID = HIUPS统计信息
我尝试了su-apache并按上述方式运行sudo,但工作正常。
为什么我不能得到shell_exec的输出,有什么想法吗?
非常感谢您的帮助。
最好的祝福
bzc0fq
最佳答案
终于我解决了这个问题。这是selinux策略阻止对hidusb-relay-cm文件的访问。解决方案是使用以下命令添加本地安全策略:
cat /var/log/audit/audit.log | grep拒绝| grep hidusb-relay-cm |
audit2allow -M hidusb-relay-cm
semodule -i hidusb-relay-cm.pp
每次运行audit2allow实用程序时,我都会更改策略名称。
我不得不运行了5次,直到所有拒绝都得到了“解决”。
我还不得不设置sebool两次:
setsebool -P httpd_mod_auth_pam
setsebool -P httpd_unified于
问题是我必须执行命令
semodule-数据库
在/var/log/audit/audit.log中查看隐藏的拒绝
以上为我工作。
关于php - CENTOS 7上的PHP shell_exec sudo,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37631151/