我在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/

10-11 02:50