Apache自定义模块,在哪里放置自己的日志文件?

时间:2014-08-06 17:14:55

标签: apache logfiles apache-modules file-security

我有一个Apache模块,它充当安全过滤器,允许请求通过或不通过。这是一个定制的模块,我不想使用任何现有的模块。

我实际上有两个问题:

  1. 模块有自己的日志文件。我认为最佳位置应该在 / var / log / apache2 / 中,但由于Apache进程在www-data用户上运行,因此无法在该路径上创建文件。我想以这样的方式找到日志文件的解决方案,这对于典型的Web服务器来说并没有太大的干扰(就安全性而言)。哪里是最好的地方,应该设置什么样的安全属性?

  2. 模块使用管道与另一个进程通信。我想在我需要的时候从Apache模块中生成这个过程。我应该在哪里找到这个二进制文件,我应该如何设置尽可能少侵入的权限?

  3. 谢谢, Cezane。

1 个答案:

答案 0 :(得分:1)

Apache首先在超级用户下启动并执行模块初始化(调用module_struct::register_hooks函数)。在那里,您可以创建日志文件,并chown将它们设置为www-data或保持文件描述符处于打开状态,以便稍后在fork ed和setuid ed工作进程中使用它

(如果您需要替代方案,我认为也可以使用syslog进行日志记录并将其配置为将日志消息路由到您的日志文件中。

在工作进程下,您已经作为www-data用户运行,因此您无法进一步确保执行安全。例如,AFAIK,您不能setuid到另一个用户或chroot来保护文件系统。

为提高安全性所做的工作是使用系统防火墙。例如,在AppArmor下,您可以告诉操作系统您的Apache模块可以执行哪些二进制文件,从而阻止它执行任何不需要的二进制文件。并且您可以限制该二进制文件系统的访问,从而阻止它访问不属于它的www-data个文件。