0

我正在尝试“重写”我服务器上某处的配置文件

if ($return = exec("sudo mv.sh '/etc/my/config.cfg' '/etc/my/config.cfg.bak'",$output)){
     echo 'Yaaay';
}
else {
print_r($output);
print_r($return);
die('Couldn\'t move original config file');
}

目录 /etc/my 归服务器所有,但我尝试将以下行添加到我的 /etc/sudoers 文件中:

%admin ALL=(ALL) NOPASSWD: ALL
ALL ALL=NOPASSWD: /var/www/mysite/mv.sh
www-data ALL=(ALL:ALL) NOPASSWD:/etc/my/

现在我正在使用一个 shell 脚本文件,该文件由我网站根目录中的 www-data 所有,但我自己也尝试了一个 mv。

这是shell脚本的内容

$FILE1 = $1
$FILE2 = $2
mv $FILE1 $FILE2

我也尝试将 sudo 放在 mv 命令的前面,但这也不起作用..

如果我可以将此文件作为备份移动,我会很高兴,然后我想重新创建将一些内容放入其中的文件,我发布了...

   file_put_contents('/etc/my/config.cfg', $_POST['contents']);

现在我没有收到任何错误,$output并且$return空空如也。我确实收到了我的失败信息

'Couldn\'t move original config file'
4

1 回答 1

1

你可以试试这个方法吗?

www-data ALL=(ALL:ALL) NOPASSWD:/var/www/mysite/mv.sh

并在 php exec 中使用绝对路径调用 mv.sh?

如果 sudo 有任何问题,请先手动尝试脚本。su 到 www-data 并尝试运行相同的命令:

sudo /var/www/mysite/mv.sh '/etc/my/config.cfg' '/etc/my/config.cfg.bak'
于 2013-10-22T16:14:08.823 回答