Linux文件系统与日志分析

前言

Linux系统拥有非常灵活和强大的日志功能,可以保存几乎所有的操作记录,并可以从中检索出我们需要的信息。

一、inode和block概述

1.1、文件数据包括元信息与实际数据

■文件存储在硬盘.上,硬盘最小存储单位是“扇区”,每个扇区存储512字节
元信息
inode
■block (块)
●连续的八个扇区组成一个block
数据
block
●是文件存取的最小单位
■inode (索引节点)
inode,但至少占用一个block
●中文译名为“索引节点",也叫节点
●用于存储文件元信息

1.2、Linux系统文件三个主要的时间属性

●ctime(change time)
◆最后一次改变文件或目录(属性)的时间
●atime(access time)
◆最后一次访问文件或目录的时间
●mtime(modify time)
◆最后一次修改文件或目录(内容)的时间

1.3、inode包含文件的元信息

不包含文件名
文件的字节数
●文件拥有者的User ID
●文件的Group ID
●文件的读、写、执行权限
●文件的时间戳
■用stat命令可以查看某个文件的inode信息
●示例: stat aa.txt

1.4、inode的特殊作用

■由于inode号码与文件名分离,导致-些Unix/Linux系统具有以下的现象
●当文件名包含特殊字符,可能无法正常删除文件,直接删除inode,也可以删除文件
●移动或重命名文件时,只改变文件名,不影响inode号码
●打开一个文件后, 系统通过inode号码来识别该文件,不再考虑文件名

1.5、文件存储小结

硬盘分区后的结构
在这里插入图片描述

访问文件的简单流程
在这里插入图片描述

1.6、inode的大小

■inode也会消耗硬盘空间
●每个inode的大小
般是128字节或256字节
■格式化文件系统时确定inode的总数
■使用df -i命令可以查看每个硬盘分区的inode总数和已
经使用的数量

1.7、inode的特殊作用

■由于inode号码与文件名分离,导致一些Unix/Linux系
统具有以1下的现象
●当文件名包含特殊字符,可能无法正常删除文件,直接删
除inode,也可以删除文件
●移动或重命名文件时,只改变文件名,不影响inode号码
●打开一个文件后,系统通过inode号码来识别该文件,不
再考虑文件名

二、恢复误删除的文件

2.1、EXT类型文件恢复

●删除一个文件,实际上并不清除 inode 节点和 block 的数据,只是在这个文件的父目录 里面的 block 中,
删除这个文件的名字。Linux 是通过 Link 的数量来控制文件删除的,只有 当一个文件不存在任何 Link 的时候,
这个文件才会被删除。 在 Linux 系统运维工作中,经常会遇到因操作不慎、操作错误等导致文件数据丢失的情 况,
尤其对于客户企业中一些新手。当然,这里所指的是彻底删除,即已经不能通过“回收 站”找回的情况,
比如使用“rm -rf”来删除数据。针对 Linux 下的 EXT 文件系统,可用的恢复工具有 debugfs、ext3grep、extundelete 等。
其中 extundelete 是一个开源的 Linux 数据 恢复工具,支持 ext3、ext4 文件系统。

●在数据被误删除后,第一时间要做的就是卸载被删除数据所在的分区,如果是根分区的 数据遭到误删,
就需要将系统进入单用户模式,并且将根分区以只读模式挂载。这样做的原 因很简单,因为将文件删除后,
仅仅是将文件的 inode 节点中的扇区指针清零,实际文件还 存储在磁盘上,如果磁盘继续以读写模式挂载,
这些已删除的文件的数据块就可能被操作系统重新分配出去,在这些数据库被新的数据覆盖后,
这些数据就真的丢失了,恢复工具也回 天无力。所以以只读模式挂载磁盘可以尽量降低数据库中数据被覆盖的风险,
以提高恢复数 据成功的比例。

使用 extundelete 工具如何恢复误删除的文件。

[root@localhost ~]# yum -y install e2fsprogs-devel e2fsprogs-libs         ##安装extundelete两个依赖包 
[root@localhost ~]# wget http://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2   ##下载extundelete工具
[root@localhost ~]# tar xvf extundelete-0.2.4.tar.bz2
[root@localhost extundelete-0.2.4]#  ./configure --prefix=/usr/local/extundelete && make && make install
[root@localhost extundelete-0.2.4]# cd /usr/local/extundelete/bin
[root@localhost bin]# ln -s /usr/local/extundelete/bin/* /usr/sbin/
[root@localhost ~]# fdisk /dev/sdb                                        ##这里新建一块硬盘,将其挂载到/data目录下
[root@localhost ~]# mkfs.ext3 /dev/sdb1                                   ##格式化硬盘
[root@localhost ~]# mkdir /data                                           ##创建/data目录
[root@localhost ~]# mount /dev/sdb1 /data                                 ##挂载硬盘
[root@localhost ~]# cd /data
[root@localhost data]# echo a>a && echo a>b && echo a>c  && echo a>d      ##创建几个文件
[root@localhost data]# ll
总用量 32
-rw-r--r--. 1 root root     2 6月  23 15:44 a
-rw-r--r--. 1 root root     2 6月  23 15:44 b
-rw-r--r--. 1 root root     2 6月  23 15:44 c
-rw-r--r--. 1 root root     2 6月  23 15:44 d
drwx------. 2 root root 16384 6月  23 15:41 lost+found
[root@localhost data]# extundelete /dev/sdb1                              ##查看该文件系统的使用情况
[root@localhost data]# rm -rf a b                                         ##模拟误删除
[root@localhost data]# cd ~
[root@localhost ~]# umount /data                                          ##将硬盘卸载
[root@localhost ~]# extundelete /dev/sdb1 --restore-all                   ##恢复删除的数据命令
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... 160 groups loaded.
Loading journal descriptors ... 32 descriptors loaded.
Searching for recoverable inodes in directory / ... 
2 recoverable inodes found.
Looking through the directory structure for deleted files ... 
0 recoverable inodes still lost.
[root@localhost ~]# ll                                                    ##恢复的文件在这个目录中
...
drwxr-xr-x. 2 root root     24 6月  23 15:47 RECOVERED_FILES
[root@localhost ~]# cd RECOVERED_FILES/
[root@localhost RECOVERED_FILES]# ll                                      ##可以看到误删除的文件
总用量 8
-rw-r--r--. 1 root root 2 6月  23 15:47 a
-rw-r--r--. 1 root root 2 6月  23 15:47 b

1.编译安装 extundelete
在编译安装 extundelete 之前需要先安装两个依赖包 e2fsprogs-libs 和 e2fsprogs-devel,
这两个包在系统安装光盘的/Package 目录下就有,使用 rpm 或 yum 命令将其安装。
e2fsprogs-devel 安装依赖于 libcom_err-devel 包。 安装完依赖包之后,
即可将提前上传的 extundelete 软件包解压、配置、编译、安装

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
没有make 安装make,make是gcc的编译器,一定要安装
在这里插入图片描述
安装gcc
在这里插入图片描述
2、模拟删除并执行恢复操作
虚拟机添加新硬盘,使用 fdisk 命令创建新分区,将其挂载到/data目录下,往该目录下新建一些文件或目录
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
模拟误操作并恢复
在这里插入图片描述
a b恢复了
在这里插入图片描述

2.2、xfs类型文件恢复

extundelete 工具仅可以恢复 EXT 类型的文件,无法恢复 CentOS 7 系统默认采用 xfs 类型的文件。
针对 xfs 文件系统目前也没有比较成熟的文件恢复工具,所以建议提前做好数 据备份,以避免数据丢失。
xfs 类型的文件可使用 xfsdump 与 xfsrestore 工具进行备份恢复。若系统中未安装 xfsdump与xfsrestore工具,
可以通过yum install -y xfsdump命令安装。xfsdump 按照inode 顺序备份一个 xfs 文件系统。xfsdump 的备份级别
有两种:0 表示完全备份;1-9 表示增量 备份。
xfsdump 的备份级别默认为 0。
xfsdump 的命令格式为:xfsdump -f 备份存放位置 要备份路径或设备文件。常用的备份参数包括以下几种:
-f:指定备份文件目录;
-L:指定标签 session label;
-M:指定设备标签 media label;
-s:备份单个文件,-s 后面不能直接跟路径
下面通过一个案例来备份恢复 xfs 类型的文件。首先添加一款新硬盘并格式化为 xfs 类 型的文件系统,然后挂在到/date 目录下

[root@localhost ~]# mkfs.xfs -f /dev/sdc                               ##将sdc格式化为xfs格式
[root@localhost ~]# mount /dev/sdc /data                                ##挂载硬盘
[root@localhost ~]# cd /data
[root@localhost data]# cp /etc/passwd ./                                 ##复制passwd文件
[root@localhost data]# mkdir test                                        ##创建目录
[root@localhost data]# touch test/a                                      ##创建文件
[root@localhost data]# tree /data                                        ##查看目录内容
/data
├── passwd
└── test
    └── a

1 directory, 2 files
[root@localhost test]# xfsdump -f /opt/dump_sdb1 /dev/sdb1               ##使用xfsdump 命令备份整个分区
please enter label for this dump session (timeout in 300 sec)
 -> dump_sdb1                                                            ##指定备份会话标签
please enter label for media in drive 0 (timeout in 300 sec)
 -> sdb1                                                                 ##指定设备标签,就是对要备份的设备做一个描述
[root@localhost test]# xfsdump -I                                        ##查看备份信息(注意这里是大写的i)
[root@localhost test]# cd /data
[root@localhost data]# ls                                                ##data下的文件目录
passwd  test
[root@localhost data]# rm -rf *                                          ##模拟误删
[root@localhost data]# ll
总用量 0
[root@localhost data]# xfsrestore -f /opt/dump_sdb1 /data/               ##使用此命令恢复数据
[root@localhost data]# ls                                                ##恢复成功
passwd  test

正在同步磁盘
在这里插入图片描述
准备测试文件
在这里插入图片描述
使用xfsdump 命令备份整个分区
在这里插入图片描述
分析日志文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、日志文件

3.1、日志的功能

■日志的功能
●用于记录系统、程序运行中发生的各种事件
●通过阅读日志,有助于诊断和解决系统故障

■日志文件的分类
●内核及系统日志
◆由系统服务rsyslog统-进行管理,日志格式基本相似
●用户日志
◆记录系统用户登录及退出系统的相关信息
程序日志.
◆由各种应用程序独立管理的日志文件,记录格式不统一

3.2、日志文件的分类

在 Linux 操作系统中,日志数据主要包括以下三种类型

内核及系统日志:这种日志数据由系统服务 rsyslog 统一管理,根据其主配置文件 /etc/rsyslog.conf 中的设置决定将内核消息及各种系统程序消息记录到什么位置。 系统中有相当一部分程序会把自己的日志文件交由 rsyslog 管理,因而这些程序使 用的日志记录也具有相似的格式
用户日志:这种日志数据用于记录 Linux 操作系统用户登录及退出系统的相关信息, 包括用户名、登录的终端、登录时间、来源主机、正在使用的进程操作等
程序日志:有些应用程序会选择由自己独立管理一份日志文件(而不是交给 rsyslog 服务管理),用于记录本程序运行过程中的各种事件信息。由于这些程序只负责管 理自己的日志文件,因此不同程序所使用的日志记录格式可能会存在较大的差异
Linux 操作系统本身和大部分服务器程序的日志文件都默认放在目录/var/log/下。一部分程序共用一个日志文件,一部分程序使用单个日志文件,而有些大型服务器程序由于日志文件不止一个,所以会在/var/log/目录中建立相应的子目录来存放日志文件,这样既保证了 日志文件目录的结构清晰,又可以快速定位日志文件。有相当一部分日志文件只有 root 用户才有权限读取,这保证了相关日志信息的安全性。

对于 Linux 操作系统中的日志文件,有必要了解其各自的用途,这样才能在需要的时候 更快地找到问题所在,及时解决各种故障。下面介绍常见的一些日志文件

1./var/log/messages:记录 Linux 内核消息及各种应用程序的公共日志信息,包括启动、I/0 错误、网络错误、程序故障等。对于未使用独立日志文件的应用程序或服务,一般都可以从该日志文件中获得相关的事件记录信息
2./var/log/cron:记录 crond 计划任务产生的事件信息
3./var/log/dmesg:记录 Linux 操作系统在引导过程中的各种事件信息
4./var/log/maillog:记录进入或发出系统的电子邮件活动
5./var/log/lastlog:记录每个用户最近的登录事件
6./var/log/secure:记录用户认证相关的安全事件信息
7./var/log/wtmp:记录每个用户登录、注销及系统启动和停机事件
8./var/log/btmp:记录失败的、错误的登录尝试及验证事件

3.3、日志文件分析

分析日志文件的目的在于通过浏览日志查找关键信息、对系统服务进行调试,以及判断发生故障的原因等。
我这里主要介绍三类日志文件的基本格式和分析方法。
对于大多数文本格式的日志文件(如内核及系统日志、大多数的程序日志),只要使用tail. more. less、 cat
等文本处理工具就可以查看日志内容。而对于一些二进制格式的日志文件(如用户日志) ,则需要使用特定的查询命令

3.4、内核及系统

日志消息的级别
从配置文件/etc/rsyslog.conf 中可以看到,受 rsyslogd 服务管理的日志文件都是Linux 操作系统中主要的日志文件,它们记录了 Linux 操作系统中内核、用户认证、电子邮件、计划任务等基本的系统消息。在 Linux 内核中,根据日志消息的重要程度不同,将其分为不同的优先级别(数字等级越小,优先级越高,消息越重要)

在这里插入图片描述
内核及大多数系统消息被记录到公共日志文件/var/log/messages 中,而其他一些程序 消息被记录到各自独立的日志文件中,
此外日志消息还能够记录到特定的存储设备中,或者 直接发送给指定用户。

用户日志
在 wtmp、btmp、lastlog 等日志文件中,保存了系统用户登录、退出等相关的事件消息,但是这些文件都是二进制的数据文件,不能直接使用 tail、less 等文本查看工具进行浏览,需要使用 who、w、users、last 和 lastb 等用户查询命令来获取日志信息
(1)、查询当前登录的用户情况——users、who、w 命令
users 命令只是简单地输出当前登录的用户名称,每个显示的用户名对应一个登录会话。
如果一个用户有不止一个登录会话,那他的用户名将显示与其相同的次数。users命令的具体操作如下:

[root@localhost ~]# users		###打开了一个终端
root

who 命令用于报告当前登录到系统中的每个用户的信息。使用该命令,系统管理员可 以查看当前系统存在哪些不合法用户,
从而对其进行审计和处理。who 的默认输出包括用 户名、终端类型、登录日期及远程主机。
who 命令的具体操作如下:

[root@localhost ~]# who
root     pts/0        2020-06-23 00:34 (20.0.0.1)
[root@localhost ~]# w
 01:16:49 up 45 min,  1 user,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    20.0.0.1         00:34    1.00s  0.22s  0.00s w

(2)查询用户登录的历史记录——last、lastb 命令 last 命令用于查询成功登录到系统的用户记录,
最近的登录情况将显示在最前面。通过 last 命令可以及时掌握 Linux 主机的登录情况,
若发现未经授权的用户登录过,则表示当前 主机可能已被入侵。last 命令的具体操作如下

[root@localhost ~]# last

lastb 命令用于查询登录失败的用户记录,如登录的用户名错误、密码不正确等情况都 将记录在案。
登录失败的情况属于安全事件,因为这表示可能有人在尝试猜解你的密码。除 了使用 lastb 命令查看以外,
也可以直接从安全日志文件/var/log/secure 中获得相关信息。

[root@localhost ~]# lastb

[root@localhost ~]# tail /var/log/secure

3.程序日志 在 Linux 操作系统中,还有相当一部分应用程序没有使用 rsyslog 服务来管理日志,
而 是由程序自己维护日志记录。例如,httpd 网站服务程序使用两个日志文件 access_log 和 error_log
分别记录客户访问事件和错误事件。不同应用程序的日志记录格式差别较大,且 没有严格使用统一的格式,
这里不再详细介绍。 总的来说,作为一名合格的系统管理人员,应该提高警惕,随时注意各种可疑状况,
定 期并随机检查各种系统日志文件,包括一般信息日志、网络连接日志、文件传输日志及用户

登录日志记录等。在检查这些日志时,要注意是否有不合常理的时间或操作记录。例如,出 现以下现象就应多加注意。
●用户在非常规的时间登录,或者用户登录系统的 IP 地址和以往的不一样。
●用户登录失败的日志记录,尤其是那些一再连续尝试进入失败的日志记录。
●非法使用或不正当使用超级用户权限。
●无故或者非法重新启动各项网络服务的记录。
●不正常的日志记录,如日志残缺不全,或者是诸如 wtmp 这样的日志文件无故缺少 了中间的记录文件。

另外,需要提醒管理人员注意的是,日志并不是完全可靠的,高明的黑客在入侵系统后 经常会打扫现场。
所以管理人员需要综合运用以上的系统命令,全面、综合地进行审查和检 测,切忌断章取义,
否则将可能做出错误的判断。

猜你喜欢

转载自blog.csdn.net/weixin_47151650/article/details/106930683
今日推荐