我正在尝试使用 php 运行一些系统命令,但出现了我不完全理解的行为。如果从命令行运行 php 脚本,我会得到我期望的结果。但通过 apache 运行它会产生好坏参半的结果。
例如,我有这个简单的小 php 脚本:
<?php
$res = shell_exec("ps -ef");
echo $res;
?>
如果我从命令行运行它,我会得到完整的进程列表,因为我希望看到我是否直接运行了“ps -ef”。但是,如果我通过 apache 运行脚本,我会得到一组较小的进程,其中大部分是 apache 拥有的,尽管也有一些 root 拥有的进程和一个由我的普通用户拥有的进程。尝试使用其他命令会得到类似的行为;当我在 CLI 模式下运行它时(例如“php test.php”),它可以工作,但当我在 apache 中提取 php 脚本时,它就不能工作。哪个用户在 CLI 模式下运行它似乎并不重要(我已经使用 root 和我的个人用户帐户对其进行了测试)。这似乎是某种权限问题,尽管它似乎不是可执行问题,因为在“ps -ef”的示例中我在两种情况下都得到了结果。
我在 CentOS 8 上运行,使用 apache 2.4.37 和 php 8.0.8。
我缺少什么?
谢谢,
加文
答案1
文件系统可能是/proc
用hidepid=2
.检查与grep hidepid /proc/self/mountinfo
.