我无法让 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_t
,syslogd_t
肯定可以写入。
你应该不是只需将 中的文件重新标记/Testing
为var_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 文件),就像我上面的新代码片段一样,将其标记/Testing
为var_log_t
您必须……
答案2
selinux 会阻止您在 /var/log 之外写入日志。您可以测试通过关闭它暂时的
setenforce 0
然后它应该开始写入那个新的日志目录。