我在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
答案 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中查看隐藏的拒绝 以上对我有用。