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

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

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

我想通过shell_exec从php运行这个脚本,但是如果我调用SUDO,它不像命令行那样可以提示input密码。 有没有办法通过与sudo电话sudo的密码?

我该怎么做?

编辑sudoers文件(使用visudo )并添加一个允许Web服务器用户无需密码即可运行命令的规则。 例如:

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

有这个问题的各种解决scheme。

  • 首先,考虑更改脚本权限,如果你想sudo的理由只是一个权限问题(请参阅我添加到上面的问题的评论)。

  • 另一种方法是使用setuid位 。 [编辑:看起来像setuid不适用于脚本。 有关解释,请参阅此链接 。]

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

     <?php shell_exec('sudo -u root -S bash script.sh < /home/[user]/passwordfile'); ?> 
  • 第四种可能性是在sudoers文件中使用NOPASSWD标签 。 你应该限制这个权力到你需要的特定命令。

你可以添加这样的东西到你的sudoers文件中:

 username ALL=NOPASSWD: /path/to/script 

这将允许该特定用户在该特定脚本上调用sudo而不提示input密码。