Linux文件系统与日志分析(i节点号与block、如何恢复误删文件、从底层理解硬链接与软链接区别、分析日志文件)

一、深入理解Linux文件系统

一个新的操作系统的文件数据除了内容外,往往还有着非常多的属性,文件系统通常会将这两部分分开存放,分别存放在inode和block中。
那么什么是inode?什么是block呢?

1.1 inode与block

要理解inode与block,我们首先得从文件的存储讲起。

  • 文件是存储在硬盘上的,硬盘的最小存储单位是扇区(sector),每一个扇区存储512个字节。
  • 操作系统读取硬盘信息,不会一个一个扇区读取,是一次性连续读取多个扇区,也就是一次性读取一个块(block)
  • “块”是文件存取的最小单位,最常见的4K,连续的8个扇区组成一个Block块,512字节*8=4096字节,我们固态硬盘分区时要求的4k对齐也就是这个。
  • 文件存储在块中,文件的创建者、创建日期、文件大小等属性我们称之为元信息,也需要找一个地方存储,存储元信息的区域就是inode,我们称之为“索引节点”,也就是i节点
  • 一个文件必须占用一个inode,至少占用一个block。
    文件的数据包括二部分:1、元信息(inode) 2、实际数据(block)

1.2 inode的内容

我们可以使用stat命令查看某个文件的inode信息。
在这里插入图片描述
从上可以看出,inode包括很多的文件元信息,比如文件的字节数、i节点号、文件拥有者的userid、文件的groupid,文件的权限、时间戳等等,但是不包含文件的文件名。
Linux系统文件有三个主要的时间属性,分别是ctime(change time),atime(access time), mtime(modify time)

  • ctime(change time) 是最后一次改变文件或目录(属性)的时间,例如执行 chmod, chown 等命令;
  • atime(access time)是最后一次访问文件或目录的时间;
  • mtime(modify time)是最后一次修改文件或目录(内容)的时间

为什么inode不包括文件名?

因为文件名是存放在目录当中的,在Linux系统中一切皆文件,所以目录也是一种文件,下面的表格就是目录文件的结构,每一列就是一个目录项。

文件名1 文件名2
inode号码1 inode号码2

1.3 inode号码

操作系统用inode号码来识别不同的文件,每个文件都有一个inode号码,Linux系统内部不使用文件名来识别文件,用的就是inode号码来识别文件,对于操作系统来说,文件名就是inode号码。
一个文件被打开,在系统内部的过程大致分以下三步:

  1. 系统找到文件名对应的inode号码
  2. 通过inode号码获取inode信息
  3. 根据inode信息,找到文件数据所在的block,读出数据

除了stat命令查看inode号码,还可以通过ls -i命令查看文件的inode号码
在这里插入图片描述
当用户在linux系统中视图访问一个文件时候,系统会根据文件名去查找对应的inode,看该用户是否具有访问这个文件的权限,如果有,就指向对应的数据block,如果没有,就返回 permission deied ,而一块硬盘分区后的结构则如下:

文件-------目录项--------目录
元信息-----inode-------inode表区块
数据------block-------block数据块

1.4 inode的大小

inode也会消耗硬盘空间,每个inode的大小一般是128字节或者256字节。inode的总数在格式化的时候就会给定。执行命令“df -i”就可以查看每个硬盘分区的inode总数和已经使用的数量。
在这里插入图片描述
因为文件名与inode是分离的,所以可能会出现以下现象:

  • 文件名包含特殊字符,可能无法正常删除。这时直接删除 inode,能够起到删除文件的作用;
  • 移动文件或重命名文件,只是改变文件名,不影响 inode 号码;
  • 打开一个文件以后,系统就以 inode 号码来识别这个文件,不再考虑文件名。

1.5 i节点号耗尽

因为每一个文件都必须占用一个inode号码,且inode号码是有限的,就可能会出现一种状况,就是我们磁盘空间仍然存在,但是我们无法在硬盘上创建新文件。这种情况的发生就是由于我们的inode号码用光导致的。往往是因为我们文件中产生了很多字节小,数量多的缓存文件,一些人也会利用这个进行攻击。
解决方法就是我们找到这些文件的存储位置,对这些小文件进行转移或删除。如果是很多用户公用的文件系统,我们可以用磁盘配额来解决这个问题。

二、 详细解释硬链接与软连接

一般我们所说的软链接类似于微软的快捷方式,硬链接相当于对原文件进行了复制,这种说法在我们刚刚了解了inode与block以后,我们会发现这样的说法不正确。

2.1 硬链接

通过文件系统的inode链接来产生新的文件名,而不是产生新文件,这就是硬链接。inode信息中的链接数会加1。
下图简单的说明了硬链接的特点

  • 硬链接产生了新的文件名,新的文件名的inode号码没变,还是指向原来的block
  • 我们单独删除硬链接中的任何文件名都不会影响到我们读取原文件
  • 当一个文件拥有多个硬连接时,对文件内容修改,会影响所有文件名,但是删除一个文件名,不会影响另外一个文件名称访问,删除一个文件名,只会inode中的连接数减1
  • 不能对目录做硬连接
    文件名1--------node节点(abc)--------数据 
                                         |
    文件名2--------node节点(abc)---------

在这里插入图片描述

2.2 软链接

软连接就是再创建一个独立的文件,而这个文件会让数据的读取指向它连接的那个文件名称。例如,文件A和B的inode号码虽然不一样,但是文件A的内容是文件B的路径,读取文件A时系统会自动访问者导向文件B,这时,文件A就称为文件B的‘软链接’或者符号连接。这里的链接数不会发生变化。

文件名1--------node节点(abc)--------数据
      |			
文件名2--------node节点(cde)

软链接特点

  • 产生一个新的inode号码,新inode号码指向原来的inode号码
  • 删除原来的inode会导致新的inode也无法打开文件

在这里插入图片描述

三、 恢复误删文件

我们删除一个文件,只是在这个文件的父目录里面的block中删除了这个文件的额名字,并不会清除inode节点和block数据。Linux是通过link的数量来控制文件删除的,只有当一个文件不存在link时,这个文件才会被删除。
在 Linux 系统运维工作中,经常会遇到因操作不慎、操作错误等导致文件数据丢失的情况,尤其对于客户企业中一些新手。当然,这里所指的是彻底删除,即已经不能通过“回收站”找回的情况,比如使用“rm -rf”来删除数据。
接下来我们以extundelete软件恢复误删数据来演示。

3.1 extundelete软件恢复误删数据

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

[root@localhost opt]# yum -y install e2fsprogs-devel e2fsprogs-libs   //安装 extundelete软件的两个依赖包
[root@localhost ~]# yum -y install wget   //安装wget
[root@localhost opt]# wget http://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2   //用wget下载extundelete软件
[root@localhost opt]# yum -y install bzip2   //下载解压bzip2
[root@localhost opt]# tar xvf extundelete-0.2.4.tar.bz2    //解压
[root@localhost opt]#  cd extundelete-0.2.4/   //到这个目录下
[root@localhost extundelete-0.2.4]# ./configure --prefix=/usr/local/extundelete && make && make install   //指定安装目录
cd /usr/local/extundelete/bin   //到这个目录下
ln -s /usr/local/extundelete/bin/* /usr/sbin/    //创建软链接,方便管理
yum -y install gcc automake autoconf libtool make   //安装编译器
yum install gcc gcc-c++    //安装c++

2、模拟删除并执行恢复操作
虚拟机添加新硬盘,使用 fdisk 命令创建新分区,将其挂载到/data目录下,往该目录下新建一些文件或目录
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
我们去/root/RECOVERED_FILES/目录下就可以查看恢复文件。

在这里插入图片描述

3.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文件被误删恢复
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述

四、 分析日志文件

日志文件是用于记录 Linux 操作系统中各种运行消息的文件,相当于 Linux 主机的“日记”。不同的日志文件记载了不同类型的信息,如 Linux 内核消息、用户登录事件、程序错误等。

4.1 日志文件的分类

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

  • 内核及系统日志:这种日志数据由系统服务 rsyslog 统一管理,根据其主配置文件 /etc/rsyslog.conf中的设置决定将内核消息及各种系统程序消息记录到什么位置。 系统中有相当一部分程序会把自己的日志文件交由 rsyslog管理,因而这些程序使 用的日志记录也具有相似的格式
  • 用户日志:这种日志数据用于记录 Linux 操作系统用户登录及退出系统的相关信息,包括用户名、登录的终端、登录时间、来源主机、正在使用的进程操作等。
  • 程序日志:有些应用程序会选择由自己独立管理一份日志文件(而不是交给 rsyslog服务管理),用于记录本程序运行过程中的各种事件信息。由于这些程序只负责管理自己的日志文件,因此不同程序所使用的日志记录格式可能会存在较大的差异。

常见的一些日志文件如下:
/var/log/messages:记录 Linux 内核消息及各种应用程序的公共日志信息,包括启动、I/0 错误、网络错误、程序故障等。
对于未使用独立日志文件的应用程序或服 务,一般都可以从该日志文件中获得相关的事件记录信息

  • /var/log/cron:记录 crond 计划任务产生的事件信息
  • /var/log/dmesg:记录 Linux 操作系统在引导过程中的各种事件信息
  • /var/log/maillog:记录进入或发出系统的电子邮件活动。
  • /var/log/lastlog:记录每个用户最近的登录事件。
  • /var/log/secure:记录用户认证相关的安全事件信息
  • /var/log/wtmp:记录每个用户登录、注销及系统启动和停机事件
  • /var/log/btmp:记录失败的、错误的登录尝试及验证事件

4.2 日志文件分析

1.内核及系统日志

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

  • 0 EMERG(紧急):会导致主机系统不可用的情况。
  • 1 ALERT(警告):必须马上采取措施解决的问题。
  • 2 CRIT(严重):比较严重的情况。
  • 3 ERR(错误):运行出现错误
  • 4 WARNING(提醒):可能影响系统功能,需要提醒用户的重要事件
  • 5 NOTICE(注意):不会影响正常功能,但是需要注意的事件。
  • 6 INFO(信息):一般信息。
  • 7 DEBUG(调试):程序或系统调试信息等。

内核及大多数系统消息被记录到公共日志文件/var/log/messages 中,而其他一些程序 消息被记录到各自独立的日志文件中,此外日志消息还能够记录到特定的存储设备中,或者直接发送给指定用户。
对于 rsyslog 服务统一管理的大部分日志文件,使用的日志记录格式基本上是相同的。 以公共日志/var/log/messages 文件的记录格式为例,其中每一行表示一条日志消息,每 一条消息均包括以下四个字段。

  • 时间标签:消息发出的日期和时间。
  • 主机名:生成消息的计算机的名称。
  • 子系统名称:发出消息的应用程序的名称。
  • 消息:消息的具体内容。
    无论网络入侵者怎样修改日志都不能清除入侵的痕迹。rsyslog 日志服务是一个常会被攻击的显著目标,破坏了它将使管理员难以发现入侵及入侵的痕迹, 因此要特别注意监控其守护进程及配置文件

2、用户日志

在 wtmp、btmp、lastlog 等日志文件中,保存了系统用户登录、退出等相关的事件消息。
但是这些文件都是二进制的数据文件,不能直接使用 tail、less 等文本查看工具进行浏览,需要使用 who、w、users、last 和 lastb 等用户查询命令来获取日志信息
(1)查询当前登录的用户情况——users、who、w 命令

  • users 命令只是简单地输出当前登录的用户名称,每个显示的用户名对应一个登录会话。如果一个用户有不止一个登录会话,那他的用户名将显示与其相同的次数。
  • who 命令用于报告当前登录到系统中的每个用户的信息。使用该命令,系统管理员可 以查看当前系统存在哪些不合法用户,从而对其进行审计和处理。who 的默认输出包括用 户名、终端类型、登录日期及远程主机。
    2)查询用户登录的历史记录——last、lastb 命令 last 命令用于查询成功登录到系统的用户记录,最近的登录情况将显示在最前面。通过 last 命令可以及时掌握 Linux 主机的登录情况,若发现未经授权的用户登录过,则表示当前 主机可能已被入侵。

3.程序日志

在 Linux 操作系统中,还有相当一部分应用程序没有使用 rsyslog 服务来管理日志,而是由程序自己维护日志记录。不同应用程序的日志记录格式差别较大,且没有严格使用统一的格式,
管理人员应该定期并随机检查各种系统日志文件,包括一般信息日志、网络连接日志、文件传输日志及用户登录日志记录等。在检查这些日志时,要注意是否有不合常理的时间或操作记录。例如,出现以下现象就应多加注意。
●用户在非常规的时间登录,或者用户登录系统的 IP 地址和以往的不一样。
●用户登录失败的日志记录,尤其是那些一再连续尝试进入失败的日志记录。
●非法使用或不正当使用超级用户权限。
●无故或者非法重新启动各项网络服务的记录。
●不正常的日志记录,如日志残缺不全,或者是诸如 wtmp 这样的日志文件无故缺少 了中间的记录文件。
另外,需要提醒管理人员注意的是,日志并不是完全可靠的,高明的黑客在入侵系统后 经常会打扫现场。
所以管理人员需要综合运用以上的系统命令,全面、综合地进行审查和检 测,切忌断章取义,否则将可能做出错误的判断。

猜你喜欢

转载自blog.csdn.net/kimowinter/article/details/107008394
今日推荐