繁体   English   中英

shell_exec中的PHP sudo

[英]PHP sudo in shell_exec

我想用root_exec以root身份执行命令。 现在我知道这很危险,但请相信我,您需要使用MOD_AUTH登录并拥有正确的权限来访问此页面。 这很安全。 我怎么能这样做?

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

也就是说,最好制作一个包装脚本,只执行需要执行的一个作业,然后让http用户只能访问那个ONE命令作为sudo

http  ALL=(ALL) NOPASSWD:/user/local/bin/your_wrapper_script.sh

您可以使用最新的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]');
?>

Definitley不建议。 但是,您需要查看编辑sudoers文件并添加用户php作为NOPASSWD运行以运行您需要的命令。 这只会让他在没有输入密码的情况下sudo那个命令。

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

我只是谷歌为php sudo shell_exec ,这出现了#1匹配:

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

ilya at linemedia dot ru 16-Dec-2010 04:36
sudo可以在不存储文件传递的情况下执行

system('echo "PASS" | sudo -u root -S COMMAND');
$aux=echo "admin-pass" | your command;
echo $aux;

/ ******************************* ************示例***** ******** ******************************* /

运行名为my_perl_script.pl的Perl脚本:

$aux=echo "admin-pass" | sudo -u root -S perl /path-to-the-script/my-perl-script.pl;
echo $aux;

最好的方法:

$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为前缀。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM