我想用root_exec以root身份执行命令。现在我知道这很危险,但请相信我,您需要使用MOD_AUTH登录并拥有正确的权限来访问此页面。这很安全。我怎么能这样做?
答案 0 :(得分:13)
问题不在于你的页面是否安全,问题是给php页面运行一些sudo命令的能力会给它 all 页面,包括服务器上任何站点上任何不安全页面上的任何注入代码。
也就是说,最好制作一个包装脚本,只执行需要执行的一个作业,然后让http用户只能访问那个ONE命令作为sudo
http ALL=(ALL) NOPASSWD:/user/local/bin/your_wrapper_script.sh
答案 1 :(得分:12)
您可以使用phpseclib, a pure PHP SSH implementation的最新SVN版本来执行此操作。例如
<?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]');
?>
答案 2 :(得分:3)
Definitley不建议。但是,您需要查看编辑sudoers
文件并添加用户php作为NOPASSWD
运行您需要运行的命令。这只允许他sudo
一个命令而不输入密码。
如果您需要更多命令,请添加更多命令。 Sudoers Configuration我知道论坛/帖子是基于debian的,但是sudo并不是严格的debian,它应该可以帮助你解决你需要的sudo配置值。
答案 3 :(得分:2)
我只是为php sudo shell_exec
谷歌了,这就是第一场比赛:
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');
答案 4 :(得分:0)
$aux=echo "admin-pass" | your command;
echo $aux;
/ ******** ************例************* ********* /
运行名为my_perl_script.pl
的
$aux=echo "admin-pass" | sudo -u root -S perl /path-to-the-script/my-perl-script.pl;
echo $aux;
答案 5 :(得分: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为前缀。