尝试使用 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
}
非常感谢!
我正在尝试将 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
}
非常感谢!