如何从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密码。