【问题标题】:PHP exec, running shell command problems (using archlinux)PHP exec,运行shell命令问题(使用archlinux)
【发布时间】:2014-11-17 17:53:06
【问题描述】:

我正在使用 Archlinux,我想运行以下脚本(实际上是最后一行):

<?php
var_dump(get_current_user());
var_dump(exec("whoami"));
var_dump(exec("sudo echo 1 > /sys/class/gpio/gpio44/value"));

该脚本具有以下权限(我在最后一行尝试了使用和不使用 sudo)

-rwxr-xr-x 1 http http  126 Nov 17 17:24 turn_on.php

并且http 被添加到\etc\sudoers 并具有ALL 权限

http ALL=(ALL) ALL

在浏览器中打开turn_on.php脚本的结果是:

string(4) "http" string(4) "http" string(0) ""

脚本没有做它应该做的事情(最后一行),并且在 apache 日志中,每次我重新加载浏览器时都会得到:

sh: /sys/class/gpio/gpio44/value: Permission denied

这是我第一次处理我想做的事情,我正在考虑制作更多“PHP Web 服务 API 风格”的东西。任何建议都非常感谢。 干杯。-

【问题讨论】:

    标签: php apache shell exec archlinux


    【解决方案1】:

    您需要检查 /sys/class/gpio/gpio44/value 的权限,因为这是产生权限错误的原因。

    另外,尝试从命令行使用 sudo 来模仿脚本的功能:

    sudo -u http echo 1 > /sys/class/gpio/gpio44/value
    

    如果这失败了,那么你只需要修改你的权限,直到它正常工作,然后从浏览器重试。

    如果上述方法有效,但在浏览器中仍然失败,那么很可能您的脚本的执行实际上并未使用 http 用户。

    【讨论】:

    • 你这个摇滚人,我没想到文件本身 DOH!你有什么想法让它更安全吗?谢谢
    • 在不了解您的全部目标的情况下评论安全性有点困难。一般来说,exec 被认为是一种“危险”的 php 方法,但它实际上取决于你用它做什么。让 exec 超级危险的是,如果您允许最终用户输入使其成为 exec 的信息,例如: exec($_GET['param']);只要你不这样做,那么你应该没问题。如果您需要在 exec 中包含任何用户提交的数据,请查看 PHP 的 escapeshellarg() 函数。
    猜你喜欢
    • 2015-05-24
    • 2015-10-02
    • 1970-01-01
    • 2011-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多