Apache 仍在使用不正确的权限提供 PHP 文件

Apache still serving PHP file with incorrect permissions

我试图理解为什么在我将权限设置为 000 并授予文件根所有权后 Apache 仍然能够提供 PHP 文件。

如果我创建一个 PHP 文件,该文件由具有 644 权限的网络服务器拥有,则可以正确使用。如果我随后将权限更改为 000 并将所有权更改为 root,文件仍会提供,但我认为不应该!

如果我随后重新启动 Apache,则不会提供该文件。我收到 500,错误日志抱怨无法打开文件,这正是我所期望的行为。

重启后,当文件未被提供时,如果我将所有权改回网络服务器并将权限改回 644,文件将再次提供,无需重新启动 apache。

此行为仅适用于 PHP 个文件。 HTML 文件的行为与我预期的一样,一旦您删除权限,就不会提供这些文件。

有人向我建议 Apache 可能在 PHP 文件上维护一个文件句柄,并且在重新启动之前它看不到权限更改。我试过对文件使用 lsof,但没有看到任何打开的文件描述符。

我还尝试并试验了我从网络服务器所有权和 644 权限开始的地方,并检查了文件是否可以提供。然后我重命名文件,将权限更改为 000,将所有权更改为 root,然后将文件移回。此后,该文件仍然由 Apache 提供。

任何人都可以阐明这里发生了什么吗?

很可能发生的情况是您有 opcache 运行。 PHP 在运行时自行编译。为了节省开销,PHP 5.5 或更高版本具有 Opcache,从而节省了编译步骤。所以 Apache 可能正在缓存文件。然后 Apache 将使用自己的权限存储缓存文件。 Apache 也可能将其缓存在内存中。当您重新启动 Apache 时,它​​必须返回到基础 PHP 文件,它不再具有权限。