【问题标题】:php shell_exec sudo on CENTOS 7CENTOS 7 上的 php shell_exec sudo
【发布时间】: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 中放置了类似的内容: apa​​che ALL=NOPASSWD: ALL Defaults!ALL !requiretty 它并没有改变这种情况。我仍然在 $stat 中得到 NULL
  • 我找到了一些东西。我已将 SELinux 设置为许可模式并且脚本工作正常我的意思是我得到了预期的 shell_exec 输出。我会尝试不禁用 SELinux 并找到更好的解决方案...任何想法如何进一步调查...?

标签: php apache centos shell-exec


【解决方案1】:

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

setsebool -P httpd_unified on

问题是我必须运行命令

semodule -DB

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

【讨论】:

    猜你喜欢
    • 2011-08-04
    • 2018-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-02
    • 1970-01-01
    • 2019-06-22
    • 2019-07-03
    相关资源
    最近更新 更多