在CENTOS 7上运行php shell_exec sudo

时间:2016-06-04 14:04:05

标签: php apache centos shell-exec

我在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中,我可以阅读如下:

  

Jun 4 17:45:43 anhelli sudo:apache:TTY = unknown; PWD = / var / www / html; USER = root; COMMAND = scripts / usb / hidusb-relay-cmd ID = HIUPS stat

我尝试过su-apache并运行如上所述的sudo,但它运行正常。 为什么我无法获得shell_exec的输出,任何想法?

非常感谢你的帮助。 最好的祝福 bzc0fq

1 个答案:

答案 0 :(得分:0)

最后我解决了这个问题。是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 on

问题是我必须运行命令

  

semodule -DB

在/var/log/audit/audit.log中查看隐藏的拒绝 以上对我有用。