我有一个在 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
。如果您愿意,您可以验证和编辑生成的模块源。完成后,您需要构建模块。步骤在手册页例子。