Ubuntu上以root身份运行Apache

4

好的,我需要将我的Apache Web服务器作为root运行。为此,我在终端中输入whoami;,它会输出root。但是当我通过执行以下php脚本检查我的Apache服务器是否以root用户身份运行时:< ?php echo whoami; ?>它给出了nobody的输出结果。那么有什么建议可以在Apache中以root用户身份执行/登录吗?


因为我正在使用Xen虚拟化,所以我正在使用LIBVIRT-PHP与hypervisor通信,以启动、创建、销毁等等。为此,我使用了这个php脚本:<?php $conn=libvirt_connect("xen:///"); $name=libvirt_domain_lookup_by_id($conn,3); $dest=libvirt_domain_destroy($name); echo $dest; ?> 当我执行它时,它显示:警告:libvirt_domain_destroy() [function.libvirt-domain-destroy]:在/opt/lampp/htdocs/xampp/shutdown.php的第5行中,只读访问禁止操作virDomainDestroy。 - Ali R. Memon
我认为您不需要以root身份运行Apache/PHP才能连接到libvirt。您只需要在连接时提供正确的凭据即可。 - Brian
3个回答

4

我建议在您的服务器上创建一个外部的PHP文件,用于处理与此扩展相关的所有内容。然后,您可以使用shell_exec结合sudo来调用此脚本。

这样,您可以将您的Web服务器用户放入sudoers文件中,并让它以root身份运行php-cli。

然后,在您的脚本中,您可以简单地使用:

$output = shell_exec("sudo /bin/php /yourscript.php");

相较于以root用户身份运行Apache,这是一种更加安全的解决方案。在我看来,即使你知道自己在做什么,以root用户身份运行Apache也是一个非常糟糕的想法。


1M个用户的话,速度会更快吗? - Rami Dabain
1
性能在最初的问题中并不是一个关注点。就像我说的那样,这是一种非常糟糕的做法,我不会过多依赖它。你的情况可能会有所不同。 - Pierre-Olivier

2
如果你知道你在做什么,可以查看文件/etc/apache2/envvars

您可以自定义这些变量

export APACHE_RUN_USER=root
export APACHE_RUN_GROUP=root

无法工作; 错误:Apache未被设计为在root权限下提供页面。已知存在竞争条件,将允许任何本地用户读取系统上的任何文件。如果您仍希望以root身份提供页面,则请将-DBIG_SECURITY_HOLE添加到CFLAGS环境变量中,然后重新构建服务器。强烈建议您改为修改httpd.conf文件中的User指令,列出非root用户。 - abrfra
1
是的,自2012年以来可能已经发生了变化。 - Maaaaat

0

我认同以root身份运行apache进程的担忧。这只是一个糟糕的想法。 因此,我最近发布了一个项目,允许PHP获取并与真实的Bash shell交互。在这里获取:https://github.com/merlinthemagic/MTS

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

$shell    = \MTS\Factories::getDevices()->getLocalHost()->getShell('bash', true);
$return1  = $shell->exeCmd('php /var/scripts/test.php');
//the return will be a string containing the return of the script
echo $return1;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接