如何在root用户下从PHP运行一个bash脚本

如何从根目录用户 (具有所有权限),而不是没有用户的PHP运行bash脚本 – PHP的默认用户?

多数民众赞成我sudo visudo后输出:

Defaults env_keep += "LINES COLUMNS" Defaults env_keep += "LSCOLORS" Defaults env_keep += "SSH_AUTH_SOCK" Defaults env_keep += "TZ" Defaults env_keep += "DISPLAY XAUTHORIZATION XAUTHORITY" Defaults env_keep += "EDITOR VISUAL" Defaults env_keep += "HOME MAIL" #User privilege specification root ALL=(ALL) ALL %admin ALL=(ALL) ALL # Uncomment to allow people in group wheel to run all commands # %wheel ALL=(ALL) ALL # Same thing without a password # %wheel ALL=(ALL) NOPASSWD: ALL # Samples # %users ALL=/sbin/mount /cdrom,/sbin/umount /cdrom # %users localhost=/sbin/shutdown -h now 

Solutions Collecting From Web of "如何在root用户下从PHP运行一个bash脚本"

你可以使用sudo:

 exec("sudo /your/script"); 

您应该允许执行您的脚本没有密码提示。 在控制台中运行sudo visudo并添加以下字符串到最后:

 nobody ALL = NOPASSWD: /your/script 

您必须正确设置文件模式,以确保没有人可以修改此脚本并将危险内容放入(在根控制台中):

 chown root:root /your/script chmod 755 /your/script 

你可以创建一个set-uid root的程序。 这导致程序始终以root身份运行。 这不适用于shell脚本,因此您必须使用调用脚本的程序 。

在Linux下,你通常使用sudo来做到这一点。 尽量做到尽可能具体,所以不要给脚本太多的权限。

有关如何使用sudo示例: http : //aplawrence.com/Basics/sudo.html

我会添加一个特定的规则,让这个脚本被nobody用户使用sudo

我最近发布了一个项目,允许PHP获取并与真正的Bash shell进行交互(如果需要的话用户:apache / www-data或root)。 在这里获取: https : //github.com/merlinthemagic/MTS

下载后,你只需使用下面的代码:

 $shell = \MTS\Factories::getDevices()->getLocalHost()->getShell('bash', true); $return1 = $shell->exeCmd('/full/path/to/script.sh');