对 Apache 每个虚拟主机日志记录设置的担忧

对 Apache 每个虚拟主机日志记录设置的担忧

我在公司既是高级开发人员,又是系统管理员,因此我试图满足这两项活动的需求。

我已经设置了我们的 Apache 盒,它目前处理 30-50 个域(并且希望会增长),并托管生产和开发站点,具有以下目录结构:

domains/
domains/domain.ext/ #FTPS chroot for user domain.ext
domains/domain.ext/public  #the DocumentRoot of http://domain.ext
domains/domain.ext/logs
domains/domain.ext/subdomains/sub.domain.ext
domains/domain.ext/subdomains/sub.domain.ext/public  #DocumentRoot of http://sub.domain.ext

每个 domain.ext Vhost 通过 mpm-itk 以其专用的用户和组运行,umask 为 027,并且日志通过管道 sudo 命令存储,如下所示:

ErrorLog "| /usr/bin/sudo -u nobody -g domain.ext tee -a domains/domain.ext/logs/sub.domain.ext_error.log"
CustomLog "| /usr/bin/sudo -u nobody -g domain.ext tee -a domains/domain.ext/logs/sub.domain.ext_access.log" combined

现在,我已经阅读了很多关于不让日志离开严格限制目录的文章,但开发人员经常需要快速查看特定子域错误日志,而我并不想授予他们查看 /var/logs 的管理员权限。在开发阶段,将它们放入 ft​​p 帐户中确实非常方便。

您认为这种设置可行且足够安全吗?对我来说,它显然看起来不错,但我担心 3 个安全问题:

-sudo 管道足以处理符号链接漏洞吗?我遗漏了什么吗?

-log dos:日志位于所有域的同一分区中。有数百 GB,但是,如果磁盘空间被 dos,一切都会崩溃。有什么解决方法吗?短时间的 logrotate 就够了吗?

-文件描述符限制:据我所知,Ubuntu Server 上 Apache 的默认限制目前为 8192,这足以处理每个子域 2 个日志文件。是吗?我遗漏了什么吗?

我希望读到一些关于此事的想法!

答案1

解决此问题的潜在方法是在 /var/log/vhostlogs 上创建一个单独的文件夹,为每个 vhost 文件夹创建文件夹,并将其 chown 给 root,其他人和组无权访问,并在文件夹中使用 setacl,这样每次创建时,里面创建的文件都会对与该 vhost 关联的用户具有读取权限。然后,您可以确保每个当前日志文件都硬链接到 domains/domain.ext/logs/current.log。

这样,无论 chroot 是打开还是关闭,用户都不应该读取彼此的日志文件,并且在 chroot 内部他们应该能够读取当前日志并且无法滥用它,因为 apache 正在以 root 权限安全地写入 /var/log(除 root 之外的任何人都没有写权限)。

相关内容