【问题标题】:PHP shell_exec does not work for some commands?PHP shell_exec 不适用于某些命令?
【发布时间】:2018-03-31 13:49:46
【问题描述】:

如果我执行以下命令,我会得到一个“嘿”输出:

echo shell_exec("echo 'hey'");

但是如果我执行以下命令,它不会杀死任何screen

echo shell_exec("killall screen");

如果我这样做了

echo shell_exec("sh /var/www/html/run.sh");

它根本不会运行那个文件(那个文件也会杀屏)

如果我什至使用 get 内容获取该文件,它会成功读取其中的内容。

如果它可以执行echo那有什么问题?

【问题讨论】:

  • 可能是权限问题。 killall 通常需要 su/sudo 权限,如果不是你自己的进程。
  • 很可能运行您网站的用户没有执行kill 和类似命令的权限。
  • 是在 PHP 方面还是在服务器方面授予权限?
  • 这种类型的保护有充分的理由......试着想象让任何用户在共享主机环境中运行任何命令将是多么灾难性:“今天我想休息一下。 .." shell_exec("poweroff") ;)
  • @Mikk3lRo 我知道这很冒险,但我想知道如何将某些命令列入白名单

标签: php shell


【解决方案1】:

要运行如此强大的命令,我必须使用this library,如this question 中所述。这允许我以 root 访问权限登录 SSH 并执行任何命令!

function ssh_script($script, $ip, $user, $pass) {
            $ssh = new Net_SSH2($ip);
    if (!$ssh->login($user, $pass)) {
        exit('Login Failed');
    }

    if ($ssh !== false) {
        echo $ssh->exec("sh " . $script);
    }
    else {
        echo "fail";
    }
}

【讨论】:

    猜你喜欢
    • 2012-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    相关资源
    最近更新 更多