如何从PHP运行 root用户下的bash脚本(具有所有权限)而不是 nobody 用户 - 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
答案 0 :(得分:30)
你可以使用sudo:
exec("sudo /your/script");
您应该允许在没有密码提示的情况下执行脚本。在控制台中运行sudo visudo
并将以下字符串添加到结尾:
nobody ALL = NOPASSWD: /your/script
您必须正确设置文件模式,以确保没有人可以修改此脚本并将危险内容放入其中(在根控制台中):
chown root:root /your/script
chmod 755 /your/script
答案 1 :(得分:1)
你可以创建一个set-uid root的程序。这会导致程序始终以root身份运行。这不适用于shell脚本,因此您必须使用program which calls your script。
答案 2 :(得分:0)
在Linux下,您通常使用sudo
执行此操作。尽量做到尽可能具体,所以不要给脚本太多权限。
有关如何使用sudo
:http://aplawrence.com/Basics/sudo.html
答案 3 :(得分:0)
我会添加一条特定规则,允许nobody
用户使用sudo
调用此脚本。
答案 4 :(得分:0)
我最近发布了一个项目,允许PHP获取真正的Bash shell并与之交互(如果需要,可以是用户:apache / www-data或root)。在此处获取:https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITextInputTraits_Protocol/index.html#//apple_ref/c/tdef/UIKeyboardType
下载后,您只需使用以下代码:
$shell = \MTS\Factories::getDevices()->getLocalHost()->getShell('bash', true);
$return1 = $shell->exeCmd('/full/path/to/script.sh');