Apache Httpd:非特权用户的日志访问

Apache Httpd:非特权用户的日志访问

我想知道 Apache HTTPD 管理员是否通常允许读取权限或读取 /var/log/httpd/${vhost}_error_log 的副本?

我为一所大学的计算机科学系管理一个 Apache Web 服务器。有时我们会收到令人沮丧的工单,因为虚拟主机所有者无法确定错误的解决方案是什么,因为他们无权访问上述日志文件 — — 因为这些日志文件的所有者是 root:root。

在这种情况下,管理员该如何访问/传播日志?目前,我通常会向虚拟主机所有者提供日志片段以进行故障排除,但您可以想象,这会导致虚拟主机所有者感到沮丧,因为我们并不总是能够及时做出响应。

是否有内部机制或第三方应用程序可以为我的问题提供细粒度的访问解决方案?非常感谢您的指导。

答案1

我认为没有理由将日志存储在网站管理员无法访问的位置。由于您似乎已经为每个 VirtualHost 创建了特定的日志,请调整存储日志的位置,使其允许网站管理员访问自己的原始日志文件。这些日志仍可由 root 拥有,但只要他们的文件系统权限良好,网站管理员就可以读取它们,并在必要时下载它们。

在过去(当每个网站所有者仍然使用 FTP 上传内容并且 chrooting 很容易时),我们logs在 document_root 旁边有一个单独的目录cgi-bin

答案2

限制对 /var/log/.... 的访问是否常见?

是的

允许网站所有者查看他们的日志是否很常见?

是的

您的问题是如何配置它,以便 Apache 可以写入日志,用户可以读取自己的日志,但不能读取其他用户的日志。使用标准权限,这很容易。

使用默认软件包设置,您的 httpd 必须以 root 身份运行(以便监听端口 80 和 443),这意味着它可以读取和写入所有内容(至少主进程可以 - 工作进程将 setuid 设置为非特权用户)。但即使它已经以非特权用户身份运行,也可以使用标准文件系统权限来解决此问题。

请确保您选择的日志位置是文档根目录之外否则日志将成为任何攻击者可利用的资产。

还要记住,您需要保留或实施所有这些文件的日志轮换。

从头开始设置,我会选择....

drwxrwx--- ${USER}:adm /var/www/${USER}/logs/
drwxrwx--- ${USER}:adm /var/www/${USER}/html/  (document root)
drwxrwx--- ${USER}:${USER} /var/www/${USER}/data/  (because its good practice to provide space outside the document root for the users too)

如果他们坚持运行自修改代码(并且你想让他们这样做)......

drwxrwx--- ${USER}:${WEBUID} /var/www/${USER}/html/

(但请注意,这为用户提供了不仅可以读取其他文件还可以修改它们的手段)。

从您的角度来看,只需为它们每个提供一个容器并在虚拟机管理程序上运行一个负载均衡器可能会更简单。

为大学计算机科学系管理 Apache 网络服务器。

...所以您已经知道这一切了?

相关内容