我相信我在构建服务器时已经正确设置了所有内容(也许是 VPS 主机 Linode 提供的预配置 LAMP 完成了设置)
似乎每个 Apache 进程都在用户 nobody 下运行,这正是我在配置中想要的,但是较低的 PID(运行时间最长的 Apache 进程)仍然在 root 下运行,我的 PHP 脚本似乎通过询问 phpinfo() 将当前用户报告为 root。
这是因为 root 可能正在生成 Apache,并且其子进程按照其配置在定义的 nobody 用户下正确生成吗?是否有任何实际页面通过该 root Apache 进程进行处理,还是它只是作为父进程存在?
我有点担心,但是如果这不仅仅是一个配置错误,以全新的思维启动一个新的 Apache 来解决这个问题是没有问题的。
次要的额外信息编辑:看来 $_SERVER['user'] 是 root,即使 $_SERVER['apache_run_user'](类似于)显示 www-data(即使不是 nobody),我不确定这是否是 PHP 的错误,也许我会尝试在 PHP 中编辑根文件并看看..
编辑 2:不,PHP 无法编辑 root 文件。猜测 $_SERVER['user'](以及一个 hacky 审计脚本)错误地假设 PHP 是 root。不过,仍然对 Apache 进程感到疑惑。
答案1
这是因为 root 可能正在生成 Apache,并且其子项正在根据其配置在定义的 nobody 用户下正确生成?
是的。
是否有任何实际页面通过该根 Apache 进程进行处理,或者它只是作为父进程?
不,没有页面通过根进程进行处理,是的,它只是作为父级存在。它需要这样,原因如下。
Apache 绑定到特权端口(即具有较低数字的端口,最大到 1023),大多数是 80 或 443。您需要以 root 身份才能绑定到特权端口:这就是为什么它们被称为“特权端口”。
如果您检查主 sshd 进程,您会发现该进程也以 root 身份运行。现在通过 ssh 连接。您的个人 sshd 进程(从主进程分叉而来)很可能正在您自己的非特权帐户下运行。