PHP exec命令意外以root身份运行

4
我很困惑并且关心通过PHP中的"exec"语句运行的命令的用户所有权。我在一个cPanel/WHM环境下运行PHP 5.5/Apache 2.2/CENTOS 6,并使用DSO/mod_ruid处理程序。
在测试中,我有以下php脚本:
<?php
  echo 'whoami: ',exec('whoami'),'<br />';
  echo 'user: ',exec('echo ${USER}'),'<br />';
  echo 'home: ',exec('echo ${HOME}'),'<br />';
?>

当我通过浏览器运行脚本时,我看到以下结果:
whoami: cuser
user: root
home: /root

这里的是我系统cPanel ID中suPHP、mod_ruid和mpm-itk指令在域名虚拟主机httpd.conf配置中的用户ID。

此外,我的httpd.conf文件将“nobody”指定为用户和组,并且我的httpd进程(从“ps-ef | grep httpd”返回)确实由“nobody”所拥有。

我的问题是,为什么执行命令对于“whoami”和“echo${USER}”命令返回不同的结果?是否由于Apache配置错误而存在安全风险?最理想的情况是,我希望我的exec命令以用户身份运行。我能实现吗?

非常感谢您提供的任何信息。


我发现,尽管在通过PHP exec运行的bash脚本中,USER和HOME目录指向root,但特权和上下文实际上是suPHP/cPanel ID的。exec命令没有root权限,这是一件好事。但是,HOME变量指向/root,这是一个问题。我需要通过exec命令运行libreoffice headless,并且libreoffice需要访问当前的主目录,不幸的是它指向root。感谢任何提示。 - webcast33
搞定了:我可以通过以下方式覆盖HOME目录,输入我的exec命令:exec('HOME=/home/cuser sh script.sh')。抱歉我提出了这个问题。 - webcast33
这可能对遇到相同问题的人有用。请确保将上述解决方案作为答案提供,并将其标记为已回答。 - Gralgrathor
1个回答

0
根据Per Gralgrathor的评论,这是我的解决方法:
我可以通过输入以下执行命令来覆盖HOME目录:exec('HOME=/home/cuser sh script.sh')。请注意,script.sh中的${USER}仍然指向ROOT,所以要小心!

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