深入理解Linux文件系统与日志分析

目录

inode和block概述

        inode的内容

                inode的内容

 恢复误删除的文件

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

                验证恢复

                 模拟删除并恢复

         恢复xfs类型的文件

                 模拟数据丢失后恢复

 分析日志文件

                常见的一些日志文件:

                  内核和公共日志

                用户日志


inode和block概述

        文件是存储在硬盘上的,硬盘的最小存储单位叫做“扇区(sector)”,每个扇区存储为512字节。操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个“块(block)”。这种由多个扇区组成的“块”,是文件存取的最小单位。“块”的大小,最常见的是4kb,即连续八个sector组成一个block

        文件数据存储在“块”中,那么还必须找到一个地方存储文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种存储文件元信息的区域就叫做inode,中文译名为“索引节点”,也叫i节点。因此,一个文件必须占用一个inode,但至少占用一个block

        inode的内容

        inode包含很多的文件元信息,但不包含文件名,例如:文件的字节数,文件拥有者的UserID,文件的GroupID,文件的读,写、执行权限,文件的时间戳......

        Linux系统文件有三个主要的时间属性,分别是ctime(change time)、aitime(access time)、mtime(modify time)。

ctime(change time):是最后一次改变文件或目录(属性)的时间,例如执行chmod、chown等命令

aitime(access time):是最后一次访问文件或目录的时间

mtime(modify time):是最后一次修改文件或目录(内容)的时间。

使用stat命令可查看某个文件的inode信息

[root@localhost var]# stat log
  文件:"log"
  大小:4096      	块:8          IO 块:4096   目录
设备:fd00h/64768d	Inode:67158950    硬链接:19
权限:(0755/drwxr-xr-x)  Uid:(    0/    root)   Gid:(    0/    root)
环境:system_u:object_r:var_log_t:s0
最近访问:2021-09-24 17:12:16.869291388 +0800
最近更改:2021-09-09 14:36:39.071861275 +0800
最近改动:2021-09-09 14:36:39.071861275 +0800
创建时间:-

                inode的内容

        每个inode都有一个号码,操作系统用inode号码来识别不同的文件,Linux系统内部不使用文件名,而使用inode号码来识别文件,对于用户,文件名只是inode号码便于识别的别称。 

        表面上,用户是通过文件名来打开文件,实际上,在系统内部这个过程分为三步

1)系统找到这个文件名对应的inode 号码。

2)通过inode号码,获取inode信息

3)根据inode信息,找到文件数据所在的block,读出数据。

         由此可知,当一个用户在Linux系统中试图访问一个文件时,系统会根据文件名去查找它的inode,看该用户是否具有访问这个文件的权限,如果有,就指向相对应的数据block,如果没有,就返回Permission denied。而一块硬盘分区后的结构则是

 恢复误删除的文件

        删除一个文件,实际上并不清除inode节点和block的数据,只是在这个文件的父目录里面的block中,删除这个文件的名字。Linux是通过link的数量来控制文件删除的,只有当一个文件不存在任何link的时候,这个文件才会被删除

        在工作中,经常会遇到,操作不慎、操作错误导致文件数据丢失的情况,尤其对于客户企业中的一些新手,当然,这是指彻底删除,即不能通过“回收站”找回的情况,比如使用“rm -rf”来删除数据,针对Linux下的ext文件系统,可用的恢复工具有debugfs,ex3grep、extundelete等,其中extundelete是一个开源的Linux数据恢复工具,支持ext3文件系统

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

在编译安装extundelete之前需要安装两个依赖包e2fsprogs-devel,在/Package目录下就有。

[root@localhost ~]# yum install e2fsprogs-devel e2fsprogs-libs -y

 

把extundelete压缩包拖进去 

 

 

[root@localhost ~]# tar -jxvf extundelete-0.2.4.tar.bz2 -C /opt
 //解压到opt目录下

编译安装

[root@localhost opt]# cd extundelete-0.2.4/
[root@localhost extundelete-0.2.4]# ./configure 
Configuring extundelete 0.2.4
Writing generated files to disk

                验证恢复

 

[root@localhost ~]# mkdir /lala 
[root@localhost ~]# mount /dev/sdb1 /lala 挂载
[root@localhost ~]# cd /lala/
[root@localhost lala]# echo a > a
[root@localhost lala]# echo a > b
[root@localhost lala]# echo a > c
[root@localhost lala]# echo a > d
[root@localhost lala]# ls
a  b  c  d

查看文件系统/dev/sdb1下存在哪些文件 

[root@localhost lala]# extundelete /dev/sdb1 --inode 2

 

         具体使用情况,其中-- inode2代表从i节点为2的文件开始查看,一般文件系统格式化挂载后,i节点是从2开始的,2代表该文件系统最开始的目录

                 模拟删除并恢复

[root@localhost lala]# rm -rf a b
[root@localhost ~]# umount /lala //解挂载

查看该分区有哪些文件

[root@localhost lala]# extundelete /dev/sdb1 --inode 2

 使用恢复

[root@localhost ~]# extundelete /dev/sdb1 --restore-all

 

 此时会有RECOVERED_FILES这个文件

ls查看,就会有被删除的文件

         恢复xfs类型的文件

        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 后面不能直接跟路径

使用 xfsdump 时,需要注意以下的几个限制:

  • 不支持没有挂载的文件系统备份,所以只能备份已挂载的;

  • 必须使用 root 的权限才能操作;

  • 只能备份 XFS 文件系统;

  • 备份下来的数据只能让 xfsrestore 解析;

  • 不能备份两个具有相同 UUID 的文件系统(可使用blkid查看)。

步骤

分区

[root@localhost ~]# fdisk /dev/sdb //分区
[root@localhost ~]# mkfs.xfs -f /dev/sdb1 //强制格式化

创建文件

[root@localhost ~]# mkdir /data

模拟 

 

 

                 模拟数据丢失后恢复

删除/date下的文件

 再ls查看

 分析日志文件

内核及系统日志由系统服务 rsyslog 统一管理,根据其主配置文件 /etc/rsyslog.conf

Linux 操作系统本身和大部分服务器程序的日志文件都默认放在目录/var/log/下

                常见的一些日志文件:

日志文件位置日志文件说明
/var/log/messages内核和公共日志它是核心系统日志文件,其中包含了系统启动时的引导信息,以及系统运行时的其他状态消息。I/O 错误、网络错误和其他系统错误都会记录到此文件中。其他信息,比如某个人的身份切换为 root,已及用户自定义安装软件的日志,也会在这里列出。
/var/log/cron 计划任务日志记录与系统定时任务相关的曰志
/var/log/dmesg 系统引导日志记录了系统在开机时内核自检的信息,也可以使用dmesg命令直接查看内核自检信息
/var/log/maillog 邮件日志记录邮件信息的曰志
用户日志
/var/log/lastlog记录系统中所有用户最后一次的登录时间的曰志。这个文件也是二进制文件.不能直接用Vi 查看。而要使用lastlog命令查看
/var/log/secure记录验证和授权方面的倍息,只要涉及账户和密码的程序都会记录,比如系统的登录、ssh的登录、su切换用户,sudo授权,甚至添加用户和修改用户密码都会记录在这个日志文件中
/var/log/wtmp永久记录所有用户的登陆、注销信息,同时记录系统的启动、重启、关机事件。同样,这个文件也是二进制文件.不能直接用Vi查看,而要使用last命令查看
/var/tun/ulmp记录当前已经登录的用户的信息。这个文件会随着用户的登录和注销而不断变化,只记录当前登录用户的信息。同样,这个文件不能直接用Vi查看,而要使用w、who、users等命令查看

                日志文件的格式:

日志文件的格式包含以下 4 列:

  • 事件产生的时间。

  • 产生事件的服务器的主机名。

  • 产生事件的服务名或程序名。

  • 事件的具体信息

查看/var/log/secure 日志,这个日志中主要记录的是用户验证和授权方面的信息

 

                  内核和公共日志

日志的配置文件 位置在 /etc/rsyslog.conf

[root@localhost ~]#vim /etc/rsyslog.conf

信息的优先级别重要程度

在 Linux 内核中,根据日志消息的重要程度不同,将其分为不同 的优先级别(数字等级越小,优先级越高,消息越重要)。

0 EMERG(紧急):会导致主机系统不可用的情况。

1 ALERT(警告):必须马上采取措施解决的问题。

2 CRIT(严重):比较严重的情况。

3 ERR(错误):运行出现错误。

4 WARNING(提醒):可能影响系统功能,需要提醒用户的重要事件。

5 NOTICE(注意):不会影响正常功能,但是需要注意的事件。

6 INFO(信息):一般信息。

7 DEBUG(调试):程序或系统调试信息等

        内核和公共消息日志存储位置

内核及大多数系统消息被记录到公共日志文件/var/log/messages 中,而其他一些程序

消息被记录到各自独立的日志文件中,此外日志消息还能够记录到特定的存储设备中,或者

直接发送给指定用户。

对于 rsyslog 服务统一管理的大部分日志文件,使用的日志记录格式基本上是相同的。

以公共日志/var/log/messages 文件的记录格式为例,其中每一行表示一条日志消息,每

一条消息均包括以下四个字段。

  • 时间标签:消息发出的日期和时间。

  • 主机名:生成消息的计算机的名称。

  • 子系统名称:发出消息的应用程序的名称。

  • 消息:消息的具体内容。

                用户日志

在 wtmp、btmp、

lastlog 等日志文件中,保存了系统用户登录、退出等相关的事件消息。

但是这些文件都是二进制的数据文件,不能直接使用 tail、less 等文本查看工具进行浏览,

需要使用 who、w、users、last 和 lastb 等用户查询命令来获取日志信息

        查询当前登录的用户情况

users

users 命令只是简单地输出当前登录的用户名称,每个显示的用户名对应一个登录会话。 如果一个用户有不止一个登录会话,那他的用户名将显示与其相同的次数

[root@localhost log]#users
root root root root

who

who命令用于报告当前登录到系统中的每个用户的信息。使用该命令,系统管理员可

以查看当前系统存在哪些不合法用户,从而对其进行审计和处理。who 的默认输出包括用

户名、终端类型、登录日期及远程主机

w

w 命令用于显示当前系统中的每个用户及其所运行的进程信息,比 users、who 命令的 输出内容要丰富一些。-

        查询用户登录的历史记录

last

last 命令用于查询成功登录到系统的用户记录,

最近的登录情况将显示在最前面。通过 last 命令可以及时掌握 Linux 主机的登录情况,若发现未经授权的用户登录过,则表示当前 主机可能已被入侵。

lastb

lastb 命令用于查询登录失败的用户记录,

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小柏ぁ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值