8

我想用 shell_exec 以 root 身份执行命令。现在我知道这很危险,但请相信我,您需要使用 MOD_AUTH 登录并拥有访问此页面的正确权限。它是安全的。我怎样才能完成这项工作?

4

6 回答 6

14

问题不在于您的页面是否安全,问题在于让 php 页面能够运行一些 sudo 命令会将其提供给所有页面,包括服务器上任何站点上任何不安全页面上的任何注入代码.

也就是说,最好制作一个包装脚本,只做需要做的一项工作,然后让 http 用户以 sudo 的身份访问该 ONE 命令

http  ALL=(ALL) NOPASSWD:/user/local/bin/your_wrapper_script.sh
于 2011-04-13T17:17:02.950 回答
13

您可以使用最新的 SVN 版本的phpseclib(纯 PHP SSH 实现)来执行此操作。例如。

<?php
include('Net/SSH2.php');

$ssh = new Net_SSH2('www.domain.tld');
$ssh->login('username', 'password');

$ssh->read('[prompt]');
$ssh->write("sudo command\n");
$ssh->read('Password:');
$ssh->write("Password\n");
echo $ssh->read('[prompt]');
?>
于 2011-04-19T04:43:02.330 回答
4

Definitley 不建议。但是,您将需要查看编辑sudoers文件并添加用户 php 正在运行作为NOPASSWD您需要运行的命令。这将只允许他在sudo不输入密码的情况下执行该命令。

如果您需要更多命令,请添加更多命令。Sudoers 配置我知道论坛/帖子是基于 debian 的,但 sudo 并不是严格意义上的 debian,这应该可以帮助您解决需要放置它的 sudo 配置值。

于 2011-04-13T17:16:14.427 回答
2

我只是在谷歌上搜索了一下php sudo shell_exec,这是排名第一的比赛:

http://www.php.net/manual/en/function.shell-exec.php#101440

ilya 在 linemedia dot ru 16-Dec-2010 04:36
可以在不将通行证存储在文件中的情况下执行 sudo

system('echo "PASS" | sudo -u root -S COMMAND');
于 2011-04-13T17:17:04.473 回答
0
$aux=echo "admin-pass" | your command;
echo $aux;

/******************************* ************例子***** ******** *******************************/

运行一个名为的 Perl 脚本my_perl_script.pl

$aux=echo "admin-pass" | sudo -u root -S perl /path-to-the-script/my-perl-script.pl;
echo $aux;
于 2015-01-12T15:55:26.787 回答
0

最好的方法:

$descriptorSpec = array(
    0 => STDIN,
    1 => STDOUT,
    2 => STDERR,
);

if (posix_getuid() === 0) {
    echo "Root\n";
} else {
    echo "No root\n";
    $command = 'sudo ' . PHP_BINARY . ' ' . implode(' ', $_SERVER['argv']);

    $pipes = [];
    $process = proc_open($command, $descriptorSpec, $pipes);
    if (is_resource($process)) {
        proc_close($process);
    }
}

它再次运行相同的命令,以 sudo 为前缀。

于 2016-07-07T14:59:36.997 回答