概述
1、日志文件记录系统事件,包括用户的登录信息、系统的启动信息、系统的安全信息、邮件相关信息、各种服务相关信息等
2、通过日志来检查错误发生的原因,或者受到攻击时攻击者留下的痕迹。
1. rsyslog系统日志管理
1.1 处理日志的程序:
rsyslog:系统专职日志程序,是一个程序,是一个进程,有配置文件
#ps aux |grep rsyslogd
(注:d deamon 程序,守护程序,一般不会退出)
用户 /进程号 /cpu /内存 /虚拟内存*2 /没有终端 /线程在sleep /2021年开的 /占cpu104.43秒 /命令
安装: yum install -y rsyslog
启动:systemctl start rsyslog.service
1.2 rsyslogd的主配置文件 — /etc/rsyslog.conf
# rsyslog configuration file
# For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html
# If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html
#### MODULES ####
# 必要的加载模块
# The imjournal module bellow is now used as a message source instead of imuxsock.
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imjournal # provides access to the systemd journal
#$ModLoad imklog # reads kernel messages (the same are read from journald)
#$ModLoad immark # provides --MARK-- message capability
发送到远程主机,需开启网络服务
# Provides UDP syslog reception
#$ModLoad imudp
#$UDPServerRun 514
# Provides TCP syslog reception
#$ModLoad imtcp
#$InputTCPServerRun 514
#### GLOBAL DIRECTIVES ####
# Where to place auxiliary files
$WorkDirectory /var/lib/rsyslog
# Use default timestamp format
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
定义日志的时间使用默认的时间戳格式
# File syncing capability is disabled by default. This feature is usually not required,
# not useful and an extreme performance hit
#$ActionFileEnableSync on
定义同步功能
# Include all config files in /etc/rsyslog.d/
$IncludeConfig /etc/rsyslog.d/*.conf
子配置文件
# Turn off message reception via local log socket;
# local messages are retrieved through imjournal now.
$OmitLocalLogging on
# File to store the position in the journal
$IMJournalStateFile imjournal.state
#### RULES ####
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none /var/log/messages
## *.info 所有设备的基本信息
## ; 和
## mail.none none表示排除
# The authpriv file has restricted access.
authpriv.* /var/log/secure
# Log all the mail messages in one place.
mail.* -/var/log/maillog
# “-”符号,表示使用异步的方式记录,先放到缓存区,稍晚写到文件中
# Log cron stuff
cron.* /var/log/cron
# Everybody gets emergency messages
*.emerg :omusrmsg:*
#匹配任何类型,且消息等级是emerg(致命性,最高等级)的消息,会被发送到系统所有用户的登录终端
# Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler
1) /etc/rsyslog.conf 配置文件格式
authpriv.* /var/log/secure
·#服务名称+[连接符号]+日志等级 日志记录位置
·#认证相关服务.所有日志等级 记录在/var/log/secure中
RULES:即规则,是一套生成日志,以及存储日志的策略。
规则由四部分组成::facility + 连接符 + level + path
- facility 设备:同种应用程序,设计程序时已经制定
设备名 | 说明 |
---|---|
authpriv | ssh、ftp 等登录信息的验证信息 |
cron | 时间任务相关 |
kern | 内核 |
lpr | 打印 |
邮件 | |
mark(syslog)-rsyslog | 服务内部的信息,时间标识 |
news | 新闻组 |
user | 用户程序产生的相关信息 |
uucp | unix to nuix copy主机之间相关的通信 |
local 1-7 | 自定义的日志设备 |
不同设备类型对应多款app
-
连接符号
- “.”代表只要比后面的等级高的(包含该等级)日志都记录下来。比如:“cron.info”代表cron服务产生的日志,只要日志等级大于等于info级别,就记录
- “.=”代表只记录所需等级的日志,其他等级的都不记录。比如:“*. =emerg”代表任何日志服务产生的日志,只要等级是emerg等级就记录。这种用法及少见,了解就好
- “.!”代表不等于,也就是除了该等级的日志外,其他等级的日志都记录。
-
level级别:记录信息的类型
等级 | 介绍 |
---|---|
debug | 有调试信息的,日志通信最多 |
info | 通知信息,属于一般信息 |
notice | 普通信息,但是有一定的重要性 |
warnig | 警告信息,还不会影响到服务或系统的运行 |
err | 错误级别,阻止某个功能或者模块不能正常工作的信息 |
crit | 临界状况信息,阻止整个系统或者整个软件不能正常工作的信息 |
alert | 警告状态信息,需要立即处理和解决,eg磁盘空间不足 |
emerg | 紧急,致命,服务无法继续运行,eg:配置文件丢失 |
* | 代表所有日志等级 |
none | 忽略这个日志服务 |
-
path :存储信息的位置 四种写法
-
日志文件的绝对路径
-
转达给远程主机(日志服务器)
- UDP协议:@192.168.1.181:514 (514是日志服务默认端口)
- TCP协议:@@192.168.1.181:514
-
用户名
eg:root,就会把日志发送给root用户(必须在线);”*“ 代表发送给所有在线用户。
如需把日志发送给多个在线用户,用户名之前用","隔开。
-
“~”,代表忽略或丢弃日志。
-
测试:更改日志保存路径
修改:日志存储路径
vim /etc/rsyslog.conf
# The authpriv file has restricted access.
#authpriv.* /var/log/secure
authpriv.* /var/log/anquan
重新加载rsyslog
[root@vm-150 ~]# systemctl restart rsyslog
[root@vm-150 ~]# cat /var/log/anquan
Dec 16 14:01:55 vm-150 polkitd[710]: Unregistered Authentication Agent for unix-process:125930:137224934 (system bus name :1.6006, object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale zh_CN.UTF-8) (disconnected from bus)
换账号测试
[root@vm-150 ~]# su - Bess
上一次登录:三 12月 16 13:58:32 CST 2022pts/1 上
-bash-4.2$ su -
密码:
上一次登录:三 12月 16 13:59:20 CST 2022pts/1 上
日志已更新
[root@vm-150 ~]# cat /var/log/anquan
Dec 16 14:01:55 vm-150 polkitd[710]: Unregistered Authentication Agent for unix-process:125930:137224934 (system bus name :1.6006, object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale zh_CN.UTF-8) (disconnected from bus)
Dec 16 14:02:12 vm-150 su: pam_unix(su-l:session): session opened for user Bess by root(uid=0)
Dec 16 14:02:21 vm-150 su: pam_unix(su-l:session): session opened for user root by root(uid=10001)
1.3 常见日志文件(系统、进程、应用程序):
除了系统默认的日志外,采用rpm方式安装的系统服务也会把日志记录在/var/log/目录下,各个服务使用字的日志管理文档来记录自身日志。 源码包安装的服务日志是在源码包指定目录中。
系统常用日志:
日志文件 | 说明 |
---|---|
/var/log/message | 记录系统重要消息的日志,该日志文件记录 Linux 系统的绝大多数重要信息,如果系统出现问题,首先检查该日志文件 tailf 动态查看日志文件尾部 |
/var/log/secure | 记录验证和授权方面的信息,只要涉及账户和密码的程序都会记录,比如系统登录、ssh 登录、su 切换用户、sudo 授权,添加用户、修改用户密码都会记录在这个日志文件中 |
/var/log/dmesg | 记录系统在开机时内核自检的信总,也可以使用 dmesg 命令直接查看内核自检信息 |
/var/log/mailog | 记录邮件信息的日志 |
/var/log/boot.log | 系统启动日志 |
/var/log/cron | 记录与系统定时任务相关的日志 |
/var/log/btmp | 记录错误登录的日志,该文件为二进制文件,不能直接使用 Vi 查看,而要使用 lastb 命令查看。b-bad |
/var/log/wtmp | 永久记录所有用户的登录、注销信息,同时记录系统的后动、重启、关机事件,为二进制文件,要使用 last 命令查看。w-who |
/var/tun/utmp | 记录当前已经登录的用户的信息,该文件会随着用户的登录和注销而不断变化,只记录当前登录用户的信息,该文件不能用vi查看,而要使用 w、who、users 等命令查看。u-user |
/var/log/lastlog | 记录系统中所有用户最后一次的登录时间的日志,该文件为二进制文件,要使用 lastlog 命令查看 |
日志文件 | 说明 |
---|---|
/var/log/httpd | RPM包安装的apache服务的默认日志目录 |
/var/log/mail/ | RPM包安装的邮件服务的额外日志目录 |
/var/log/samba/ | Rpm包安装的samba服务的日志目录 |
/var/log/sssd/ | 守护进程安全服务目录 |
**举例:messages 内容查看 **
# tailf /var/log/messages
Dec 16 09:19:07 lvm-150 sudo: bess : TTY=pts/0 ; PWD=/mnt ; USER=root ; COMMAND=/bin/tailf /var/log/secure
Dec 16 09:19:07 vm-150 sudo: pam_unix(sudo:session): session opened for user root by bess(uid=0)
Dec 16 09:19:23 vm-150 sshd[88436]: Accepted password for bess from 192.168.2.13 port 1738 ssh2
Dec 16 09:19:23 vm-150 sshd[88436]: pam_unix(sshd:session): session opened for user bess by (uid=0)
Dec 16 09:19:53 vm-150 sshd[88436]: pam_unix(sshd:session): session closed for user bess
日志文件格式
只要由日志服务rsyslogd记录的日志文件,格式是一样的,基本包含以下四列:
- 事件产生的时间;
- 发生事件的服务器的主机名;
- 产生事件的服务名或程序名;
- 事件的具体信息。
1.4 自定义日志
(1)添加日志文件:/var/log/自定义日志.log
(2)编辑 /etc/rsyslog.conf,添加自定义文件
(3)日志类型、日志级别,决定该日志获取的信息
自定义日志 /var/log/ztest.log
[root@vm-150 ~]# vim /etc/rsyslog.conf
cat /etc/rsyslog.conf
#test 2022-12-15 Besssss
*.* /var/log/ztest.log
重新加载
[root@vm-150 ~]# systemctl restart rsyslog.service
查看
[root@vm-150 ~]# cat /var/log/ztest.log
Dec 15 10:33:49 vm-150 systemd: Stopping System Logging Service...
Dec 15 10:33:49 vm-150 rsyslogd: [origin software="rsyslogd" swVersion="8.24.0-57.el7_9.1" x-pid="14640" x-info="http://www.rsyslog.com"] exiting on signal 15.
Dec 15 10:33:49 vm-150 systemd: Stopped System Logging Service.
Dec 15 10:33:49 vm-150 systemd: Starting System Logging Service...
Dec 15 10:33:49 vm-150 rsyslogd: [origin software="rsyslogd" swVersion="8.24.0-57.el7_9.1" x-pid="14695" x-info="http://www.rsyslog.com"] start
Dec 15 10:33:49 vm-150 systemd: Started System Logging Service.
Dec 15 10:33:49 vm-150 polkitd[710]: Unregistered Authentication Agent for unix-process:14689:152534829 (system bus name :1.6641, object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale zh_CN.UTF-8) (disconnected from bus)
2. logrotate日志轮转 (切割+轮替)
简介:
把旧的日志文件移动并改名,同时建立新的空日志文件,当旧日志文件超出保存的范围之后,就会进行删除
目的:
为了节省空间和整理方便,日志文件经常需要按!时间或!大小等维度分成多份,删除时间久远的日志文件。
-
主配置文件 /etc/logrotate.conf (决定每个日志如何轮转)
-
子配置文件夹/etc/logrotate.d/*
[root@vm-150 ~]# ls /etc/logrotate.conf /etc/logrotate.d/
/etc/logrotate.conf
/etc/logrotate.d/:
bootlog firewalld libvirtd numad rh-nginx116-nginx sssd yum chrony glusterfs libvirtd.qemu ppp rh-php72-php-fpm syslog zabbix-agent
cups iscsiuiolog mysql psacct samba wpa_supplicant zabbix-server
2.1 logratate 主配置文件
vim /etc/logrotate.conf
# see "man logrotate" for details
# rotate log files weekly
weekly #每周对日志文件进行一次轮替
# keep 4 weeks worth of backlogs
rotate 4 #共保存4份日志文件,当建立新的日志文件时,旧的将会被删除
# create new (empty) log files after rotating old ones
create #在日志轮替后,创建新的空日志文件
# use date as a suffix of the rotated file
dateext #使用日期作为日志轮替文件的后缀
# uncomment this if you want your log files compressed
#compress #日志文件是否压缩。如果取消注释,则日志会在转储的同时进行压缩
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d #包含 /etc/logrotate.d/ 目录中所有的子配置文件,即读取目录中所有子配置文件
#下面是单独设置,优先级更高
# no packages own wtmp and btmp -- we'll rotate them here
/var/log/wtmp {
monthly #每月对日志文件进行一次轮替
create 0664 root utmp #建立的新日志文件,权限是 0664 ,所有者是 root ,所属组是 utmp 组
minsize 1M #日志文件最小轮替大小是 1MB 。也就是日志一定要超过 1MB 才会轮替,否则就算时间达到一个月,也不进行日志转储
rotate 1 # 仅保留一个日志备份,即保留 wtmp 和 wtmp.1 日志
}
/var/log/btmp {
missingok
monthly
create 0600 root utmp
rotate 1
}
# system-specific logs may be also be configured here.
属性说明:
配置 | 说明 |
---|---|
daily | 轮转周期,每天轮转 |
weekly | 轮转周期,一周轮转 |
monthly | 轮转周期,每月轮转 |
yearly | 轮转周期,一年轮转 |
rotate 数字 | 保留的日志文件的个数,0 指没有备份 |
create | 轮转后创建新文件,旧文件改名 |
dateext | 以时间作为文件扩展名(date 时间、extend 扩展) |
compress | 日志轮替时,压缩旧的日志 |
include /etc/logrotate.d | 包含该目录下的子配置文件 |
maxsize 1M | 达到1M才轮转(date跟max 是或的关系) |
minsize 30k | 最小达到30k轮转(date跟mix 同时满足才轮转) |
size 大小 | 日志只有大于指定大小才进行日志轮替,而不是按照时间轮替 |
create 0600 root utmp create mode owner group | 轮转后创建新日志,并设置权限。 权限、属主、属组 |
missingok | 丢失不提示 |
notifempty | 空文件不轮转 |
missingok | 如果日志不存在,则忽略该日志的警告信息 |
mail address | 当日志轮替时,输出内容通过邮件发送到指定的邮件地址 |
sharedscripts | 在此关键字之后的脚本只执行一次 |
prerotate/endscript | 在日志轮替之前执行脚本命令,endscript 标识 prerotate 脚本结束 |
postrotate/endscript | 在日志轮替之后执行脚本命令,endscrip i标识 postrotate 脚本结束 |
yum日志轮转实例:
vim /etc/logrotate.d/yum
之前的:
#/var/log/yum.log {
# missingok
# notifempty
# maxsize 30k
# yearly
# create 0600 root root
#}
修改后的
/var/log/yum.log {
missingok
#notifempty
daily
rotate 3
create 0770 root root
}
重新加载
[root@vm-150 ~]# /usr/sbin/logrotate /etc/logrotate.conf
强制轮转,展示效果
[root@vm-150 logrotate.d]# logrotate -vf yum
reading config file yum
Allocating hash table for state file, size 15360 B
Handling 1 logs
rotating pattern: /var/log/yum.log forced from command line (3 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/yum.log
log needs rotating
rotating log /var/log/yum.log, log->rotateCount is 3
dateext suffix '-20221216'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
creating new /var/log/yum.log mode = 0770 uid = 0 gid = 0
[root@vm-150 logrotate.d]# ll /var/log/yum.log
-rwxrwx--- 1 root root 0 12月 16 14:17 /var/log/yum.log