使用sudo运行命令而不更改服务器权限

时间:2014-09-08 11:59:06

标签: php codeigniter

我尝试使用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的一些额外安全性?

1 个答案:

答案 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%

最好的关注, 安德烈