告诉 Apache 以不同的用户身份创建 error.log/access.log

Bur*_*Leo 7 file-permissions apache-2.2

如果您告诉 Apache 使用 CustomLog 文件,Apache2 将在启动时创建这些文件。它总是将它们提供给用户 root:root。我怎样才能改变这种行为?

背景

Apache 运行

SuexecUserGroup www-data www-data
Run Code Online (Sandbox Code Playgroud)

同时,我使用 CustomLog 将其输出通过管道传输到脚本。该脚本从 IP 中删除两个字节,然后写入日志文件。由于您不能告诉 Apache 从 error.log 中省略 IP,因此此管道输出很重要(关于德国隐私法)。

如果这不属于www-data ,则脚本无法访问我的自定义日志。

如果我更换所有者,一切正常。

我也知道如何在logrotate重命名和重新创建日志文件时更改文件所有者。

但是,如果我停止 Apache 进程,删除日志文件,然后重新启动 Apache 进程,则会创建属于 root:root 的新文件。

如何告诉 Apache在启动时为www-data创建新的空文件?

Ali*_*orm 1

这个句子:

如果我的自定义日志不属于 www-data,则脚本无法访问它。

与http://httpd.apache.org/docs/current/logs.html#piped直接矛盾:

管道日志进程由父 Apache httpd 进程生成,并继承该进程的用户 ID。这意味着管道日志程序通常以 root 身份运行。因此,保持程序简单和安全非常重要。

如果您描述的场景在某种程度上是正确的,您仍然可以通过以下方式回避问题

  1. 忽略配置文件中给出的日志文件名
  2. 在脚本中设计您自己的日志文件名称
  3. 将 stdout 重定向到您选择的文件,如 (2) 中所示