日志文件介绍与分析
日志文件的分类:
-
内核及系统日志:
这种日志数据由系统服务rsyslog统一管理,根据其主配置文件/etc/rsyslog.conf中的设置,决定将内核消息及各种系统程序消息记录到什么位置。日志格式基本相似。
-
用户日志:
记录用户登录及退出系统的相关信息,包括用户名、登录的终端、登录时间、来源主机、正在使用的进程操作等。
-
程序日志:
有些应用程序会选择由自己独立管理一份日志文件(而不是交给rsyslog服务管理),用于记录本程序运行过程中的各种事件信息。记录格式不统一。
Linux 操作系统本身和大部分服务器程序的日志文件都默认放在目录/var/log/下
内核及系统日志
由系统服务 rsyslog 统一管理,根据其主配置文件 /etc/rsyslog.conf。
-
软件包:rsyslog-8.24.0-12.el7.x86_64 (可使用 ”rpm -q“ 命令查看)
-
主要程序:/sbin/rsyslogd
-
配置文件:/etc/rsyslog.conf (可使用 ”rpm -qc“ 命令查看)
用户日志分析
保存了用户登录、退出系统等相关信息:
- /var/log/lastlog:最近都用户登录事件。二进制文件,使用 lastlog 命令查看。
- /var/log/secure:与用户验证有关的安全性事件。
- /var/log/wtmp:用户登录、注销,及系统开、关机事件。二进制文件,使用 last 命令查看。
- /var/run/utmp:当前登录的每个用户的详细信息。二进制文件,使用w、who、users等命令查看。
分析工具:
- users、who、w、last、lastb
1)users:查询最近三次登录的用户信息。
users 命令只是简单地输出当前登录的用户名称,每个显示的用户名对应一个登录会话。 如果一个用户有不止一个登录会话,那他的用户名将显示与其相同的次数。
[root@localhost ~]# users
root root
2)who:查看当前登录的用户、终端、登录时间、IP地址。
who命令用于报告当前登录到系统中的每个用户的信息。使用该命令,系统管理员可
以查看当前系统存在哪些不合法用户,从而对其进行审计和处理。who 的默认输出包括用
户名、终端类型、登录日期及远程主机。
[root@localhost ~]# who
root pts/0 2022-03-11 21:17 (192.168.72.1)
root pts/1 2022-03-11 21:17 (192.168.72.1)
3)w:查看当前登录的用户、终端、IP地址、登录时间、占用CPU的情况、进程等。
w 命令用于显示当前系统中的每个用户及其所运行的进程信息,比 users、who 命令的 输出内容要丰富一些。
[root@localhost ~]# w
23:24:39 up 2:16, 2 users, load average: 0.25, 0.18, 0.16
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.72.1 21:17 7.00s 0.11s 0.00s w
root pts/1 192.168.72.1 21:17 2:06m 9.05s 9.03s top
4)last: 读取 /var/log/wtmp 文件,显示登录系统的用户信息。
last 命令用于查询成功登录到系统的用户记录,最近的登录情况将显示在最前面。通过 last 命令可以及时掌握 Linux 主机的登录情况,若发现未经授权的用户登录过,则表示当前 主机可能已被入侵。
[root@localhost ~]# last -n 3 //查看最近3次登录信息
root pts/3 192.168.72.1 Fri Mar 11 23:00 - 23:19 (00:19)
root pts/2 192.168.72.1 Fri Mar 11 23:00 - 23:19 (00:19)
root pts/3 192.168.72.1 Fri Mar 11 22:22 - 23:00 (00:37)
wtmp begins Tue Jan 18 17:39:14 2022
[root@localhost ~]# last -t 20220305200000 |head -5 //查看2022年3月5日20点之前的登录信息
root pts/1 192.168.72.1 Sat Mar 5 18:32 - 19:47 (01:15)
root pts/0 192.168.72.1 Sat Mar 5 18:32 - 19:47 (01:15)
root pts/1 192.168.72.1 Sat Mar 5 17:07 - 18:23 (01:16)
root pts/0 192.168.72.1 Sat Mar 5 17:07 - 18:23 (01:16)
root pts/1 192.168.72.1 Sat Mar 5 16:55 - 17:05 (00:10)
5)lastb:读取 /var/log/btmp 文件,显示登入系统失败的用户信息。
lastb 命令用于查询登录失败的用户记录,如登录的用户名错误、密码不正确等情况都将记录在案。登录失败的情况属于安全事件,因为这表示可能有人在尝试猜解你的密码。除 了使用 lastb 命令查看以外,也可以直接从安全日志文件/var/log/secure 中获得相关信息。
[root@localhost ~]# lastb
yuji pts/0 Mon Mar 7 04:02 - 04:02 (00:00)
zhangsan pts/0 Mon Mar 7 03:43 - 03:43 (00:00)
yuji pts/0 Mon Mar 7 03:40 - 03:40 (00:00)
root pts/0 Sat Mar 5 12:15 - 12:15 (00:00)
btmp begins Sat Mar 5 12:15:57 2022
程序日志分析
由相应的应用程序独立进行管理:
-
Web服务:/var/log/httpd/
- access_log、error_log
-
代理服务:/var/log/squid
- access.log、cache.log
-
FTP服务:/var/log/xferlog
分析工具:
-
文本查看、grep过滤检索、Webmin管理套件中查看
-
awk、sed等文本过滤、格式化编辑工具
-
Webalizer、Awstats等专用日志分析工具
日志管理策略
-
及时做好备份和归档
-
延长日志保存期限
-
控制日志访问权限
- 日志中可能会包含各类敏感信息,如账户、口令等。
-
集中管理日志
-
将服务器的日志文件发到统一的日志文件服务器
-
便于日志信息的统一收集、整理和分析
-
杜绝日志信息的意外丢失、恶意篡改或删除
-
内核及系统日志管理
rsyslog 系统日志服务
rsyslog是CentOS 6以后版本的系统管理服务:它提供了高性能,出色的安全性和模块化设计。尽管rsyslog最初是常规的syslogd,但发展成为一种瑞士军刀式的记录工具,能够接受来自各种来源的输入,并将其转换,然后输出到不同的目的地。
当应用有限的处理时,RSYSLOG每秒可以将超过一百万的消息传递到本地目的地。即使在远程的目的地和更精细的处理中,性能通常也被认为是惊人的”。
ELK
ELK:由Elasticsearch、Logstash、Kibana三个软件组成。
- 非关系型分布式数据库基于apache软件基金会jakarta项目组的项目lucene
- Elasticsearch是个开源分布式搜索引擎,可以处理大规模日志数据,比如:Nginx、Tomcat、系统日志等功能
- Logstash对日志进行收集、分析,过滤,并将其存储供以后使用
- Kibana 可以提供的日志分析友好的 Web 界面
rsyslog 相关文件
-
程序包:rsyslog
-
主程序:/usr/sbin/rsyslogd
-
CentOS 6:/etc/rc.d/init.d/rsyslog {start|stop|restart|status}
-
CentOS 7,8:/usr/lib/systemd/system/rsyslog.service
-
配置文件:/etc/rsyslog.conf,/etc/rsyslog.d/*.conf
-
库文件: /lib64/rsyslog/*.so
作者:聂鲁达的邮差
链接:juejin.cn/post/707420…
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
rsyslog 配置文件
/etc/rsyslog.conf 配置文件格式(由三部分组成):
- MODULES:相关模块配置
- GLOBAL DIRECTIVES:全局配置
- RULES:日志记录相关的规则配置
RULES配置格式:
facility.priority;
#分类 优先级
# priority 的表示 #
*: 所有级别
none:没有级别,即不记录
PRIORITY:指定级别(含)以上的所有级别
=PRIORITY:仅记录指定级别的日志信息
文件路径:通常在/var/log/,文件路径前的-表示异步写入。
用户:将日志事件通知给指定的用户,* 表示登录的所有用户。
日志服务器:@host,把日志送往至指定的远程UDP日志服务器;@@host,将日志发送到远程TCP日志服务器。
管道: | COMMAND,转发给其它命令处理。
rsyslog 应用实例
将ssh服务的日志单独设置
实验步骤:
步骤1:修改rsyslog服务的配置文件/etc/rsyslog.conf,设置LOCAL0对应的日志路径。
[root@localhost ~]# vim /etc/rsyslog.conf
------------------------
local0.* /var/log/sshd.log
步骤2:修改ssh服务的配置文件/etc/ssh/sshd_config,将ssh的日志修改为记录在LOCAL0对应的路径下。
(ssh服务的日志默认放在authpriv服务对应的路径下,需先将该行注释掉。)
[root@localhost ~]# vim /etc/ssh/sshd_config
------------------------
#SyslogFacility AUTHPRIV //原路径,注释掉这一行
SyslogFacility LOCAL0 //添加自定义路径
步骤3:重启 rsyslog 服务和 ssh 服务。
[root@localhost ~]# systemctl restart {rsyslog,sshd}
复制代码
步骤4:打开第二台机器,远程连接原服务器。故意输错2次密码,稍后查看原服务器的日志。
[root@192 ~]# ssh 192.168.72.10
root@192.168.72.10's password:
Permission denied, please try again.
root@192.168.72.10's password:
Permission denied, please try again.
root@192.168.72.10's password:
步骤5:查看原服务器的日志记录。/var/log/sshd.log 成功记录了第二台机器的行为。
[root@localhost ~]# tail -3 /var/log/sshd.log
Mar 12 01:32:04 localhost sshd[8398]: Connection closed by 192.168.72.129 port 55592 [preauth]
Mar 12 01:32:29 localhost sshd[9433]: Failed password for root from 192.168.72.129 port 55594 ssh2
Mar 12 01:32:48 localhost sshd[9433]: Failed password for root from 192.168.72.129 port 55594 ssh2
网络日志(远程日志功能)
远程日志,即通过网络,将本地的日志远程备份到另一台机器,这样,就算本机系统崩溃,我们可以查看另一台机器备份的日志,来排查故障。 假设服务器A需要将日志备份到服务器B,那么A是发送方,B是接收方。
接收方需要开启TCP功能(或UDP功能)和514接口,发送方需填写想要传输的日志和接收方的地址。
实验步骤:
步骤1:接收方开启TCP功能和514端口(编辑rsyslog的配置文件 /etc/rsyslog.conf)。
关闭防火墙;
编辑配置文件,开启TCP功能和514端口(去掉这两行原有的#号);
重启rsyslog 服务;
检查514端口是否开启。
[root@192 ~]# systemctl stop firewalld //关闭防火墙
[root@192 ~]# vim /etc/rsyslog.conf //编辑配置文件
------------------------
# Provides TCP syslog reception
$ModLoad imtcp //开启TCP功能
$InputTCPServerRun 514 //开启514端口
[root@192 ~]# systemctl restart rsyslog //重启日志服务
[root@192 ~]# ss -ntap | grep 514 //检查514端口是否开启
LISTEN 0 25 *:514 *:* users:(("rsyslogd",pid=12528,fd=3))
FIN-WAIT-2 0 0 192.168.72.129:514 192.168.72.10:42556
LISTEN 0 25 :::514 :::* users:(("rsyslogd",pid=12528,fd=4))
步骤2:发送方填写需要传输的日志和接收方的IP地址(编辑配置文件 /etc/rsyslog.conf)。
关闭防火墙;
编辑配置文件,填写需要传输的日志和接收方地址;
重启rsyslog 服务;
测试日志打印。
(@地址表示使用UDP功能;@@地址表示使用TCP地址)
[root@localhost log]# systemctl stop firewalld //关闭防火墙
[root@localhost log]# vim /etc/rsyslog.conf //编辑配置文件
------------------------
*.info;mail.none;authpriv.none;cron.none @@192.168.72.129
[root@localhost log]# systemctl restart rsyslog //重启日志服务
[root@localhost log]# logger "this test 777777" //测试日志打印
[root@localhost log]# tail -1 /var/log/messages //查看日志记录
Mar 8 12:14:51 localhost root: this test 777777
步骤3:查看接收方能否成功接收日志记录。
接收方服务器成功记录测试日志。
[root@192 ~]# grep 7777 /var/log/messages
Mar 8 12:12:44 localhost root: this test 777777
Mar 8 12:14:51 localhost root: this test 777777
Mar 8 12:21:20 localhost root: this test 777777
Mar 8 12:23:30 localhost root: this test 777777