【问题标题】:Apache custom module, where to put its own log file?Apache自定义模块,将自己的日志文件放在哪里?
【发布时间】:2014-08-06 17:14:55
【问题描述】:

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

其实我有两个问题:

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

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

谢谢, 塞尚。

【问题讨论】:

    标签: apache logfiles apache-modules file-security


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 我忘记了 Apache 首先以 root 身份启动。而且我虽然在fork之后调用了register_hooks(尤其是child_init)以初始化模块。我会检查一下。非常感谢您的提示!
    • 是的,ap_hook_child_init注册的函数在setuid之后运行,但register_hooks函数运行为root
    猜你喜欢
    • 1970-01-01
    • 2012-03-24
    • 1970-01-01
    • 1970-01-01
    • 2016-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多