我正在尝试在服务器的某处“重写”配置文件
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');
}
dir / 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'
答案 0 :(得分: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'