关于一起linux secure安全日志写入异常分析处理

Posted 羌俊恩

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于一起linux secure安全日志写入异常分析处理相关的知识,希望对你有一定的参考价值。

一、问题描述

某业务系统按照集团要求接入了4A系统,但是巡检过程中发现,某天出现异常绕行日志,经现场询问该时间段并未有人异常登录系统,所以最开始怀疑是被入侵了,还修改了密码,但检查日志发现,情况并非如此,反而比想象得要复杂得多,实际就是authpriv日志突然插入了过去时间段的一段日志,故此本文对此现象进行记录,以供后续参考。


检查发现2022年5月份的secure日志里混入了2021年10月份的日志信息,很是不解。


二、分析处理

1) 日志报错分析:

sshd[17263]: Did not receive identification string from 192.168.1.1 #表1.1ssh本地主机建立连接时,返回时出现问题,认证信息丢弃

2)查看与绕行相关的日志,发现异常,日志被写入旧的脏数据



执行Pinky命令将显示所有登录用户,而不仅仅是您自己。查看当前ssh会话中的ip

echo $SSH_CONNECTION|awk 'print $1'
echo $SSH_CLIENT|awk 'print $1' 


其中:

The imjournal module bellow is now used as a message source instead of
odLoad imuxsock # provides support for local system logging (e.g. via l
odLoad imjournal # provides access to the systemd journal
ModLoad imklog # reads kernel messages (the same are read from journald
ModLoad immark # provides --MARK-- message capability

第2次绕行时间:

两次都是rsyslog重启时;报错:

每隔几分钟rsyslog输出-rsyslogd:恢复操作’操作3’(模块’builtin:omfile’)[v8.32.0尝试http://www.rsyslog.com/e/2359]
rsyslogd: action ‘action 4’ resumed (module ‘builtin:omfile’) [v8.24.0-57.el7_9.1 try http://www.rsyslog.com/e/2359

3)关于 rsyslog的2359错误描述如下:rsyslog error 2359;更多其他报错,参看rsyslog errormessage,或查看github社区

Status: action was resumed (used for reporting). #状态:操作已恢复(用于报告)。

This means a previously suspended action has recovered. Recovery happens e.g. when the action can reconnect to a server or some resource starvation is solved. This is an informational message telling you rsyslog now executes the action again. #这意味着先前暂停的操作已恢复。恢复发生,例如当操作可以重新连接到服务器或解决某些资源不足时。这是一条信息性消息,告诉您 rsyslog 现在再次执行该操作。

Note: due to a bug in old rsyslog versions (e.g. 8.24.0) an “action was suspended” message is not necessarily reported. Thus the resumption message may be the only way to detect something went wrong. Version 8.1904.0 and above will much more reliably report action suspension.##注意:由于旧 rsyslog 版本(例如 8.24.0)中的错误,不一定会报告“操作已暂停”消息。因此,恢复消息可能是检测出问题的唯一方法。版本 8.1904.0 及更高版本将更可靠地报告操作暂停。

执行: rsyslogd -v //输出如下

rsyslogd 8.24.0-57.el7_9.1, compiled with:
PLATFORM: x86_64-redhat-linux-gnu
PLATFORM (lsb_release -d):
FEATURE_REGEXP: Yes
GSSAPI Kerberos 5 support: Yes
FEATURE_DEBUG (debug build, slow code): No
32bit Atomic operations supported: Yes
64bit Atomic operations supported: Yes
memory allocator: system default
Runtime Instrumentation (slow code): No
uuid support: Yes
Number of Bits in RainerScript integers: 64

4)Rsyslog配置文件里:/etc/rsyslog.conf

authpriv.* /var/log/secure #写入secure日志

说明:

日志等级:

5) 关于: rsyslogd[29901]: imjournal: 12490 messages lost due to rate-limiting的报错:

vim /etc/rsyslog.conf #添加下面配置

$IMUXSockRateLimitInterval 0
$SystemLogRateLimitInterval 0
$imjournalRatelimitInterval 0
$imjournalRatelimitBurst 0

说明:

所谓Rate limit就是指,在某个固定的时间段内,syslog最多允许打印的log信息数量(多出的log信息将被丢弃)。由配置文件/etc/rsyslog.conf中以下两个配置项决定:
$SystemLogRateLimitInterval [Number1]: Number1 为设定的限制的时间间隔大小
$SystemLogRateLimitBurst [Number2]: Number2 为在设定的限制的时间间隔内,最多输出的log信息数量。
在设定完后,则表示在每一个Number1时间间隔内,如果超过Number2个数的log信息将会被去除。默认Number1为5秒钟,Number2为200.但如果我们不希望,在打印的log时有丢失,则可以在/etc/rsyslog.conf中添加或者设置:
$SystemLogRateLimitInterval 0
当然设置完成后,一定要记得重新启动rsyslog服务(/etc/init.d/rsyslog resart或者service rsyslog restart)
Note:rsyslog 5.7.1之后的版本才添加了此功能。

上述报错也可能因存储空间不足,导致后续来的日志无法写入,出发超速报错;

6)关于Fix rsyslog error action… resumed, action…

rsyslogd[944366]: action 'action-13-builtin:omfile' resumed (module 'builtin:omfile') [v8.2001.0 try https://www.rsyslog.com/e/2359 ]
...... rsyslogd[944366]: action 'action-13-builtin:omfile' suspended (module 'builtin:omfile'), retry 0. There should be messages before this one giving the reason for suspension. [v8.2001.0 try https://www.rsyslog.com/e/2007 ]
...... rsyslogd[944366]: action 'action-13-builtin:omfile' resumed (module 'builtin:omfile') [v8.2001.0 try https://www.rsyslog.com/e/2359 ]
……
rsyslogd: imjournal: journal reloaded... [v8.24.0 try http://www.rsyslog.com/e/0 ]
……
Failed to open system journal: No space left on device
……
rsyslogd: action 'action 4' resumed (module 'builtin:omfile') [v8.24.0-57.el7_9.1 try http://www.rsyslog.com/e/2359 

说明: rsyslog assigns names like “action 4” to actions that aren’t explicitly named. So, the four action encountered in your configs is causing the issue. To tell what that is you must also include the content of the following as they appear early in your master config file.

$IncludeConfig /run/rsyslog/additional-log-sockets.conf
$IncludeConfig /etc/rsyslog.d/*.conf

打开/etc/rsyslog.conf 注释以下选项:

#KaTeX parse error: Expected 'EOF', got '#' at position 18: …leOwner syslog #̲FileGroup adm
#KaTeX parse error: Expected 'EOF', got '#' at position 21: …reateMode 0640 #̲DirCreateMode 0755
#KaTeX parse error: Expected 'EOF', got '#' at position 12: Umask 0022 #̲PrivDropToUser syslog
#$PrivDropToGroup syslog

完成后,执行systemctl restart rsyslog

关于omfile(文件输出模块,它是一个内置模块):参看:rsyslog 8.2202.0文档

对于:May 20 12:14:26 3-bc-50-hb-centos7 rsyslogd[3887]: imjournal: sd_journal_get_cursor() failed: Cannot assign requested address [v8.24.0-57.el7_9.1] 也是rsyslog系统异常继续写日志的表现。

另外修改:journal配置文件/etc/systemd/journald.conf,写入如下,重启systemd-journald服务:

Storage=persistent
RateLimitInterval=0
RateLimitBurst=0
SyncIntervalSec=2

说明:RateLimitIntervalSec= 用于设置一个时间段长度,默认值是30秒。 RateLimitBurst= 用于设置一个正整数,表示消息条数,默认值是10000条。 表示在 RateLimitIntervalSec= 时间段内, 每个服务最多允许产生 RateLimitBurst= 数量(条数)的日志。 在同一个时间段内,超出数量限制的日志将被丢弃,直到下一个时间段才能再次开始记录。 对于所有被丢弃的日志消息,仅用一条类似"xxx条消息被丢弃"的消息来代替。 这个限制是针对每个服务的限制,一个服务超限并不会影响到另一个服务的日志记录。 RateLimitIntervalSec= 可以使用下面的时间单位: “ms”, “s”, “min”, “h”, “d”;更多参看journald.conf 中文手册

7)debug调试rsyslog:编辑/etc/rsyslog.conf

$DebugFile #设置调试文件名
$DebugLevel <0|1|2> -#设置相应的调试级别,其中 0 表示关闭调试,1 表示激活按需调试(但关闭调试模式),2 表示完全调试模式。

或使用命令行调试:

rsyslogd -N5 -d  ##它会在前台(stdout)交互输出详细信息供分析

更多命令参数,请查看rsyslogd

手动发送syslog消息:

logger命令可以发送消息到rsyslog服务。-p 参数 可以指定发送消息的设备类型和优先级,这对测试rsyslog服务配置更改很有用。通过logger产生一条debug级别日志“ hello world”,推送到日志设备local7

logger -p local7.notice "hello world"

8)相关经验表明,日志文件权限问题也会导致rsyslog报错频繁resume;检查日志权限:

stat /var/log/auth.log

9)检查去年的日志,执行:

journalctl --since "2022-05-17" --until "2022-05-29"



从上图之前又suspend的action 4,且报错:

imjournal: fclose() failed for path: ‘/var/lib/rsyslog/imjournal.state.tmp’: No space left on device [v8.24.0-57.el7_9.1 try http://www.rsyslog.com/e/2027 ]
action ‘action 4’ suspended, next retry is Thu Dec 9 09:32:06 2021 [v8.24.0-57.el7_9.1 try http://www.rsyslog.com/e/2007 ]
imjournal: fscanf on state file `/var/lib/rsyslog/imjournal.state’ failed [v8.24.0-57.el7_9.1 try http://www.rsyslog.com/e/2027 ]
imjournal: ignoring invalid state file [v8.24.0-57.el7_9.1]
rsyslogd[16766]: imjournal: begin to drop messages due to rate-limiting
systemd-journal[14594]: Suppressed 41268 messages from /system.slice/rsyslog.service
imjournal: fclose() failed for path: ‘/var/lib/rsyslog/imjournal.state.tmp’: No space left on device [v8.24.0-57.el7_9.1 try http:///www.rsyslog.com/e/2027 ]
rsyslogd[16766]: imjournal: 2761893 messages lost due to rate-limiting
rsyslogd[16766]: action ‘action 4’ suspended, next retry is Thu May 19 23:17:51 2022 [v8.24.0-57.el7_9.1 try http://www.rsyslog.com/e/2007 ]

即:rsyslog默认30s后会重新resume之前的suspended的action。可通过修改$ActionResumeInterval参数来修改,默认就是30s;比如制定60s:$ActionResumeInterval 60;注意:当一个action被挂起(例如无法连接目标)时,该action将在配置的时间间隔内resume。此后,将重试。如果多次重试失败,间隔会自动延长。这是为了防止重试使用过多的资源。每重试 10 次后,间隔会自行延长。准确地说,实际的时间间隔是 (numRetries / 10 + 1) * $ActionResumeInterval。所以第 10 次尝试后默认为 60,第 100 次尝试后默认为 330。

关于:rsyslog error 2007官方解释如下:

这是一个常见错误,诱发原因很多,但实际中,它通常与暂停行动有关,且它带有类似:action ‘action 1’ suspended, next retry is Thu Dec 9 10:43:07 2021 [v8.24.0-57.el7_9.1 try http://www.rsyslog.com/e/2007 ] 这样的警示信息。此错误消息的常见情况是 rsyslog.conf 包含写入 xconsole 管道的指令,但从未读取此管道。可通过删除这些选项来删除该错误消息的出发,它常位于 rsyslog.conf 的末尾;

另外,日志权限问题也会导致2007 error,比如你曾自定义了日志规则,在 /var/log 下的子目录中创建一个日志文件,即 /var/log/xxx/x.log。,运行 rsyslog(8) 的 UID 或 GID 没有对该目录的写入权限,也就无法创建所述日志文件,触发上述警告;或者/var/log/syslog本身权限异常。相关经验表明:在使用 systemd 进行 dist-upgrade 后也会发生同样的情况,你可能在日志中看到类似一行将输出发送到例如/dev/ttyN;systemd 以 syslog 用户身份启动 rsyslog,对此无权,也会如此,可以对此进行授权,授予tty group属主和组syslog权限;

查事件发生的前后时间窗口:



从上图看从May 18 09:58:01存储就出现异常写满了;之后的10:36,写日志进行了重载, imjournal: journal reloaded…;即这时的rsyslog报告了写错误,可能OS 本身也产生了错误信息

May 19 23:09:21:rsyslog又重新reload了一次:


执行检查:

1、检查最近是否修改了 OS的rsyslog 配置更改但 rsyslog 未重新启动;仅当重新启动 rsyslog 时才会应用 Rsyslog 配置更改。同样,许多OS进程限制(如文件大小和多个权限设置)仅在进程重新启动时才适用。可尝试重启rsyslog服务来处理;
2、是否最近在rsyslog里配置了Dropping privileges($PrivDropToGroup 和 $PrivDropToUser ),如果是这样,则删除的用户或组可能根本没有正确的权限。尝试注释掉这些选项,看root权限是否有效。OS要求,rsyslog使用1024 以下网络端口的侦听器时,则 rsyslogd 必须以 root 身份启动。$PrivDropToGroup(启动后应运行的组 rsyslog 的名称) 和 $PrivDropToUser(启动后应在用户名 rsyslog 下运行) 配置项可指定 rsyslogd 在初始化后应删除的组和/或用户,冒充另一个用户和/或组来放弃特权的能力。这样,rsyslog守护程序将在没有高权限的情况下运行(当然,取决于指定的用户帐户的权限)。更多配置请参看Rsyslog全局配置说明
3、检查SELinux 是否阻止 rsyslog 访问文件;禁用 SELinux尝试,如果解决就重新配置selinux策略;
4、检查是否通过 systemd 运行 rsyslog?检查systemd里是否配置了 limits?更多参看systemd.exec
!在这里插入图片描述
5、系统配置中是否指定了任何全局限制;systemd 会忽略它们,如果你使用 systemd,你需要检查 systemd 配置和 rsyslog的服务unit文件
6、系统(暂时)是否空间不足?对于间歇性问题尤其如此。
7、对于更难发现的问题,rsyslog具有集成的调试支持。debug用来寻找程序或插件错误,尤其时配置错误;在线调试,向rsyslogd发送SIGUSR1(打开和关闭调试消息信号)执行:
kill -USR1 $(cat /var/run/rsyslogd.pid) 或kill -USR1 `cat /var/run/rsyslogd.pid` #发送一次以打开调试日志记录,然后再次发送以再次关闭调试日志记录;当以任何调试模式(包括按需模式)运行时,可以通过按ctl-c中止rsyslogd的交互式实例。

systemd-journal[14594]: Suppressed 57766 messages from /system.slice/rsyslog.service

10)查询目录下包含指定内容的文件:

find /var/log/ -type f -name '*.log'|xargs grep -n 'ssh'

11)关于日志中大量systemd Starting Session ### of user root (日志中充斥着大量systemd消息:已创建切片,正在启动会话)

systemd: Started Session 303794 of user root. ##环境CentOS Linux release 7.9.2009 (Core)


可参看Redhat KB,这类消息时正常的,只要登录就能看到系统不断刷新会话,根本原因还是系统计划任务导致的;查看/etc/cron.d/0hourly下计划任务:有的系统下有sysstat系统计划任务文件,现场实际没有,现场的计划任务如下:

时间间隔与日志中systemd: Started Session 303792 of user root的时间间隔一致,因此,我们可判断是该计划任务中的脚本以root身份执行时,就产生一次systemd: Started Session,有2个任务就执行2次;另外,类似经验也作证:当你为用户配置了定时任务时,用户执行定时任务时,也会启动会话,产生这类日志;

关于Linux 的session,我们常说的 Linux session 一般是指 shell session。Shell session 是终端中当前的状态,在终端中只能有一个 session。 当我们打开一个新的终端时,总会创建一个新的 shell session。这表明会话是我们和shell交互的一个过程。就进程间的关系来说,session 由一个或多个进程组组成。一般情况下,来自单个登录的所有进程都属于同一个 session。 关于会话slice, 对应的slice 文件,可以在/sys/fs/cgroup 下面查看,对应各个资源组下面,看相应的 slice 的资源限制;

systemd-logind: Removed session 313089 #这种表用户退出了,进行了删除用户会话

会话是由会话中的第一个进程创建的,一般情况下是打开终端时创建的 shell 进程。该进程也叫 session 的领头进程。Session 中领头进程的 PID 也就是 session 的 SID,执行以下命令查看:

ps -o pid,ppid,pgid,sid,tty,comm

另外一篇Linux 系统中 Message 中的 Session 日志详解也对此作了较好的分析,可参看理解。这里也截取了文中关于一个万早的session过程:

systemctl -t slice  #查看当前资源分片,即用户slice的
systemctl status user-0.slice  #查看root 用户的 slice,输出如下:

● user-0.slice - User Slice of root
   Loaded: loaded (/run/systemd/system/user-0.slice; static; vendor preset: disabled)
  Drop-In: /run/systemd/system/user-0.slice.d
           └─50-After-systemd-logind\\x2eservice.conf, 50-After-systemd-user-sessions\\x2eservice.conf, 50-Description.conf, 50-TasksMax.conf
   Active: active since Thu 2021-10-21 13:20:01 CST; 6 months 29 days ago
   CGroup: /user.slice/user-0.slice
           ├─session-280461.scope
           │ ├─17031 java -jar dialup-controller-10080.jar
           │ ├─17651 java -jar dialup-controller-10081.jar
           │ ├─17723 java -jar dialup-controller-10082.jar
           │ ├─17873 java -jar dialup-controller-10083.jar
           │ ├─17972 java -jar dialup-controller-10084.jar
           │ ├─18058 java -jar dialup-controller-10085.jar
           │ ├─18150 java -jar dialup-controller-10086.jar
           │ ├─18355 java -jar dialup-controller-10087.jar
           │ ├─18635 java -jar dialup-controller-10088.jar
           │ ├─18752 java -jar dialup-controller-10089.jar
           │ ├─19107 java -jar dialup-controller-10091.jar
           │ ├─19216 java -jar dialup-controller-10092.jar
           │ ├─19403 java -jar dialup-controller-10093.jar
           │ ├─19625 java -jar dialup-controller-10094.jar
           │ └─19720 java -jar dialup-controller-10095.jar
           ├─session-313536.scope
           │ ├─23068 systemctl status user-0.slice
           │ ├─25533 sshd: root@pts/0
           │ └─25538 -bash
           ├─session-313265.scope
           │ ├─ 2324 login -- root
           │ └─28002 -bash
           └─session-228304.scope
             ├─9838 ./titanagent -d
             └─9840 titan_monitor -p 9838 -l 50 -c 150 -g 0

May 21 22:00:01 3-bc-39-hb-centos7 CROND[20823]: (root) CMD (/bin/bash /etc/titanagent/agent_update_exception.sh >> /var/log/titanagent/check.o.log 2>> /var/log/titanagent/check.e.log)
May 21 22:01:01 3-bc-39-hb-centos7 CROND[21119]: (root) CMD (run-parts /etc/cron.hourly)
May 21 22:02:01 3-bc-39-hb-centos7 CROND[21275]: (root) CMD (/bin/bash /etc/titanagent/agent_monitor.sh >> /var/log/titanagent/edog.o.log 2>> /var/log/titanagent/edog.e.log)
May 21 22:02:01 3-bc-39-hb-centos7 CROND[21276]: (root) CMD (/bin/bash /etc/titanagent/agent_update_exception.sh >> /var/log/titanagent/check.o.log 2>> /var/log/titanagent/check.e.log)
May 21 22:04:01 3-bc-39-hb-centos7 CROND[21756]: (root) CMD (/bin/bash /etc/titanagent/agent_update_exception.sh >> /var/log/titanagent/check.o.log 2>> /var/log/titanagent/check.e.log)
May 21 22:04:01 3-bc-39-hb-centos7 CROND[21757]: (root) CMD (/bin/bash /etc/titanagent/agent_monitor.sh >> /var/log/titanagent/edog.o.log 2>> /var/log/titanagent/edog.e.log)
May 21 22:06:01 3-bc-39-hb-centos7 CROND[22195]: (root) CMD (/bin/bash /etc/titanagent/agent_monitor.sh >> /var/log/titanagent/edog.o.log 2>> /var/log/titanagent/edog.e.log)
May 21 22:06:01 3-bc-39-hb-centos7 CROND[22196]: (root) CMD (/bin/bash /etc/titanagent/agent_update_exception.sh >> /var/log/titanagent/check.o.log 2>> /var/log/titanagent/check.e.log)
May 21 22:08:02 3-bc-39-hb-centos7 CROND[22639]: (root) CMD (/bin/bash /etc/titanagent/agent_update_exception.sh >> /var/log/titanagent/check.o.log 2>> /var/log/titanagent/check.e.log)
May 21 22:08:02 3-bc-39-hb-centos7 CROND[22640]: (root) CMD (/bin/bash /etc/titanagent/agent_monitor.sh >> /var/log/titanagent/edog.o.log 2>> /var/log/titanagent/edog.e.log)
Hint: Some lines were ellipsized, use -l to show in full.

如想抑制 /var/log/messages 中的这些日志条目,使用 rsyslog 创建丢弃过滤器,运行如下命令,然后重启服务:systemctl restart rsyslog:

echo 'if $programname == "systemd" and \\
($msg contains "Starting Session" or \\
$msg contains "Started Session" or \\
$msg contains "Created slice" or \\
$msg contains "Starting user-" or \\
$msg contains "Starting User Slice of" or \\
$msg contains "Removed session" or \\
$msg contains "Removed slice User Slice of" or \\
$msg contains "Stopping User Slice of") then stop' >/etc/rsyslog.d/ignore-systemd-session-slice.conf

注意:上述规则仅适用于本地 syslog 日志记录(/var/log/messages)但不适用于远程 syslog 服务器;该规则是系统syslog 事件发送到 syslog 服务器(Rsyslog)后读取的;应配置在配置项.@@sys-log server的上方。

12)综上及结合项目现场:

本次故障主要原因为:系统磁盘空间不足,日志积累导致分区使用占满,导致rsyslog系统服务异常,触发resume写入此前异常suspended的action任务resume到了当前日志;

根本原因: 关于rsyslog 从哪里resume执行对应的action的具体内容,未找到,还请各位大神补充。

当然也可尝试升级rsyslog版本尝试,执行:yum update rsyslog; 尴尬的后期,该现象又复现了一次,也是根分区耗尽,如下所示:

三、附录

1、rsyslog服务域systemd

2、系统中的重要日志文件

last 命令可以查看 wtmp 的信息,lastb 可以查看 btmp 的信息

3、linux安全日志secure说明

日志文件的格式包含以下 4 列:

事件产生的时间。
产生事件的服务器的主机名。
产生事件的服务名或程序名。
事件的具体信息。

示例如下:

Jun 5 03:20:46 localhost sshd[1630]:Accepted password for root from 192.168.0.104 port 4229 ssh2
# 6月5日 03:20:46 本地主机 sshd服务产生消息:接收从192.168.0.104主机的4229端口发起的ssh连接的密码
Jun 5 03:20:46 localhost sshd[1630]:pam_unix(sshd:session):session opened for user root by (uid=0)
#时间 本地主机 sshd服务中pam_unix模块产生消息:打开用户root的会话(UID为0)

4)ActionExecOnlyWhenPreviousIsSuspended

类型:动作配置参数;默认关闭

此参数允许指定是否应始终执行操作(“off”,默认值)或仅在前一个操作暂停时(“on”)。此参数与每个选择器功能的多个操作密切相关。例如,如果主服务器出现故障,它可以用于创建自动将目标服务器或数据库切换到(一组)备份的规则。请注意,此功能取决于输出模块中挂起功能的正确实现。所有内置输出模块都正确支持它(最重要的是数据库写入和系统日志消息转发器)。

此选择器处理它收到的所有消息 (.)。它尝试将每条消息转发到 primary-syslog.example.com(通过 tcp)。如果它无法访问该服务器,它会尝试 secondary-1-syslog.example.com,如果也失败,它会尝试 secondary-2-syslog.example.com。如果这些服务器都无法连接,则数据存储在 /var/log/localbuffer 中。请注意,只有在它们之前的一个不起作用时,才会使用辅助和本地日志缓冲区。所以理想情况下,/var/log/localbuffer 永远不会收到消息。如果其中一台服务器恢复运行,它会自动再次接管处理。英文原版请参看官方说明

配置示例:

$ActionExecOnlyWhenPreviousIsSuspended on
& @@secondary-1-syslog.example.com # & is used to have more than one action for
& @@secondary-2-syslog.example.com # the same selector - the multi-action feature
& /var/log/localbuffer
$ActionExecOnlyWhenPreviousIsSuspended off # to re-set it for the next selector

5)rsyslog的Actions

Action 对象描述了对消息要做什么。它们通过输出模块实现。更多参看:动作说明

6)ActionResumeInterval,默认30s

为所有后续操作设置 ActionResumeInterval。提供的时间间隔始终以秒为单位。因此,如果需要分钟,则乘以 60,如果需要小时,则乘以 3,600(不推荐)。

当一个动作被挂起(例如无法连接目的地)时,该动作将在配置的时间间隔内恢复。此后,将重试。如果多次重试失败,间隔会自动延长。这是为了防止重试使用过多的资源。每重试 10 次后,间隔会自行延长。准确地说,实际的时间间隔是 (numRetries / 10 + 1) * $ActionResumeInterval。所以第 10 次尝试后默认为 60,第 100 次尝试后默认为 330。

9)Rsyslog配置参考(rsyslog version: 8.2102.0-2)

#################
#### MODULES ####
#################

$ModLoad imuxsock # provides support for local system logging
$SystemLogRateLimitInterval 5  ##########################Commented this line out to fix.
$SystemLogRateLimitBurst 2500 #########################Commented this line out to fix.

$ModLoad imklog   # provides kernel logging support (previously done by rklogd)

###########################
#### GLOBAL DIRECTIVES ####
###########################

#
# Use traditional timestamp format.
# To enable high precision timestamps, comment out the following line.
#
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat

#
# Set the default permissions for all log files.
#
$FileOwner root
$FileGroup adm
$FileCreateMode 0640
$DirCreateMode 0755
$Umask 0022


$WorkDirectory /var/spool/rsyslog # where to place spool files
$ActionResumeInterval 5

$MainMsqQueueType LinkedList
$MainMsqQueueFileName failmain # unique name prefix for spool files
$MainMsqQueueMaxDiskSpace 5000M   # 500mb space limit (use as much as possible)
$MainMsqQueueSaveOnShutdown on # save messages to disk on shutdown
$MainMsqQueueType LinkedList   # run asynchronously
$MainQueueMaxFileSize 1M
$MainMsqResumeRetryCount -1    # infinite retries if host is down

$ActionQueueType LinkedList
$ActionQueueFileName failaction # unique name prefix for spool files
$ActionQueueMaxDiskSpace 5000M   # 500mb space limit (use as much as possible)
$ActionQueueSaveOnShutdown on # save messages to disk on shutdown
$ActionQueueType LinkedList   # run asynchronously
$ActionQueueMaxFileSize 1M
$ActionResumeRetryCount -1    # infinite retries if host is down

$MaxMessageSize 25600000
#$EscapeControlCharactersOnReceive off

###############
#### RULES ####
###############

#All logs to remote server
*.*                             @@10.114.168.223
$ActionExecOnlyWhenPreviousIsSuspended on
&@@10.114.168.224

#
# Emergencies are sent to everybody logged in.
#
*.emerg    


10)Rsyslog模块说明

Rsyslog 使用 $ModLoad 指令加载模块。常用的模块类型是 Input Modules 和 Output Modules。输入模块(Input Modules) 用于从多个来源收集(读取)消息,比如tcp/udp, 文本等:

其中,impstats可详细显示队列的相关统计信息,日志中将显示rsyslogd-pstats:样式;配置参考:每5s(默认是300s)生成一个统计信息,日志等级是7及以上(默认是6),日志写入/var/log/rsyslog-stats后丢弃。更多参看How to use impstat

$ModLoad impstats
$PStatInterval 5
PStatSeverity 7
syslog.=debug /var/log/rsyslog-stats&~

消息从 Input Modules 接收,然后传递给 Parser Modules,最终传递给 Output Module。输出模块(Output Modules)处理消息。通过它,可以格式化消息以及传递消息到不通的目标(target):

更多模块使用说明, 可以参考官方模块文档

11)systemd-journald和rsyslog

systemd-journald.service: 记录与服务、开机引导有关的日志,服务在运行的时候才有相关的日志,它以二进制文件的形式保存在内存中,如果系统被重启或关机之后,systemd-journald.service保存的日志就没有了。而rsyslog.service:就是把 systemd-journald.service 保存的二进制日志内容,整理转换成文本文档,并且会保存在 /var/log 中。rsyslog不能收集开启启动和其他服务启动的日志,这样通过journal弥补了。systemd-journald.service记录的日志是没有分类的,分类是 rsyslog 干的事情。

日志设备:

auth:pam(认证服务)产生的日志

authpriv:ssh,ftp等登录信息的验证信息

cron:计划任务相关

kern:内核

lpr:打印

mail:邮件

mark(syslog):rsyslog服务内部的信息,时间标识

news:新闻组

user:用户程序产生的相关信息

uucp:unix to unix copy, unix主机之间相关的通讯

local0~7:自定义的日志设备

12)日志轮替:

logrotate工具会轮转日志文件,以防止/var/log/目录下的日志文件占用文件空间过多。相关配置文件:/etc/logrotate.conf(默认规则)


以上是关于关于一起linux secure安全日志写入异常分析处理的主要内容,如果未能解决你的问题,请参考以下文章

linux如何查询指定日期的系统安全日志

linux sudo 命令

Linux sudo 详解

CentOS常用查看日志命令

Asp.Net Core Log4Net 配置分多个文件记录日志(不同日志级别)

mysql 的2个关于事务和安全性的参数