好的,我需要以 root 身份运行我的 Apache Web 服务器。为此,我whoami
在终端中输入 echo ;。它给出输出:root。但是当我检查以 root 身份运行的 Apache 服务器时根通过执行以下 php 脚本来检查用户是否同意:
< ?php echo `whoami`; ?>
它给了我输出:nobody
。那么有什么建议可以在 apache 中以 root 用户身份执行/登录吗?
答案1
您所问的问题非常危险,因为 Apache 中发现的任何新漏洞都可以以 root 身份利用。Web 管理员在保护其 Web 服务器时要做的第一件事就是不要以 root 身份运行服务器应用程序。话虽如此,我提供以下替代方案,应该可以满足您所说的需求。
创建一个执行所需操作的 shell 脚本。这不是 PHP 脚本,因为 PHP 在 Web 服务器内运行,您需要一个由 Ubuntu 运行的脚本。以下是示例:
#!/bin/sh # script that runs as root whoami
我调用这个文件
/localstore/root.sh
,你应该把它放在你的系统上有意义的地方(例如/home/www_data/bin
)。在终端窗口中,执行命令
sudo vi /etc/sudoers
并在文件末尾插入以下行(务必将其放在末尾,以便其他命令不会覆盖):ALL ALL=NOPASSWD: /localstore/root.sh
这将允许任何人以 root 身份运行脚本,一旦你测试并确认它有效,我强烈建议(再次出于安全目的)将该行更改为
nobody ALL=NOPASSWD: /localstore/root.sh
但正如 Bodhi 所观察到的,Apache 应该以 运行,
www-data
在这种情况下您应该更改nobody
为www-data
。注意:我从未尝试sudo
以nobody
用户身份运行,并且不确定这是否会起作用。在您的 Web 服务器脚本中,让 shell 脚本在 PHP 中运行,如下所示:
< ?php exec ("sudo /localstore/root.sh"); ?>
您可以在引号内向脚本添加参数。
这样,
root.sh
当从 Web 服务器调用时,脚本将以 root 身份执行。如果您还有其他脚本,它们可以是文件中同一条目上的逗号分隔列表sudoers
。确保脚本上的权限允许 Web 服务器执行。