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