繁体   English   中英

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

[英]How to run from PHP a bash script under root user

如何从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

你可以使用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');

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM