如何从需要SUDO的php调用shell脚本?

时间:2010-07-02 13:35:57

标签: php bash sudo shellexecute

我有一个文件,它是一个需要SUDO才能工作的bash脚本。

我可以使用SUDO从命令行运行它,但系统会提示我输入SUDO密码。

我想通过shell_exec从php运行这个脚本,但是如果我调用SUDO,它就不像命令行,我可以提示输入密码。有没有办法通过sudo调用传递sudo的密码?

我该怎么做?

4 个答案:

答案 0 :(得分:44)

编辑sudoers文件(使用visudo)并添加允许Web服务器用户在没有密码的情况下运行命令的规则。例如:

www-data ALL=NOPASSWD: /path/to/script

答案 1 :(得分:8)

这个问题有各种解决方案。

  • 首先,考虑更改脚本权限,如果您想要sudo的原因只是一个权限问题(请参阅我在上述问题中添加的评论)。

  • 另一种方法是使用setuid bit [编辑:看起来setuid与脚本不兼容。有关解释,请参阅this link。]

  • 第三种但非常不安全的方法是从密码文件中读取密码。 警告:这是非常不安全的,如果还有其他可能性,请不要这样做。如果您这样做,请尝试将密码文件隐藏在文件夹层次结构中的某个位置。

    <?php
    shell_exec('sudo -u root -S bash script.sh < /home/[user]/passwordfile');
    ?>
    
  • 第四种可能性是在sudoers文件中使用NOPASSWD tag。您应该将此功能限制为您需要的特定命令。

答案 2 :(得分:5)

您可以在sudoers文件中添加以下内容:

username ALL=NOPASSWD: /path/to/script

这将允许特定用户在不提示输入密码的情况下在该特定脚本上调用sudo

答案 3 :(得分:0)

最好的安全方法是使用crontab。将所有命令保存在数据库中,例如mysql表中,并创建一个cronjob来读取这些mysql entreis并通过shell_exec()执行。请阅读此link了解更多详细信息。

  * * * * * killProcess.php