46

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

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

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

我怎样才能做到这一点?

4

4 回答 4

48

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

www-data ALL=NOPASSWD: /path/to/script
于 2010-07-02T13:41:09.077 回答
8

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

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

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

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

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

于 2010-07-02T13:45:38.580 回答
5

您可以将这样的内容添加到您的sudoers文件中:

username ALL=NOPASSWD: /path/to/script

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

于 2010-07-02T13:42:18.373 回答
0

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

  * * * * * killProcess.php
于 2019-02-06T10:06:39.700 回答