文件系统与日志分析

335 阅读10分钟

日志文件介绍与分析

日志文件的分类:

  • 内核及系统日志:

    这种日志数据由系统服务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等专用日志分析工具

日志管理策略

  1. 及时做好备份和归档

  2. 延长日志保存期限

  3. 控制日志访问权限

    • 日志中可能会包含各类敏感信息,如账户、口令等。
  4. 集中管理日志

    • 将服务器的日志文件发到统一的日志文件服务器

    • 便于日志信息的统一收集、整理和分析

    • 杜绝日志信息的意外丢失、恶意篡改或删除

内核及系统日志管理

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