RSyslog不适用于位于/ var / log之外的日志文件

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

服务器是RHELS 5.6,大部分是默认configuration。 除了rsyslog特定的更改(添加到iptables的规则等)

如果我在/etc/rsyslog.conf中指定了以下内容,那么这很有效:

local6.* /var/log/MyLog.log

但是,如果我要在/Testing/MyLog.log上的chmod -R 777位置创build一个日志文件,那么它不起作用,然后将configuration更新为:

local6.* /Testing/MyLog.log

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

我究竟做错了什么? 这甚至有可能吗? 我甚至尝试在/ var / log中做一个符号链接,我试过似乎没有任何工作。 我玩过rsyslog网站上logging的各种configuration选项。

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

你不应该在/Testing var_log_t重新标记/Testing的文件,因为在某个时候有人在下一次启动时执行autorelabel或者运行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 ,因为默认策略已经允许这样做。 你需要编写filecontext规则(一个.fc文件),就像我上面的新片段,标签/Testingvar_log_t如果你必须…

然后selinux会阻止你在/ var / log之外写入日志。 你可以暂时closures它来testing它

 setenforce 0 

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