Apache自定义模块,在其中放置自己的日志文件



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

我实际上有两个问题:

  1. 模块有自己的日志文件。我认为最好的位置应该在/var/log/apache2/,但由于Apache进程运行在www-data用户,它不能在该路径上创建文件。我想找到一个解决方案的日志文件,这样的方式是没有太多的侵入(在安全方面)为一个典型的web服务器。哪里是最好的地方,应该设置什么样的安全属性?

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

谢谢,Cezane。

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

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

在工作进程下,您已经作为www-data用户运行,因此您可以做的事情不多,以进一步确保执行。例如,我猜,您不能setuid到另一个用户或chroot来保护文件系统。

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

最新更新