尝试使用 syslog 中的输出通道指定文件权限

Try to specify file permissions using Output Channels in syslog

我正在尝试将 syslog 与输出通道一起使用来创建一些日志文件,我需要它们具有特定的所有者和权限

在 /etc/rsyslog 中,我正在写以下内容:

$umask 0027
$FileGroup the-mothers-of-invention

$outchannel rotate1,/path/mylog.log, 10000000,/path/my-rotate-script.sh /path mylog 99 .log 10000000

$template myTemplate,"%timegenerated:1:23:date-rfc3339%+%timegenerated:28:36:date-rfc3339% %syslogpriority-text:1:2:uppercase%hostname%:%msg%\n"


if $app-name == 'MYAPP' then {
    *.*  :omfile:$rotate1;myTemplate
    stop
    }

使用此配置,我看到第一个 mylog.log 文件是使用权限 640 和组 ID [=23= 创建的]the-mothers-of-invention,但在达到 10mb 后,脚本被正确执行(我使用了 mv 命令)并且我看到文件 mylog__.log 已创建并且它继承了所有者和原始 mylog.log 文件的权限(到目前为止,一切正常),but,当新的 mylog.log 文件由 syslog 自动创建,它是使用默认所有者 (root:root) 和权限 (644) 创建的。

我已经阅读了很多信息和手册(rsyslog 的),但我没有看到任何关于结合权限更改和输出通道的信息。

有猜想吗?

谢谢!

$FileCreateMode 参数允许指定 rsyslogd 创建新文件的创建模式。它允许 rsyslog 创建仅对其运行的用户具有读写权限的文件。

首先,取消对 rsyslog 的任何限制:

$umask 0000

然后可以设置创建模式:

$FileCreateMode 0600
*.* /var/log/file-with-0600
$FileCreateMode 0644
*.* /var/log/file-with-0644

如果有监听器必须绑定到1024以下的网络端口,rsyslogd总是需要以root身份启动。 例如,UDP 侦听器通常需要侦听 514,因此 rsyslogd 需要以 root 身份启动。

这意味着如果您有上述任何侦听器,则无法更改文件所有者 - 至少如果您正在使用 rsyslog 创建文件。

如果不是这种情况,您可以使用 $PrivDropToGroup and/or $PrivDropToUser 配置参数来指定 and/or 用户组 rsyslogd 应该删除到初始化后。

# These may require root privilege
$FileOwner syslog
$FileGroup adm
$PrivDropToUser syslog
$PrivDropToGroup syslog

正如 eDonkey 所说,因为我没有使用任何 UDP 侦听器,所以我在实例化 outChannel 之前包含了 FileGroup 和 PrivDropToGroup,如下所示:

$umask 0000
$outchannel rotate1,/path/mylog.log, 10000000,/path/my-rotate-script.sh /path mylog 99 .log 10000000

$template myTemplate,"%timegenerated:1:23:date-rfc3339%+%timegenerated:28:36:date-rfc3339% %syslogpriority-text:1:2:uppercase%hostname%:%msg%\n"

if $app-name == 'MYAPP' then {
   $FileCreateMode 0640
   $FileGroup the-mothers-of-invention
   $PrivDropToGroup the-mothers-of-invention
   *.*  :omfile:$rotate1;myTemplate
   stop
}

非常感谢!