配置 SELINUX 以允许记录到 /var/log 之外的文件

Ste*_*son 8 linux selinux rsyslog syslog

我有一个守护进程,它使用 syslog(3) 登录到一个不是 /var/log 后代的文件。目前,这需要禁用 SELINUX。如何配置启用的 SELINUX 以允许此日志记录?

我是 SELINUX 新手。任何指导或建议将不胜感激。

slm*_*slm 10

如果您查看为目录 /var/log 设置的上下文,您会注意到以下内容。

首先,该目​​录/var/log具有以下 selinux 上下文集:

$ ls -Z /var | grep "log$"
drwxr-xr-x. root root    system_u:object_r:var_log_t:s0   log
Run Code Online (Sandbox Code Playgroud)

其次,日志文件 ,/var/log/messages没有额外的上下文:

$ ls -Z /var/log/messages
-rw------- root root ?                                /var/log/messages
Run Code Online (Sandbox Code Playgroud)

因此,您似乎只需要/var/log在您计划将此附加日志文件写入到的任何目录上设置一个类似于上下文的上下文。像这样的事情应该这样做。

方法#1:复制selinux标签

下面将复制与之关联的上下文/var/log并将其应用到/opt/blah

$ mkdir /opt/blah
$ ls -Z /opt | grep blah
drwxr-xr-x  root root ?                                   blah

# label directory with context
$ chcon --reference /var/log /opt/blah

# see the newly added context
$ ls -Z /opt/ | grep blah
drwxr-xr-x. root root    system_u:object_r:var_log_t:s0   blah
Run Code Online (Sandbox Code Playgroud)

方法#2:直接应用上下文

您也可以像这样直接应用它们:

$ chcon system_u:object_r:var_log_t:s0 /opt/blah
Run Code Online (Sandbox Code Playgroud)

我远离一个可以确认需要运行这些命令的系统,但我相信您还需要告诉 SELinux 将这些新应用的上下文获取到文件系统中。

$ semanage fcontext -a -t var_log_t "/opt(/.*)?"
$ restorecon -R -v /opt
Run Code Online (Sandbox Code Playgroud)

确认更改

# confirm identical to /var/log context
$ ls -Z /var/ | grep "log$"
drwxr-xr-x. root root    system_u:object_r:var_log_t:s0   log
Run Code Online (Sandbox Code Playgroud)

参考