【问题标题】:How to run from PHP a bash script under root user如何在 root 用户下从 PHP 运行 bash 脚本
【发布时间】:2012-06-10 12:42:17
【问题描述】:

如何在 root 用户(具有所有权限)而不是 nobody 用户 - php 默认用户下从 PHP 运行 bash 脚本?

这是我在 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

【问题讨论】:

  • 这听起来很危险,所以提出了一个明显的问题:为什么需要这样做?也许这是一个更好的整体解决方案。

标签: php linux bash shell unix


【解决方案1】:

你可以使用 sudo:

exec("sudo /your/script");

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

nobody ALL = NOPASSWD: /your/script

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

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

【讨论】:

  • 我应该在哪里添加它?我在问题中的sudo visudo 之后发布我的输出
  • 只需将新行放在文件末尾即可。
  • @Riateche 我都做到了!无法运行它...我正在调用 xcodebuilde(Unix 程序)-在终端工作文件中没有任何反应。
  • 检查exec函数的返回值。传递$output$return_var 参数并检查它们的值。它们可能包含一些有用的信息。
  • 检查过了。 output=数组和return_var=69。
【解决方案2】:

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

【讨论】:

  • 链接好像坏了。
【解决方案3】:

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

sudo的使用示例:http://aplawrence.com/Basics/sudo.html

【讨论】:

  • 问题是,当我在终端上运行它时,它运行良好,但是当我从 php 运行该 bash 脚本时,它没有被执行(其他简单的 bash 与 cp,mv 命令工作),我认为它有 90% 的权限。
【解决方案4】:

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

【讨论】:

  • 查看 Riateche 的回答 - 您需要将行 nobody ALL = NOPASSWD: /your/script 添加到“visudo”文件(sudoers 配置文件)。当然,用你的脚本路径替换/your/script
  • 如何编辑这个文件?我使用了sudo visudo,但它只显示输出。
  • 奇怪。 sudo visudo 应该在文件编辑器中打开它:google.com.br/search?q=visudo
  • 您可以通过键入EDITOR=nano(例如)来更改visudo使用的编辑器...在“nano”中,使用CTRL+O、CTRL+X保存文件...
  • 我无能为力,我打开文件 - 无法保存它,它不会关闭,它自己重复......
【解决方案5】:

我最近发布了一个项目,它允许 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');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-11
    • 2015-02-23
    相关资源
    最近更新 更多