如何允许 apache 提供 rsyslogd (selinux) 写入的文件

如何允许 apache 提供 rsyslogd (selinux) 写入的文件

我有一个在 RHEL7 上作为 systemd 服务运行的应用程序,它使用系统日志进行日志记录。为了简化对该应用程序的监控,我已配置rsyslogd为(仅)将此服务的日志写入专用日志文件。

我现在想使用此日志文件来提供服务,httpd以便用户可以轻松监控应用程序。

我面临的问题是,无论我如何设置文件上下文,它似乎selinux都会阻止我做我想做的事情:

  • rsyslog允许写入var_log_t
  • httpd允许读取httpd_sys_content_t

据我所知,没有任何上下文允许通过 进行写入rsyslogd和读取httpd

我可以做什么来解决这个问题?我最终需要创建自定义策略模块吗?

答案1

您可以检查是否存在布尔值以允许使用audit2why,在这种情况下您不需要创建自定义策略模块。

如果不存在这样的布尔值,要允许 apache 读取日志,您需要附加策略。和audit2allow您可以直接创建策略模块或创建可用作模块模板的所需规则。

首先,您需要生成包含访问违规的日志。要获取正常使用过程中的所有访问违规,请设置httpd_t到宽容模式。在宽容模式下,SELinux 策略不会针对指定类型强制执行(httpd_t),但日志将照常生成:

semanage permissive -a httpd_t

验证配置有效并且可以使用 Apache 访问日志后,重新打开强制模式:

semanage permissive -d httpd_t

现在用于audit2allow生成新模块并插入它:

audit2allow -a -M apache_logs
semodule -i apache_logs.pp

如果您想确保审核消息仅与httpd_t用于创建模块,grep审计日志中的相关行并将其用作audit2allow 的输入。例如:

grep "httpd_t" /var/log/audit/audit.log | audit2allow -M apache_logs

如果您想手动验证或修改生成的规则审核2允许,使用选项生成源格式的模块-m。如果您愿意,您可以验证和编辑生成的模块源。完成后,您需要构建模块。步骤在手册页例子。

相关内容