Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从PHP运行根用户下的bash脚本_Php_Linux_Bash_Shell_Unix - Fatal编程技术网

如何从PHP运行根用户下的bash脚本

如何从PHP运行根用户下的bash脚本,php,linux,bash,shell,unix,Php,Linux,Bash,Shell,Unix,如何从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 +

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

您可以制作一个设置为uid root的程序。这会导致程序始终以root用户身份运行。这不适用于shell脚本,因此您必须使用。您可以使用sudo:

exec("sudo /your/script");
您应该允许在没有密码提示的情况下执行脚本。在console中运行
sudo visudo
,并在末尾添加以下字符串:

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


在Linux下,通常使用
sudo
执行此操作。尽量具体,不要给脚本太多的权限


关于如何使用
sudo

的示例,我将添加一个特定的规则,允许
无人
用户调用此脚本,使用
sudo

我最近发布了一个项目,该项目允许PHP获得一个真正的Bash shell并与之交互(如果需要,作为用户:apache/www数据或root)。在这里获取:

下载后,您只需使用以下代码:

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

这听起来很危险,所以提出了一个显而易见的问题:你为什么要这么做?也许这是一个更好的整体解决方案。问题是,当我在终端上运行它时,它工作得很好,但当我从php运行bash脚本时,它没有被执行(其他带有
cp
mv
命令的简单bash工作正常),我认为它有90%的权限。我应该在哪里添加它呢?在问题的
sudo visudo
之后,我发布了我的输出。只需在文件末尾添加新行。@Riateche我都做到了!不能运行它。。。我正在调用xcodebuilde(Unix程序)-在terminal works文件中什么也没有发生。请检查
exec
函数的返回值。传递
$output
$return\u var
参数并检查它们的值。它们可能包含一些有用的信息。请检查
output
=Array和
return\u var
=69。请参阅Riateche的答案-您需要将行
nobody ALL=NOPASSWD:/your/script
添加到“visudo”文件(sudoers配置文件)中。当然,用脚本路径替换
/your/script
。如何编辑此文件?我使用了
sudovisudo
,但它只显示输出。奇怪
sudo-visudo
应该在文件编辑器中打开它:您可以通过键入
editor=nano
来更改visudo使用的编辑器(例如)。。。在“nano”中,使用CTRL+O、CTRL+X保存文件…我什么都做不了,我打开了文件-无法保存,它不会关闭,它自己复制了…链接似乎断了。
$shell    = \MTS\Factories::getDevices()->getLocalHost()->getShell('bash', true);
$return1  = $shell->exeCmd('/full/path/to/script.sh');