PHP exec 命令无意中以 root 身份运行


PHP exec commands running unintentionally as root

我非常困惑,担心通过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

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

此外,我的

httpd.conf 文件将"没有人"分配为用户和组,实际上,我的 httpd 进程(从"ps -ef |grep httpd")归"nobody"所有。

我的问题是为什么 exec 命令为"whoami"和"echo ${USER}"命令返回不同的结果,以及是否存在由于我的 Apache 配置错误而导致的安全风险。理想情况下,我希望我的 exec 命令以 cuser 用户身份运行。我能做到这一点吗?

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

根据Gralgrathor的评论,这是我的解决方法:

我可以通过输入我的exec命令来覆盖HOME目录,如下所示:exec('HOME=/home/cuser sh script.sh')。请注意,虽然 script.sh 中的 ${USER} 仍然指向 ROOT,所以要小心!