我有一个Apache模块,它作为一个安全过滤器,允许请求通过或不通过。这是一个定制的模块,我不想使用任何存在的模块。
我实际上有两个问题:
-
模块有自己的日志文件。我认为最好的位置应该在/var/log/apache2/,但由于Apache进程运行在www-data用户,它不能在该路径上创建文件。我想找到一个解决方案的日志文件,这样的方式是没有太多的侵入(在安全方面)为一个典型的web服务器。哪里是最好的地方,应该设置什么样的安全属性?
-
模块使用管道与另一个进程通信。我想从Apache模块中生成这个过程,只有当我需要它的时候。我应该在哪里找到这个二进制文件,以及我应该如何设置特权以尽可能减少干扰?
谢谢,Cezane。
Apache首先在超级用户下启动并执行模块初始化(调用module_struct::register_hooks
函数)。在那里,您可以创建日志文件并将它们chown
到www-data
,或者保持文件描述符打开,以便稍后从fork
ed和setuid
ed工作进程中使用它。
(如果你需要一个替代方案,我认为也可以使用syslog
进行日志记录,并配置它将日志消息路由到日志文件)。
在工作进程下,您已经作为www-data
用户运行,因此您可以做的事情不多,以进一步确保执行。例如,我猜,您不能setuid
到另一个用户或chroot
来保护文件系统。
您可以提高安全性的方法是使用系统防火墙。例如,在AppArmor下,您可以告诉操作系统Apache模块可以执行哪些二进制文件,从而阻止它执行任何不需要的二进制文件。您可以限制二进制文件的文件系统访问,防止它访问不属于它的www-data
文件。