15

如何在root用户(具有所有权限)而不是nobody用户下从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
4

5 回答 5

34

您可以使用 sudo:

exec("sudo /your/script");

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

nobody ALL = NOPASSWD: /your/script

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

chown root:root /your/script
chmod 755 /your/script
于 2012-06-06T13:41:05.833 回答
1

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

于 2012-06-06T13:37:06.787 回答
0

在 Linux 下,您通常使用sudo. 尽量具体,不要给脚本太多权限。

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

于 2012-06-06T13:42:17.140 回答
0

我将添加一个特定规则以允许nobody用户调用此脚本,使用sudo.

于 2012-06-06T14:10:17.147 回答
-1

我最近发布了一个项目,它允许 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');
于 2016-05-18T11:53:01.963 回答