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

JD *_*cks 45 php bash sudo shellexecute

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

我可以使用SUDO从命令行运行它但我会被提示输入SUDO密码.

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

我怎样才能做到这一点?

Bri*_*ian 45

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

www-data ALL=NOPASSWD: /path/to/script
Run Code Online (Sandbox Code Playgroud)


Dan*_*gen 8

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

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

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

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

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

  • 我的天啊.永远不要保存根本访问的密码!这从来就不是好形式.@ Brian的回答要好得多:没有使用密码. (2认同)

Dan*_*erg 5

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

username ALL=NOPASSWD: /path/to/script
Run Code Online (Sandbox Code Playgroud)

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