systemd-journald 服务分析系统日志
实验环境:本地 Centos 7 请勿在 vps 服务器上操作!!!
1 systemd-journald 介绍
systemd-journald 是一个收集并存储各类日志数据的系统服务。 它创建并维护一个带有索引的、
结构化的日志数据库, 并可以收集来自各种不同渠道的日志。
systemd 是内核启动后的第一个用户进程,PID 为 1,是所有其它用户进程的父进程。所有服务的
启动运行日志都可以记录到 systemd-journald 中,日志守护进程会以安全且不可伪造的方式自动收集
每条日志的元数据。默认情况日志是存储在内存中的,系统重启后都会丢失。
黑客入侵系统后一般会将系统日志清空,以达到清理痕迹的作用,如果日志被黑客清空我们就无法通
过日志来分析黑客入侵系统后都做了哪些事情,/var/在很多情况下黑客在清理日志的时候都会忽略内存
中的日志。
2 systemd-journald 持久化配置
由于日志默认存储在内存中,重启就会失效,如果想保存日志可以通过持久化配置将日志保存到本
地。
默认的配置文档中所有的参数都是默认值。
[root@xuegod63 ~] vim /etc/systemd/journald.conf
[Journal]
#Compress=yes
#Seal=yes
#SplitMode=uid
#SyncIntervalSec=5m
#RateLimitInterval=30s
#RateLimitBurst=1000
#SystemMaxUse=
#SystemKeepFree=
#SystemMaxFileSize=
#RuntimeMaxUse=
#RuntimeKeepFree=
#RuntimeMaxFileSize=
#MaxRetentionSec=
#MaxFileSec=1month
#ForwardToSyslog=yes
#ForwardToKMsg=no
#ForwardToConsole=no
#ForwardToWall=yes
#TTYPath=/dev/console
#MaxLevelStore=debug
#MaxLevelSyslog=debug
#MaxLevelKMsg=notice
#MaxLevelConsole=info
#MaxLevelWall=emerg
#LineMax=48K
新建一个配置文档,模板文件我们就不修改了。
[root@xuegod63 ~] mkdir /etc/systemd/journald.conf.d
[root@xuegod63 ~] vim /etc/systemd/journald.conf.d/99-prophet.conf
[Journal]
# 持久化保存到磁盘
Storage=persistent
# 压缩历史日志
Compress=yes
SyncIntervalSec=5m
RateLimitInterval=30s
RateLimitBurst=1000
# 最大占用空间 10G
SystemMaxUse=10G
# 单日志文件最大 200M
SystemMaxFileSize=200M
# 日志保存时间 2 周
MaxRetentionSec=2week
# 不将日志转发到 syslog
ForwardToSyslog=no
Storage 参数详解:
“volatile” 表示仅保存在内存中,也就是仅保存在/run/log/journal 目录中(将会被自动按需创建)。
“persistent” 表示优先保存在磁盘上, 也就优先保存在 /var/log/journal 目录中(将会被自动按
需创建), 但若失败(例如在系统启动早期"/var"尚未挂载), 则转而保存在 /run/log/journal 目录中
(将会被自动按需创建)。
“auto”(默认值) 与 “persistent” 类似, 但不自动创建 /var/log/journal 目录, 因此可以根据
该目录的存在与否决定日志的保存位置。
“none” 表示不保存任何日志(直接丢弃所有收集到的日志), 但日志转发(见下文)不受影响。 默认
值是 “auto”
重启服务使配置文件生效
[root@xuegod63 ~] systemctl restart systemd-journald
配置持久化后日志文件从临时文件目录/run/log/journal 保存至/var/log/journal 目录
[root@xuegod63 ~] ll /var/log/journal/
drwxr-xr-x 2 root root 28 Nov 5 15:44 054c89aaafa04dccbc3f844cfd502639
缺点:文件体积大,也容易被发现。
3 journalctl 查询日志
直接查询,默认查询规则是从旧到新排序。
[root@xuegod63 ~] journalctl
从新到旧排序使用-r 参数
[root@xuegod63 ~] journalctl -r
查看指定服务日志
[root@xuegod63 ~] journalctl -u sshd
对比系统日志文件
[root@xuegod63 ~] tail -n 4 /var/log/secure
系统日志多一条 pam_unix
实时查看最新日志。
[root@xuegod63 ~] journalctl -f
1、新建终端安装软件
[root@xuegod63 ~] yum install -y lsof
2、返回实时日志窗口查看
Nov 05 16:01:38 xuegod63.cn yum[10338]: Installed: lsof-4.87-6.el7.x86_64
问题:Centos 默认不记录系统命令 Ctrl+c 关闭实时窗口,配置系统日志记录系统命令。
3、配置文件中将 PROMPT_COMMAND 输出到系统日志中
[root@xuegod63 ~] vim /etc/bashrc
export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]:
$(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'
readonly PROMPT_COMMAND
构造消息日志过程:首先通过 history 1 取出当前执行的命来,$?获取该命令执行的返回值。
4、 logger -p local6.debug 自定义消息日志。
readonly PROMPT_COMMAND 设置为只读,防止被修改。
配置完成后重新打开终端窗口即可成效。
注:该配置也可配置到/etc/profile 中,两个位置都可以。
[root@xuegod63 ~] ifconfig
5、查看实时日志
[root@xuegod63 ~]# journalctl -f
Nov 05 16:50:19 xuegod63.cn root[10780]: root [10734]: 2021-11-05 16:50:19 $ifconfig
[0]
由于前面我们通过配置/etc/profile 对系统日志记录格式进行了自定义,所以这里获取到的信息会有
2 个时间戳,如果觉得重复可以去除/etc/profile 中对历史命令的自定义。
指定查询时间
[root@xuegod63 ~] journalctl --since "2021-11-05 00:00:00" --until "2021-11-05 17:00:00"
–since 定义开始时间
–until 定义结束时间
两个参数可以单独指定,仅指定开始日期获取开始日期后所有日志,仅指定结束日期获取结束日期前
所有日志。日期格式必须是:YYYY-MM-DD HH:MM:SS
指定输出格式
[root@xuegod63 ~] journalctl -o short-precise
输出的时间更加精细,日志信息简洁。
输出详细信息
[root@xuegod63 ~] journalctl -o verbose
可信字段是指名称以下划线开头的字段。 这些字段由日志守护进程添加,客户端无法掌控这些字段
的内容, 因此是"可信的"。详细信息中的字段都可以作为查询条件使用。
通过可信字段查询指定用户的日志
[root@xuegod63 ~] journalctl _UID=0 -n 5
注:可信字段必须带有下划线
实战清理系统日志后使用 systemd-journald 分析日志
新建用户
[root@xuegod63 ~] useradd xuegod
[root@xuegod63 ~] echo "123456" | passwd --stdin xuegod
kali 通过 xuegod 用户登录 centos
┌──(root xuegod53)-[~]
└─ ssh xuegod@192.168.1.63
切换到 root 用户
[xuegod@xuegod63 ~]$ su - root
小伙子非常凶狠直接清空了日志
[root@xuegod63 ~] echo > /var/log/secure
[root@xuegod63 ~] echo > /var/log/messages
[root@xuegod63 ~] echo > /var/log/lastlog
[root@xuegod63 ~] echo > /var/log/wtmp
[root@xuegod63 ~] echo > /var/log/btmp
登录系统进行排查
[root@xuegod63 ~] last
wtmp begins Fri Nov 5 17:46:48 2021
[root@xuegod63 ~] lastlog
可以看到日志都被删除了无法得知黑客做了什么。
查看日志文件修改时间
[root@xuegod63 ~] cd /var/log/
[root@xuegod63 log] stat secure
File: ‘secure’
Size: 365 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 34004243 Links: 1
Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2021-11-05 17:44:43.990999926 +0800
Modify: 2021-11-05 17:46:48.017997318 +0800
Change: 2021-11-05 17:46:48.017997318 +0800
Birth: -
得知文件是 17:46 被修改。
查询 17:46 前所有日志,避免误差,加一分钟 17:47,实战中前后信息都要看。查看文件时间只能
确认这个时间内这个文件被修改了,并不是绝对时间。
搜索关键词
[root@xuegod63 log] journalctl --until "2021-11-05 17:47:00" -o short-precise
/secure
可以看到黑客通在 192.168.1.53 通过 ssh 服务登录 xuegod 用户,su - root 切换到 root 用户清
空了日志。