如何以 root 身份运行 Apache?

如何以 root 身份运行 Apache?

好的,我需要以 root 身份运行我的 Apache Web 服务器。为此,我whoami在终端中输入 echo ;。它给出输出:root。但是当我检查以 root 身份运行的 Apache 服务器时通过执行以下 php 脚本来检查用户是否同意:

< ?php echo `whoami`;  ?>

它给了我输出:nobody。那么有什么建议可以在 apache 中以 root 用户身份执行/登录吗?

答案1

您所问的问题非常危险,因为 Apache 中发现的任何新漏洞都可以以 root 身份利用。Web 管理员在保护其 Web 服务器时要做的第一件事就是不要以 root 身份运行服务器应用程序。话虽如此,我提供以下替代方案,应该可以满足您所说的需求。

  1. 创建一个执行所需操作的 shell 脚本。这不是 PHP 脚本,因为 PHP 在 Web 服务器内运行,您需要一个由 Ubuntu 运行的脚本。以下是示例:

    #!/bin/sh
    # script that runs as root
    whoami
    

    我调用这个文件/localstore/root.sh,你应该把它放在你的系统上有意义的地方(例如/home/www_data/bin)。

  2. 在终端窗口中,执行命令sudo vi /etc/sudoers并在文件末尾插入以下行(务必将其放在末尾,以便其他命令不会覆盖):

    ALL ALL=NOPASSWD: /localstore/root.sh
    

    这将允许任何人以 root 身份运行脚本,一旦你测试并确认它有效,我强烈建议(再次出于安全目的)将该行更改为

    nobody ALL=NOPASSWD: /localstore/root.sh
    

    但正如 Bodhi 所观察到的,Apache 应该以 运行,www-data在这种情况下您应该更改nobodywww-data。注意:我从未尝试sudonobody用户身份运行,并且不确定这是否会起作用。

  3. 在您的 Web 服务器脚本中,让 shell 脚本在 PHP 中运行,如下所示:

    < ?php
    exec ("sudo /localstore/root.sh");
    ?>
    

    您可以在引号内向脚本添加参数。

    这样,root.sh当从 Web 服务器调用时,脚本将以 root 身份执行。如果您还有其他脚本,它们可以是文件中同一条目上的逗号分隔列表sudoers。确保脚本上的权限允许 Web 服务器执行。

答案2

我想知道这个要求是否是因为在虚拟环境中使用共享目录运行虚拟 Web 服务器,在这种情况下目录所有权将是 root,以便主机和客户文件系统都可以访问它。解决方案可能是将 www-data 组添加到 vboxfs 组,或者根据您环境中的情况进行添加。在本文

在我的处境中,我也对在虚拟主机配置中包含一个选项的要求感到困惑——特别是添加

Require all granted

在我的目录配置中,如下所述本文

相关内容