Linux基础学习笔记-日志分析

前言

仔细审计日志,备份日志也是一个系统管理员必要的任务。

Linux日志分析

什么是日志

简单说就是记录系统活动信息的几个文件,例如:何时,何IP,何人,干嘛了,换句话说就是:记录什么时候由哪个进程做了什么事,导致了何种事件的发生。

日志文件的简单说明

一、主要工作:

  • 解决系统方面的错误

    偶尔会发现一些系统层面的错误,包括硬件无法识别或者是某些系统无法顺利启动。由于系统会将硬件检测过程记录在日志,只要审计日志即可发现问题

  • 解决网络服务的问题

    可能作完某些网络服务的设置以后却一直无法顺利启动该服务,由于网络服务的各种问题都会被写入特别的日志文件,只要查询日志文件就可以了解发生什么差错。

  • 过往时间记录本

    如果发现某个时刻WWW服务流量特别大,就可以通过日志文件去找该时间段有哪些IP连接,查询了哪些网页数据。

二、常见的日志文件:

/var/log/boot.log 开机启动检测系统和硬件,启动内核信息

/var/log/corn 计划任务信息

/var/log/dmesg 开机时内核检测过程中产生的信息

/var/log/lastlog 记录系统上所有账号最近一次的登录系统的相关信息

/var/log/maillog、/var/log/mail* 邮件来往信息

/var/log/messages 系统发生错误的信息

/var/log/secure 牵涉到输入账号密码的软件,登录时都会被记录在这个文件,例如sudo,ssh…

/var/log/wtmp、/var/log/faillog 正确登录系统的账户,和登录失败的使用的账户信息

/var/log/httpd/*、/var/log/samba/* 网络服务会使用自己的日志来记录,上述则是个别服务所产生的日志

三、日志文件所需要的相关的daemon和程序

这些日志文件如何产生,主要靠两种方式:1.由软件开发商自定义写入的日志文件,例如apache。2.就是利用Linux发行版本提供的日志文件管理服务,Centos就提供rsyslog.service这个服务来统一管理日志文件。

因为日志天天有,日志的容量将会变大,可能导致读写效率不佳,所以需要备份和更新。可以通过logrotate的日志轮询工具来自动化处理。功能就是将旧的日志文件名更改,然后建立一个新的空的日志文件重新记录。

需要的服务和程序:

systemd-journald.service 主要信息记录者,由systemd提供

rsyslog.service 主要收集登录系统和网络服务信息

logrotate 日志文件的轮询

日志文件内容的格式

试一下sudo cat /etc/log/secure,从中挑选出一条来解读:

1
Nov 17 04:12:40 localhost sshd[6811]: Accepted password for gard3nia from 192.168.4.1 port 1028 ssh2
  1. 首先是时间发生的时间
  2. 其次就是此事件的主机名
  3. 接着是启动此事件的服务名称
  4. 最后是该信息的实际内容

该条日志的意思就是在这个日期,本主机的ssh服务接受了gard3nia的密码从另一台IP的主机用ssh从1028端口连接到本主机。

rsyslog.service

记录日志文件的一种服务,下面查看一下进程和守护进程状态

1
2
3
4
5
6
7
8
9
10
11
12
[gard3nia@localhost ~]$ ps aux|grep rsyslog
root 1175 0.0 0.3 222804 3460 ? Ssl Nov16 0:21 /usr/sbin/rsyslogd -n
gard3nia 7156 0.0 0.0 112716 964 pts/1 S+ 05:43 0:00 grep --color=auto rsyslog
[gard3nia@localhost ~]$ systemctl status rsyslog.service
● rsyslog.service - System Logging Service
Loaded: loaded (/usr/lib/systemd/system/rsyslog.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2019-11-15 22:27:56 EST; 1 day 7h ago
Docs: man:rsyslogd(8)
http://www.rsyslog.com/doc/
Main PID: 1175 (rsyslogd)
CGroup: /system.slice/rsyslog.service
└─1175 /usr/sbin/rsyslogd -n

看见这个服务确实有而且状态是running而且在这个状态下开机自启;

rsyslog.service的配置文件

/etc/rsyslog.conf是rsyslogd这个守护进程的配置文件,这个守护进程可以负责主机产生的各种信息的记录,这些信息本身是有等级之分的,这个配置文件规定了:1.什么服务;2.什么等级信息;3.记录在哪里;

需要将其分为三个部分:

1.服务名称

这个守护进程主要还是通过Linux内核提供的syslog相关规范来设置数据的分类,linux内核的syslog支持的服务类型如下:

MfEh9K.png

上述的都是linux内核的syslog函数自行制定的服务名称,软件开发商可以通过调用删除的服务名称来记录他们的软件。举例来说就是:sendmail和postfix都是和邮件相关的软件,这些软件在设计日志文件记录的时候,都会主动调用syslog内的mail服务名称。可以通过下图来理解:

MfZpRK.png

每种服务产生的数据量千差万别,所以为了让不同的信息放置到不同的文件当中,以便分门别类进行管理,所以这个配置文件也要做到将各种类型的日志文件记录在不同的文件里面。

2.信息等级

等级约到代表约没事…

MfZtJ0.png

Mfelp6.png

3.信息记录的文件名

就是这些信息需要存取到哪里的设置…基本上都是放在/var/log

还有几种就是

  • 文件绝对路径
  • 打印机或者其他设备
  • 用户名称
  • 远程主机
  • *:代表所有人

4.服务、daemon和函数名称

Mfe8XD.png

CentOS7.x默认的rsyslog.conf内容

MfeTuF.png

解释一下:

  1. #kern.*:只要是内核产生的信息,全部都传输到console去

  2. *.info;mail.none;authpriv.none;cron.none:产生信息比较多的几个服务比如mail,auth,cron不在messages记录,除此以外的其他信息记录到messages里面

  3. authpriv.*:认证方面的信息全部写入secure

  4. mail.*:邮件方面的信息全部写入maillog
  5. cron.*:关于计划任务全部写入cron
  6. *.emerg:当产生最严重的错误等级时,将该等级的信息以wall的方式广播给所有系统登录的用户
  7. uucp,news.crit:通讯协议和新闻组写入spooler
  8. local7.*:将本机启动时应该显示到屏幕的信息写入boot.log

想要自己定义也是可以的,前提是需要掌握这个配置文件的书写语法…

日志文件的安全性

黑客一般到后渗透测试的阶段会有一个抹除踪迹的做法,所以此时安全性问题就非常重要了。所以需要找到一个办法,防止日志文件被删除或者被root不小心修改。但是再安全的日志保护也没有什么luan用,只要别人拿到你的root权限的shell,做什么都是徒劳…所以系统安全非常重要…

这就需要用到之前再文件管理里讲到的隐藏属性了,关于chattr和lsattr两个命令的用法,如果将一个文件的属性以chattr设置a这个属性的时候,那么root都不可以删除,而且只能增加数据,这个属性就非常符合我们对日志文件的要求。

attention

这在一定程度上还可以帮助你避免不小心自己写入日志文件的情况。当你vi打开,然后:wq来退出的时候,那么该文件未来就不会再继续进行记录操作。vi存储了日志文件,则rsyslogd会误判为该文件已经被修改过了,将导致rsyslogd不再写入新内容到该文件。

这种情况下需要重启rsyslogd.service这个服务

加上a的属性以后,轮询功能就会失效,需要在logrotate的配置文件里面解决

日志文件服务器的设置

我想…了解一下是啥就行了,这张图可以生动形象的显示出来…

MfJW4O.png

设置的话,直接修改两者的配置文件即可…现在没有那么多机子,也没法自己动手试试,所以暂行搁置…

日志的轮询logrotate

logrotate的配置文件

作用就是记录:在什么状况下才将日志文件进行轮询

/etc/logrotate.conf

/etc/logrotate.d/

主要还是记录在conf文件里面,第二个为文件夹,其实轮询功能就是将现有的日志文件重命名以作备份,再重新建立一个空文件来记录信息。以下就是conf文件里的内容:

Mf5tN6.png

logrotate的实际使用

1
2
3
logrotate -vf logfile
-v 启动显示模式。会显示其运行过程
-f 强制每个日志文件都进行轮询

systemd-journald.service

由于systemd是内核唤醒的,然后又是第一个执行的软件,它可以主动调用systemd-journald来协助记录日志文件,因此在开机启动过程中的所有信息,包括启动服务和服务启动失败的情况等,都可以直接被记录到s-j里面。但是s-j由于是使用于内存的日志文件记录方式,因此重新启动以后,开机启动之前的日志文件就没有了。所以现在都是s-j来管理和查询这次启动以后的登录信息,而rsyslogd来记录以前以及现在的所有数据到磁盘上。

journslctl查看登录信息

s-j.service的数据如何查看,就要用到上述的命令:

Mfbg5n.png

主要参数:

1
2
3
4
5
-n 最近几行
-r 反向输出
--since --until 设置开始和结束时间
_PID=pid
_UID=uid
Author: Gard3nia
Link: https://gardenia30.top/2019/11/20/Linux基础学习笔记-分析日志/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.