我尝试使用root权限从PHP执行命令。我无法更改服务器权限,因此我必须直接传递密码。 我已经看到可以通过读取带密码的文件来实现,所以我想用密码创建一个tmp文件,并在命令完成后将其删除。
$tmpfname = tempnam(sys_get_temp_dir(), 'PASSWORD');
$handle = fopen($tmpfname, "w");
fwrite($handle, "passwordhere");
fclose($handle);
echo exec('sudo -u root -S whoami < '.$tmpfname);
unlink($tmpfname);
它应该返回&#39; root&#39;但它并没有。我的代码有什么问题?
编辑:也许来自Codeigniter的一些额外安全性?
答案 0 :(得分:0)
关于安全性的最佳解决方案是,只允许在没有密码的情况下由www-data使用sudoers文件中所需的命令。
您可以在此处查看示例:http://www.forum-raspberrypi.de/Thread-php-sudo-befehle-mit-php-absetzen?pid=37843#pid37843
其他可以在php脚本中存储密码的解决方案,请参见下面这一行。
除了安全风险之外。 您无需将密码存储在文件中。
这样做:
➜ tmp echo 'your_root_password' | sudo -S whoami
Password:root
也适用于php
<?
echo exec("echo 'your_root_password' | sudo -S whoami");
返回:
➜ tmp php sudo.php
root%
最好的关注, 安德烈