2 日志管理
## 两个服务都处理日志消息
$ systemd-journald #默认记入内存
$ rsyslog #默认记入硬盘
2.1 日志文件的作用
## 日志格式有:
时间日期 主机名 用户 执行命令 等
/var/log/message #大多数消息系统日志记录处
/var/log/secure #安全和身份验证登录相关日志文件
/var/log/maillog #与邮件相关日志
/var/log/cron #定时任务相关日志
/var/log/boot.log #与系统启动相关的消息记录
/var/log/dmesg #与系统启动相关的消息记录(硬件相关)
例1:检查哪个ip在暴力破解系统用户密码
# 在/var/log/secure文件中查找Failed相关行 awk查找相关列 uniq取消重复 -c统计重复次数
[root@localhost ~]# grep "Failed" /var/log/secure | awk '{print $11}' | uniq -c
20 192.168.18.1
例2:登录相关文件
/var/log/wtmp #记录登录次数和持续时间相关信息
/var/log/btmp #记录登录错误的相关信息
注意:上述两个文件都是二进制文件,无法直接打开读取
设置防火墙过滤规则
练习:将有暴力破解密码意向的IP,通过防火墙过滤
## 步骤:
设置定时清空防火墙规则,避免过滤自己的IP
设置防火墙过滤规则
[root@localhost ~]# crontab -e #设置定时关闭防火墙规则
*/1 * * * * iptables -F
[root@localhost ~]# iptables -A INPUT -i ens33 -s 192.168.18.1 -j DROP #设置防火墙过滤规则
清空日志
- 先备份,在清空日志
方法1:通过重定向的方式,覆盖写入文件为空 #inode号不改变
#检查all.log的inode号
[root@localhost ~]# ll -i /var/log/all.log
16777613 -rw-------. 1 root root 1369 9月 21 14:45 /var/log/all.log
#检查all.log不为空
[root@localhost ~]# tail -n 5 /var/log/all.log
Sep 21 14:45:01 localhost postfix/qmgr[6866]: 13347FBBC0: removed
Sep 21 14:45:11 localhost sshd[17952]: pam_unix(sshd:session): session closed for user root
Sep 21 14:45:11 localhost systemd-logind: Removed session 94.
Sep 21 14:45:11 localhost sshd[7797]: pam_unix(sshd:session): session closed for user root
Sep 21 14:45:11 localhost systemd-logind: Removed session 32.
#先关闭all.log的a属性,再将空覆盖写入,再将a属性给all.log加上
[root@localhost ~]# chattr -a /var/log/all.log && > /var/log/all.log && chattr +a /var/log/all.log
#检查all文件为空
[root@localhost ~]# cat /var/log/all.log
#检查all文件inode未改变
[root@localhost ~]# ll -i /var/log/all.log
16777613 -rw-------. 1 root root 0 9月 21 14:46 /var/log/all.log
方法2:直接删除日志文件,再创建日志文件 #inode号会改变
注意:rsyslog服务无法识别新创建的日志文件,需要重启rsyslog服务
#检查inode号
[root@localhost ~]# ll -hi /var/log/all.log
16777613 -rw-------. 1 root root 5.4K 9月 21 14:51 /var/log/all.log
#取消文件的a属性,删除,创建,给文件添加a属性
[root@localhost ~]# chattr -a /var/log/all.log && rm -rf /var/log/all.log && touch /var/log/all.log && chattr +a /var/log/all.log
#检查inode号发生改变
[root@localhost ~]# ll -hi /var/log/all.log
17150246 -rw-r--r--. 1 root root 0 9月 21 14:52 /var/log/all.log
#重启rsyslog
[root@localhost ~]# systemctl restart rsyslog
#检查rsyslog服务状态
[root@localhost ~]# systemctl status rsyslog
● rsyslog.service - System Logging Service
Loaded: loaded (/usr/lib/systemd/system/rsyslog.service; enabled; vendor preset: enabled)
Active: active (running) since 三 2022-09-21 14:53:03 CST; 11s ago
Docs: man:rsyslogd(8)
http://www.rsyslog.com/doc/
Main PID: 25620 (rsyslogd)
CGroup: /system.slice/rsyslog.service
└─25620 /usr/sbin/rsyslogd -n
9月 21 14:53:03 localhost.localdomain systemd[1]: Stopped System Logging Service.
9月 21 14:53:03 localhost.localdomain systemd[1]: Starting System Logging Service...
9月 21 14:53:03 localhost.localdomain rsyslogd[25620]: [origin software="rsyslogd" swVersion="8.24.0-34.el7" x-pid="25620" x-info="htt... start
9月 21 14:53:03 localhost.localdomain systemd[1]: Started System Logging Service.
Hint: Some lines were ellipsized, use -l to show in full.
2.2 日志记录方式
类别:
daemon #后台进程相关
kern #内核产生的信息
lpr #打印系统产生的
cron #定时相关
mail #邮件相关
syslog #日志服务本身的
new #新闻系统
authpriv #安全认证
local10~7 #自定义的日志设备
local10-local17 #8个系统保留,程序使用或者用户自定义
级别:数字越小,级别越重
编码 优先级 严重性
7 debug 信息对开发人员调试程序有用,操作过程中无用
6 info 正常操作信息
5 notice 注意,正常但重要的事件
4 warning 警告,提示如果不采取行动,将会发生错误。比如文件系统使用90%
3 err 错误,阻止某个模块或程序的功能不能正常使用
2 crit 关键的错误,已经影响整个系统或者软件不能正常工作的信息
1 alert 警报,需要立刻修改的信息
0 emerg 紧急,内核崩溃等严重信息
2.3 rsyslog日志服务
## rsyslog日志的配置文件:
/etc/rsyslog.conf
/etc/rsyslog.d
#rsyslog.conf
[root@localhost ~]# vi /etc/rsyslog.conf
*.info;mail.none;authpriv.none;cron.none /var/log/messages
authpriv.* /var/log/secure
mail.* -/var/log/maillog #记录到内存
cron.* /var/log/cron
*.emerg :omusrmsg:* #广播
uucp,news.crit /var/log/spooler
local7.* /var/log/boot.log
2.4 日志输入规则
.info #大于等于info级别的信息记录
.=级别 #仅记录等于某个级别的日志
.=info /var/log/info.log #仅记录info级别的日志
.!级别 #除了某个级别外,记录所有
.!err /var/log/all.log #除了err级别外,记录所有
.none #排除某个类别
mail.none #所有mail类别的日志都不记录
自定义日志
修改配置文件后,需要重启服务才能启用
在/etc/rsyslog.conf中添加
*.* /var/log/all.log #记录所有日志
防止日志删除 添加a属性
$ chattr +a /var/log/all.log
3 日志切割、搭建日志收集服务器
3.1 日志切割
日志轮替
旧的日志文件剪切改名,并创建新的日志文件,超过范围则删除(可以通过脚本实现)
logrotate日志轮替配置文件:
/etc/logrotate.conf
全局规则
[root@localhost ~]# vi /etc/logrotate.conf
weekly #每周轮替
rotate 4 #轮替次数
create #创建新文件,也可以指定新建文件的权限和所有者所属组
dateext #使用日期作为后缀切割文件
include /etc/logrotate.d #包括其他目录文件的规则
局部规则
[root@localhost ~]# vi /etc/logrotate.conf
#局部规则
/var/log/wtmp { #指定日志文件的路径,名字
monthly #每月轮替一次
create 0664 root utmp #设置wtmp日志文件的权限,所有者,所属组
minsize 1M #日志轮替的最小值,达到最小值才会轮替,否则到时间也不会轮替
rotate 1 #日志切割后历史文件最多保存一份,不包含当前使用的日志文件
}
/var/log/btmp {
missingok #轮替期间,任何错误将被忽略
monthly
create 0600 root utmp
rotate 1
}
注:两者同时存在时,则按照局部规则执行
其它参数说明:
monthly: 日志文件将按月轮循。其它可用值为‘daily’,‘weekly’或者‘yearly’。
rotate 5: 一次将存储5个归档日志。对于第六个归档,时间最久的归档将被删除。
compress: 在轮循任务完成后,已轮循的归档将使用gzip进行压缩。
delaycompress: 总是与compress选项一起用,delaycompress选项指示logrotate不要将最近的归 档压缩。
missingok: 在日志轮循期间,任何错误将被忽略,例如“文件无法找到”之类的错误。
notifempty: 如果日志文件为空,轮循不会进行。
create 644 root root: 以指定的权限创建全新的日志文件,同时logrotate也会重命名原始日志 文件。
sharedscripts #关键字之后指定脚本
prerotate/endscript #执行命令之前执行 比如取消文件a属性
postrotate/endscript #执行命令之后执行 比如重启服务,给文件添加a属性
日志轮替配置文件目录
## /etc/logrotate.d #日志轮替配置文件目录,子文件中写着不同的局部规则
[root@localhost ~]# ls /etc/logrotate.d
bootlog chrony syslog wpa_supplicant yum
命令 logrotate
## logrotate [选项]
-v #显示过程
-f #强制轮替 (需要指定规则)
#查看指定的轮替规则
[root@localhost ~]# cat /etc/logrotate.d/alog
/var/log/all.log{
weekly
rotate 6
dateext
sharedscripts
prerotate
/usr/bin/chattr -a /var/log/all.log
endscript
sharedscripts
postrotate
/usr/bin/chattr +a /var/log/all.log
/usr/bin/systemctl restart rsyslog.service
endscript
}
#检查当前日志目录下的子文件
[root@localhost ~]# ls /var/log
all.log btmp dmesg maillog secure tuned vmware-vmsvc.log
anaconda btmp-20220921 dmesg.old maillog-20220921 secure-20220921 vmware-network.1.log wtmp
audit chrony firewalld messages spooler vmware-network.2.log wtmp-20220921
boot.log cron grubby_prune_debug messages-20220921 spooler-20220921 vmware-network.log yum.log
boot.log-20220921 cron-20220921 lastlog rhsm tallylog vmware-vgauthsvc.log.0 yum.log-20220921
#执行强制轮替
[root@localhost ~]# logrotate -vf /etc/logrotate.conf
reading config file /etc/logrotate.conf
including /etc/logrotate.d
reading config file alog
.
.
.
.
rotating pattern: /var/log/btmp forced from command line (1 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/btmp
log needs rotating
rotating log /var/log/btmp, log->rotateCount is 1
dateext suffix '-20220921'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
destination /var/log/btmp-20220921 already exists, skipping rotation
set default create context
#再次检查当前日志目录下的子文件,发现多了一些轮替产生的文件
[root@localhost ~]# ls /var/log
all.log btmp dmesg.old messages spooler-20220921 vmware-vgauthsvc.log.0
all.log-20220921 btmp-20220921 firewalld messages-20220921 tallylog vmware-vmsvc.log
anaconda chrony grubby_prune_debug rhsm tuned wtmp
audit cron lastlog secure vmware-network.1.log wtmp-20220921
boot.log cron-20220921 maillog secure-20220921 vmware-network.2.log yum.log
boot.log-20220921 dmesg maillog-20220921 spooler vmware-network.log yum.log-20220921
日志拆分
## split 文件拆分
-a #指定输出后缀长度,默认为2个字符
-d #指定输出后缀用数字代替
-b #指定输出大小:k、m、g
[root@localhost ~]# cp /var/log/lastlog /root/ #复制日志文件到家目录下
[root@localhost ~]# ls #查看文件
alog anaconda-ks.cfg lastlog
[root@localhost ~]# ll -h /root/
总用量 24K
-rw-r--r--. 1 root root 243 9月 21 16:06 alog
-rw-------. 1 root root 1.4K 8月 23 01:00 anaconda-ks.cfg
-rw-r--r--. 1 root root 286K 9月 21 16:20 lastlog
[root@localhost ~]# split -db 50k /root/lastlog #以50k拆分,以数字为后缀拆分lastlog
[root@localhost ~]# ll -h /root/ #查看文件
总用量 320K
-rw-r--r--. 1 root root 243 9月 21 16:06 alog
-rw-------. 1 root root 1.4K 8月 23 01:00 anaconda-ks.cfg
-rw-r--r--. 1 root root 286K 9月 21 16:20 lastlog
-rw-r--r--. 1 root root 50K 9月 21 16:21 x00
-rw-r--r--. 1 root root 50K 9月 21 16:21 x01
-rw-r--r--. 1 root root 50K 9月 21 16:21 x02
-rw-r--r--. 1 root root 50K 9月 21 16:21 x03
-rw-r--r--. 1 root root 50K 9月 21 16:21 x04
-rw-r--r--. 1 root root 36K 9月 21 16:21 x05
cat 文件合并
格式:
cat /拆分文件1 /拆分文件2 .... /拆分文件n > 合并文件
[root@localhost ~]# ll -h /root/ #查看文件
总用量 320K
-rw-r--r--. 1 root root 243 9月 21 16:06 alog
-rw-------. 1 root root 1.4K 8月 23 01:00 anaconda-ks.cfg
-rw-r--r--. 1 root root 286K 9月 21 16:20 lastlog
-rw-r--r--. 1 root root 50K 9月 21 16:21 x00
-rw-r--r--. 1 root root 50K 9月 21 16:21 x01
-rw-r--r--. 1 root root 50K 9月 21 16:21 x02
-rw-r--r--. 1 root root 50K 9月 21 16:21 x03
-rw-r--r--. 1 root root 50K 9月 21 16:21 x04
-rw-r--r--. 1 root root 36K 9月 21 16:21 x05
[root@localhost ~]# cat ./x00 ./x01 ./x02 ./x03 ./x04 ./x05 > /root/lalog #合并文件
[root@localhost ~]# ll -h /root/
总用量 608K
-rw-r--r--. 1 root root 243 9月 21 16:06 alog
-rw-------. 1 root root 1.4K 8月 23 01:00 anaconda-ks.cfg
-rw-r--r--. 1 root root 286K 9月 21 16:22 lalog
-rw-r--r--. 1 root root 286K 9月 21 16:20 lastlog
-rw-r--r--. 1 root root 50K 9月 21 16:21 x00
-rw-r--r--. 1 root root 50K 9月 21 16:21 x01
-rw-r--r--. 1 root root 50K 9月 21 16:21 x02
-rw-r--r--. 1 root root 50K 9月 21 16:21 x03
-rw-r--r--. 1 root root 50K 9月 21 16:21 x04
-rw-r--r--. 1 root root 36K 9月 21 16:21 x05
3.2 远程日志服务器 (可实现日志集中管理)
server端配置
## 1)vim /etc/rsyslog.conf #修改配置文件
[root@localhost ~]# vim /etc/rsyslog.conf #进入配置文件修改
#取消注释以下两行代码
$ModLoad imtcp
$InputTCPServerRun 514
## 2)重启rsyslog服务
[root@localhost ~]# systemctl restart rsyslog.service
## 3)清空防火墙规则
[root@localhost ~]# iptables -F
客户端配置
## 1)修改主机名
[root@localhost ~]# hostnamectl set-hostname yq
## 2)修改配置文件/etc/rsyslog.conf
若服务端取消注释的是UDP,则客户端配置文件用一个@
若服务端取消注释的是TCP,则客户端配置文件用两个@
[root@yq ~]# vi /etc/rsyslog.conf
*.* @@192.168.18.134:514
## 3)重启rsyslog服务,清空防火墙
[root@yq ~]# systemctl restart rsyslog && iptables -F
测试
## #客户端执行添加用户等会记录日志的操作,然后进入服务端查看
#客户端
[root@yq ~]# useradd yq1
[root@yq ~]# useradd yq2
#服务端
[root@localhost ~]# tail -n 10 /var/log/secure #检查服务端是否记录客服端日志
Sep 21 16:30:59 localhost polkitd[6151]: Registered Authentication Agent for unix-process:15058:566757 (system bus name :1.54 [/usr/bin/pkttyagent --notify-fd 5 --fallback], object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale zh_CN.UTF-8)
Sep 21 16:30:59 localhost polkitd[6151]: Unregistered Authentication Agent for unix-process:15058:566757 (system bus name :1.54, object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale zh_CN.UTF-8) (disconnected from bus)
Sep 21 16:36:08 yq polkitd[6387]: Unregistered Authentication Agent for unix-process:7095:49226 (system bus name :1.27, object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale zh_CN.UTF-8) (disconnected from bus)
Sep 21 16:38:10 yq useradd[7113]: new group: name=yq1, GID=1000
Sep 21 16:38:10 yq useradd[7113]: new user: name=yq1, UID=1000, GID=1000, home=/home/yq1, shell=/bin/bash
Sep 21 16:38:13 yq useradd[7118]: new group: name=yq2, GID=1001
Sep 21 16:38:13 yq useradd[7118]: new user: name=yq2, UID=1001, GID=1001, home=/home/yq2, shell=/bin/bash
[root@localhost ~]#
[root@localhost ~]# grep yq /var/log/all.log | grep useradd #检查服务端是否记录客服端日志
Sep 21 16:38:10 yq useradd[7113]: new group: name=yq1, GID=1000
Sep 21 16:38:10 yq useradd[7113]: new user: name=yq1, UID=1000, GID=1000, home=/home/yq1, shell=/bin/bash
Sep 21 16:38:13 yq useradd[7118]: new group: name=yq2, GID=1001
Sep 21 16:38:13 yq useradd[7118]: new user: name=yq2, UID=1001, GID=1001, home=/home/yq2, shell=/bin/bash