RSyslog 无法处理位于 /var/log 之外的日志文件

RSyslog 无法处理位于 /var/log 之外的日志文件

我无法让 rsyslog 写入位于 /var/log 以外的目录中的日志文件。

服务器是 RHELS 5.6,大部分采用默认配置。除了 rsyslog 特定的更改(向 iptables 添加规则等)之外

如果我在 /etc/rsyslog.conf 中指定以下内容,它就会起作用:

local6.* /var/log/MyLog.log

但是,如果我在位置 /Testing/MyLog.log 创建一个日志文件,在其上执行 chmod -R 777,然后将配置更新为:

local6.* /Testing/MyLog.log

我感到很困惑,因为我使用 chown 和 chmod 设置 /Testing/MyLog.log (和目录)具有与日志 /var/log/MyLog.log 相同的用户:组和权限(根据 ls -la 的输出)。

我做错了什么?这可能吗?我甚至尝试过在 /var/log 中创建符号链接,但似乎都不起作用。我尝试过 rsyslog 网站上记录的各种配置选项。

答案1

SELinux 将阻止标记为 的进程syslogd_t写入(可能)标记为 的文件default_t。您需要为文件添加syslogd_t可写入的标签。 中的文件/var/log大多标记为var_log_tsyslogd_t肯定可以写入。

你应该不是只需将 中的文件重新标记/Testingvar_log_t,因为当有人在下次启动或运行时执行自动重新标记时,这必然会在某个时候中断restorecon -FvR /

相反,编写一个小策略,自动一致地标记您的文件/Testing。这是入门指南。您的策略文件可能类似于以下内容:

/Testing(/.*)?    --    gen_context(system_u:object_r:var_log_t)

然而,编写 SELinux 策略有点棘手。这就是为什么你应该把东西放在默认位置。

不过,我个人觉得日志记录确实应该放在 中/var/log。它存在是有原因的。无论你认为写入 的理由有多充分/Testing,写入 之类的内容可能更好/var/log/testing

编辑:不,不,不,不,不。这样不行。这太愚蠢了。您不想编写允许syslogd_t写入的策略var_log_t,因为默认策略已经允许写入。您需要编写文件上下文规则(.fc 文件),就像我上面的新代码片段一样,将其标记/Testingvar_log_t您必须……

答案2

selinux 会阻止您在 /var/log 之外写入日志。您可以测试通过关闭它暂时的

setenforce 0

然后它应该开始写入那个新的日志目录。

相关内容