我有一个需要使用SUDO才能正常工作的bash脚本文件。
我可以在命令行中使用SUDO运行它,但是我需要输入SUDO密码。
我想通过shell_exec
从php中运行该脚本,但如果我调用SUDO,它不像命令行那样会提示我输入密码。有没有一种方法可以在sudo调用时传递密码?
我该怎么做?
我有一个需要使用SUDO才能正常工作的bash脚本文件。
我可以在命令行中使用SUDO运行它,但是我需要输入SUDO密码。
我想通过shell_exec
从php中运行该脚本,但如果我调用SUDO,它不像命令行那样会提示我输入密码。有没有一种方法可以在sudo调用时传递密码?
我该怎么做?
使用visudo
编辑sudoers文件,并添加一个规则,允许Web服务器用户在没有密码的情况下运行该命令。例如:
www-data ALL=NOPASSWD: /path/to/script
First of all, consider changing the script permissions, if reason why you want sudo is simply a permission issue (see the comment I added to the question above).
Another approach would be using the setuid bit. [Edit: Looks like setuid does not work well with scripts. For explananations, see this link.]
A third, but very insecure method is to read the password from a password file. Warning: This is very insecure, if there's any other possibility, don't do it. And if you do it, try hiding the password file somewhere in your folder hierarchy.
<?php
shell_exec('sudo -u root -S bash script.sh < /home/[user]/passwordfile');
?>
And a fourth possibility is to use the NOPASSWD tag in the sudoers file. You should limit this power to the specific commands you need.
sudoers
文件中添加以下内容:username ALL=NOPASSWD: /path/to/script
sudo
命令。username ALL=NOPASSWD: /path/to/script
这行放在哪里?我的 sudoers 文件在哪里? - JD Isaacks/etc/sudoers
中,通常使用visudo
命令来编辑该文件。 - Daniel Egeberg最好的安全方法是使用crontab。例如,将所有命令保存在数据库中,比如mysql表格中,并创建一个cronjob来读取这些mysql条目并通过shell_exec()执行。请阅读此link以获取更详细的信息。
* * * * * killProcess.php
chgrp www-data script.sh && chmod g+x script.sh
。 - Danilo Bargensvn commit
需要root权限? - Stephen