我目前正在 Ubuntu 上的 Apache PHP 服务器前面运行 Nginx 反向代理。我有一个文件 ,log.txt
位于我为站点提供 PHP 文件的同一目录中。 PHP 将 API 活动写入此日志文件。在网络浏览器中访问时,我可以通过将 url 从 更改为lookup.php
来访问日志文件,这是完全不安全的。log.txt
我只想在通过 SSH 连接时访问日志文件。
我将日志文件的所有权更改为www-data
PHP 当前正在运行的组。我想要发生的是 PHP 文件能够写入此日志文件,但用户不能导航到 Web 浏览器中的日志文件路径并显示它。我认为问题在于,由于 Nginx 也运行为www-data
,通过将日志文件所有者更改为www-data
PHP 可以写入它,Nginx 现在可以读取它。
以下是我想到的一些想法,但我不确定它们是否存在重大安全缺陷:
将日志文件更改为文件所有者的只读文件
www-data
。我正在做研究,这似乎是一种罕见的方法。让 PHP 和 Nginx 作为单独的组运行,为 PHP 提供一个 rwx 访问权限,而 nginx 不提供任何访问权限。
www-data
在 Web 根目录之外创建一个新目录,这样就没有与该文件关联的 Web URL,但该目录由 PHP 和 Nginx拥有。我不确定这是否有漏洞。禁止通过 Nginx 访问日志文件。这对我来说有点“hacky”。
哪条路线才是正确的选择?
答案1
我倾向于为我的 Web 服务器和代理运行 nginx,所以请原谅 Apache 的无知,但我通常不会为此使用文件权限。相反,我更喜欢告诉我的网络服务器不要提供某些文件。 这里是一种从服务器故障中执行此操作的方法。
创建一个单独的目录用于日志记录也很好,如果该目录仍然位于 URL 可以访问的位置,则 Apache 可以简单地禁止该目录。或者,/var/log/
可以使用该位置,但这通常是为操作系统上运行的服务保留的。
使用 Web 服务器拒绝访问应该不会让人感觉很麻烦,因为此功能部分适用于敏感文件。此外,Web 服务器的根目录假定其下的所有文件均用于 Web,除非明确拒绝(如上所述)。这是我在必要时使用我的网络服务器所采取的路线。