日志介绍
概述
系统日志是一系列用于记录系统操作和活动进行的文件,这些日志对于监控和排查系统问题非常重要,因为它们可以提供有关系统行为、应用活动和安全事件的见解。系统日志还可以成为识别 Linux 系统中潜在安全弱点和漏洞的重要信息来源。通过分析目标系统上的日志,我们可以深入了解系统行为、网络活动和用户活动,并利用这些信息识别任何异常活动,例如未经授权的登录、攻击尝试、明文凭据或异常的文件访问,这些都可能表明潜在的安全漏洞.
日志的分类
kernel logs
这些日志包含系统内核的相关信息,例如:硬件驱动,系统调用和内核事件
System logs
系统日志包含系统级别事件的信息,例如:服务的开启与停止,登录尝试和系统重启,通过监测这些日志,我们可以检测到系统中任何可能的访问或活动
Authentication logs
这些日志存储着用户尝试登录的认证信息(成功或者失败)
Feb 28 2024 18:15:01 sshd[5678]: Accepted publickey for admin from 10.14.15.2 port 43210 ssh2: RSA SHA256:+KjEzN2cVhIW/5uJpVX9n5OB5zVJ92FtCZxVzzcKjw
Feb 28 2024 18:15:03 sudo: admin : TTY=pts/1 ; PWD=/home/admin ; USER=root ; COMMAND=/bin/bash
Feb 28 2024 18:15:05 sudo: admin : TTY=pts/1 ; PWD=/home/admin ; USER=root ; COMMAND=/usr/bin/apt-get install netcat-traditional
Feb 28 2024 18:15:08 sshd[5678]: Disconnected from 10.14.15.2 port 43210 [preauth]
Feb 28 2024 18:15:12 kernel: [ 778.941871] firewall: unexpected traffic allowed on port 22
Feb 28 2024 18:15:15 auditd[9876]: Audit daemon started successfully
Feb 28 2024 18:15:18 systemd-logind[1234]: New session 4321 of user admin.
Feb 28 2024 18:15:21 CRON[2345]: pam_unix(cron:session): session opened for user root by (uid=0)
Feb 28 2024 18:15:24 CRON[2345]: pam_unix(cron:session): session closed for user root
在这个例子中,我们可以看到在第一行中,用户admin成功使用公钥进行身份验证。此外,我们还可以看到该用户属于sudoers组,因为他可以使用sudo执行命令。内核消息表明端口22上允许了意外的流量,这可能意味着潜在的安全漏洞。之后,我们看到systemd-logind为用户"admin"创建了一个新会话,并且root用户的一个cron会话已打开并关闭。
Application logs
这类日志范围比较广泛,包括了各种在系统上运行的程序生成的日志
openEuler 中的常用系统日志
-
dmesg
主要记录系统在开机时内核检测过程所产生的信息, 通过执行dmesg
命令查看。 -
/var/log/wtmp or /var/log/faillog
这两个文件可以记录正常登陆系统的账户信息(wtmp),与错误登陆时所使用的账户信息(faillog)。last
命令就是读取wtmp
文件来获取的。 -
/var/log/btmp
记录错误登录日志, 这个文件是二进制的,不能使用cat
命令查看,而要使用lastb
命令查看。 -
/var/run/utmp
记录当前一登录的用户的信息,同样不能使用cat
命令查看,而要使用w
,who
,users
命令来查询。 -
/var/log/lastlog
记录了系统上面所有账户最近一次登陆系统的相关信息,lastlog
命令就是读取这个文件里的记录来显示的。 -
/var/log/secure
只要涉及到需要用户名和密码的操作, 那么当登陆系统是(不论正确错误),都会记录到这里。 -
/var/log/messages
这个文件非常重要, 几乎系统发生的错误信息,或者重要信息都会被记录在这里。 -
/var/log/cron
主要记录关于crontab
计划任务的相关信息, 比如,系统计划任务的错误配置, 计划任务的修改等。 -
/var/log/maillog or /var/log/mail/
记录着邮件的往来信息, 默认是postfix
邮件服务器的某些信息。
日志管理
rsyslog
rsyslog 是一种增强版的系统日志守护程序,用于大多数 Linux 发行版上处理系统日志。它能够接收日志消息、过滤和解析日志内容,并将其保存到本地日志文件或通过网络发送到远程日志服务器
官方指导文档
日志设施(facility)
就是对日志信息分类,将不同类别的日志记录到不同的位置
常见的日志设施:
日志类别 | 描述 |
---|---|
auth | PAM认证相关日志 |
authpriv | SSH、FTP登录相关日志 |
cron | 任务计划相关日志 |
daemon | 守护进程相关日志 |
kern | 内核相关日志 |
lpr | 打印相关日志 |
邮件相关日志 | |
mark | 标记记号相关日志 |
news | 新闻相关日志 |
security | 安全相关日志,与auth类似 |
syslog | rsyslog自己的日志 |
user | 用户相关日志 |
uucp | UNIX to UNIX cp相关日志 |
local0 ~ local7 | 用户自定义使用设置日志 |
PS:定义日志级别的时候可以使用通配符,比如,*
表示全部级别;,
表示多个级别(debug,info,notice);!
表示某个级别除外;=
表示仅仅某个级别的日志
日志级别
- debug:调试级别(程序调试信息)
- info:通知消息(程序的正常输出)
- notice:注意级别(程序可能有错误)
- warning:警告级别(警告错误)
- error:错误级别
- crit:严重错误级别
- alter:发出严重报警级别
- emerg:系统级别故障,会导致系统不可用的严重信息
logrotate 日志转储服务
logrotate 是一个方便的日志管理工具,随着时间的推移,日志文件会越来越多,占用磁盘空间越来越大,但是我们又需要使用日志来定位故障,logrotate 就按照时间/大小将日志文件压缩,并且定期清理时间久远的日志,以节省我们的磁盘空间,并且减少了手动操作。
logrotate 的简单介绍
系统定时运行
openEuler 等常见的 Linux 发行版中默认安装 logrotate,并且在 crontab 中确定了定时运行,我们可以 cat /etc/cron.daily/logrotate
查看定时运行程序
配置 logrotate
样例
/var/log/messages {
rotate 5
weekly
postrotate
/usr/bin/killall -HUP syslogd
endscript
}
常见配置参数
- daily :指定转储周期为每天
- weekly :指定转储周期为每周
- monthly :指定转储周期为每月
- rotate count :指定日志文件删除之前转储的次数,0 指没有备份,5 指保留 5 个备份
- tabooext [+] list:让 logrotate 不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig, .rpmsave, v, 和~
- missingok:在日志轮循期间,任何错误将被忽略,例如 “文件无法找到” 之类的错误。
- size size:当日志文件到达指定的大小时才转储,bytes (缺省) 及 KB (sizek) 或 MB (sizem)
- compress: 通过 gzip 压缩转储以后的日志
- nocompress: 不压缩
- copytruncate:用于还在打开中的日志文件,把当前日志备份并截断
- nocopytruncate: 备份日志文件但是不截断
- create mode owner group : 转储文件,使用指定的文件模式创建新的日志文件
- nocreate: 不建立新的日志文件
- delaycompress: 和 compress 一起使用时,转储的日志文件到下一次转储时才压缩
- nodelaycompress: 覆盖 delaycompress 选项,转储同时压缩。
- errors address : 专储时的错误信息发送到指定的 Email 地址
- ifempty :即使是空文件也转储,这个是 logrotate 的缺省选项。
- notifempty :如果是空文件的话,不转储
- mail address : 把转储的日志文件发送到指定的 E-mail 地址
- nomail : 转储时不发送日志文件
- olddir directory:储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统
- noolddir: 转储后的日志文件和当前日志文件放在同一个目录下
- prerotate/endscript: 在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行
更多信息请参考man logrotate帮助文档
参考文章
- Linux日志系统-01:什么是rsyslog?
- Linux日志切割神器logrotate原理介绍和配置详解