深入理解Linux文件系统与日志分析(内涵理论与XFS、EXT文件数据恢复实验)

前言:
  • 在处理Linux系统出现的各种故障时,故障的症状是最容易发现的,而导致这一故障的原因才是最终排除故障的关键。

  • 熟悉Linux系统中常见的日志文件,了解一般故障的分析与解决办法,将有助于管理员快速定位故障点,“对症下药”,及时解决各种系统问题。

一、inode与block
1.1 inode与block概述
  • 文件数据包括元信息与实际数据

文件存储在硬盘上,硬盘最小存储单位是“扇区”(物理)单元格,簇(逻辑上)。每个扇区存储512字节

block(块)

操作系统读取硬盘的时候,不会一个个扇区的读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个“块”(block)

连续的八个扇区组成一个block

是文件存取的最小单位

inode(索引节点)

中文名译名为“索引节点”,也叫i节点

扫描二维码关注公众号,回复: 8818839 查看本文章

用于存储文件元信息

一个文件必须占用一个inode,但至少占用一个block
在这里插入图片描述

1.2 inode的内容

1.2.1 inode包含文件的元信息,但是不包含文件名

例如:
文件的字节数

文件拥有者的User ID

文件的Group ID

文件的读、写、执行权限

文件的时间戳

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

ctime(change time)

最后一次改变文件或目录(属性)的时间

atime(access time)

最后一次访问文件或目录的时间

mtime(modify time)

最后一次修改文件或目录(内容)的时间

1.2.3 目录文件的结构

  • 目录是一种文件,每一行称为一个目录项

目录的文件结构:
在这里插入图片描述

每一个inode都有一个号码,操作系统用inode号码来识别不同的文件

Linux系统内部不适用文件名,而使用indoe号码来识别文件

对于用户来说,文件名只是inode号码便于识别的别称

1.2.4 ⭐inode的号码

  • 用户通过文件名打开文件时,系统内部的过程:

1、系统找到这个文件名对应inode号码

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

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

  • 查看inode号码的方法:

stat 可以指定查看某个文件的inode信息

ls -i 查看文件名对应的inode号码

df -i 查看文件系统的inode数量信息(总数、已用、可用)

示例:

[root@localhost opt]# touch 123.txt
[root@localhost opt]# ls
123.txt  rh
[root@localhost opt]# stat 123.txt
  文件:"123.txt"
  大小:0         	块:0          IO 块:4096   普通空文件
设备:802h/2050d	Inode:34952126    硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:unconfined_u:object_r:usr_t:s0
最近访问:2019-11-23 15:40:34.983126324 +0800
最近更改:2019-11-23 15:40:34.983126324 +0800
最近改动:2019-11-23 15:40:34.983126324 +0800
创建时间:-
[root@localhost opt]# ls -i
34952126 123.txt   1477390 rh
[root@localhost opt]# df -i
文件系统          Inode 已用(I)  可用(I) 已用(I)% 挂载点
/dev/sda2      10485760  121060 10364700       2% /
devtmpfs         229705     372   229333       1% /dev
tmpfs            233378       1   233377       1% /dev/shm
tmpfs            233378     560   232818       1% /run
tmpfs            233378      16   233362       1% /sys/fs/cgroup
/dev/sda5       5242880     142  5242738       1% /home
/dev/sda1       2097152     328  2096824       1% /boot
tmpfs            233378       6   233372       1% /run/user/42
tmpfs            233378      15   233363       1% /run/user/0

1.2.5 文件存储小结

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

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

1.2.6 inode的大小

inode也会消耗硬盘空间,每个inode的大小一般是128字节或256字节

格式化文件系统时确定inode的总数

使用df -i 命令可以查看每个硬盘分区的inode总数和已经使用的数量

df常用参数与功能:
在这里插入图片描述

1.2.7 inode的特殊作用

由于inode号码与文件名分离,导致一些Unix/Linux系统具有以下的现象

当文件名包含特殊字符,可能无法正常删除文件,直接删除inode,也可以删除文件。

移动或重命名文件时,只改变文件名,不影响inode号码

打开一个文件后,系统通过inode号码来识别该文件,不考虑文件名

这使得软件更新变得简单,可以在不关闭软件的情况下进行更新,不需要重启
因为系统通过inode号码,识别运行中的文件,不通过文件名
更新的时候,新版文件以同样的文件名,生成一个新的inode,不会影响到运行中的文件
等到下一次运行这个软件的时候,文件名就会自动指向新版文件,旧版文件的inode则被回收

二、硬连接与软连接

在Linux系统下的链接文件有两种:

1、软连接:又称为符号链接,我们可以理解为Windows中的快捷方式,功能为快速连接到文件或目录。

2、硬连接:通过文件系统的inode链接文件来产生新的文件名(并不是产生新文件)。

两种链接文件对比:
在这里插入图片描述

2.1 硬链接

一般情况下,文件名和inode号码一一对应关系,每个inode号码对应一个文件名。

但Linux系统允许多个文件名指向同一个inode号码,这表示可以用不同的文件名来访问同样的内容

创建硬连接,示例:

命令格式:ln 源文件 目标

[root@localhost opt]# ln 123.txt 234.txt
[root@localhost opt]# ls
123.txt  234.txt  rh
[root@localhost opt]# 

123.txt与234.txt的inode号码相同,都指向同一个inode。

indoe信息中的链接数此时会加1。示例:
在这里插入图片描述

当一个文件拥有多个硬连接时,对文件内容修改,会影响到所有文件名

但删除一个文件名,不会影响其他文件名的访问

同时,删除一个文件名,会使inode信息中的链接数减1

2.2 软链接

软链接就是再创建一个独立的文件,而中国文件会让数据的读取指向它链接的那个文件的文件名。

创建软链接的命令格式:

ln -s 源文件或目录 目标文件或目录

示例:
在这里插入图片描述

2.3 软链接与硬连接总结

链接文件是为文件或目录建立链接文件

删除原始文件后,软连接无法找到原始文件,所以会报错,硬连接与原始文件的inode相同,所以不影响访问,仍旧可用

删除一个文件,实际上并不清除inode节点和block数据,只是在这个文件的父目录里面的block中删除了这个文件名

Linux是通过link的数量来控制文件的删除,只有当一个文件不存在任何link的时候,这个文件才会被删除。

三、恢复误删除的文件(实验)
3.1 恢复XFS类型的文件
  • 命令格式:

备份命令格式:xfsdump -f 备份存放位置 要备份的路径或者设备文件

xfsdump 备份级别(默认为0)

0:完全备份

1-9:增量备份

xfsdump常用选项:-f,-L,-M,-s

文件恢复命令格式:xfsrestore -f 恢复文件的位置 存放恢复后文件的位置

  • xfsdump使用限制:

只能备份已挂载的文件系统

必须适用root权限才能操作

只能备份xfs文件系统

备份后的数据只能用xfsrestore解析

不能备份两个具有相同UUID的文件系统

在CentOS 7中恢复xfs文件类型的数据,实验如下:

  • 添加一块磁盘sdb,进行分区、格式化。
    在这里插入图片描述
    在这里插入图片描述
[root@localhost ~]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1              isize=512    agcount=4, agsize=1310656 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=5242624, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
  • 在/opt目录下创建一个date目录,同时将sdb1挂载到此目录下。
[root@localhost opt]# mkdir date
[root@localhost opt]# ls
date  rh
[root@localhost opt]# mount /dev/sdb1 /date
[root@localhost opt]# df -hT
文件系统       类型      容量  已用  可用 已用% 挂载点
/dev/sda2      xfs        20G  3.3G   17G   17% /
devtmpfs       devtmpfs  898M     0  898M    0% /dev
tmpfs          tmpfs     912M     0  912M    0% /dev/shm
tmpfs          tmpfs     912M  9.0M  903M    1% /run
tmpfs          tmpfs     912M     0  912M    0% /sys/fs/cgroup
/dev/sda5      xfs        10G   37M   10G    1% /home
/dev/sda1      xfs       4.0G  174M  3.9G    5% /boot
tmpfs          tmpfs     183M  4.0K  183M    1% /run/user/42
tmpfs          tmpfs     183M   20K  183M    1% /run/user/0
/dev/sdb1      xfs        20G   33M   20G    1% /date
  • 在date目录下创建文件abc.txt。
[root@localhost opt]# touch /date/abc.txt
[root@localhost opt]# ls date
[root@localhost opt]# ls /date
abc.txt
[root@localhost opt]# 
  • 将date目录备份到/opt目录下,备份文件命名为xfs_dump。
[root@localhost opt]# xfsdump -f /opt/xfs_dump /dev/sdb1   (备份文件到/opt下,并命名为xfs_dump)
xfsdump: using file dump (drive_simple) strategy
xfsdump: version 3.1.4 (dump format 3.0) - type ^C for status and control

 ============================= dump label dialog ==============================

please enter label for this dump session (timeout in 300 sec)
 -> xfs_dump
session label entered: "xfs_dump"

 --------------------------------- end dialog ---------------------------------

xfsdump: level 0 dump of localhost.localdomain:/date
xfsdump: dump date: Sun Nov 24 13:57:51 2019
xfsdump: session id: 0e93d020-cc1d-44ae-9a43-bf14d9add109
xfsdump: session label: "xfs_dump"
xfsdump: ino map phase 1: constructing initial dump list
xfsdump: ino map phase 2: skipping (no pruning necessary)
xfsdump: ino map phase 3: skipping (only one dump stream)
xfsdump: ino map construction complete
xfsdump: estimated dump size: 21120 bytes
xfsdump: /var/lib/xfsdump/inventory created

 ============================= media label dialog =============================

please enter label for media in drive 0 (timeout in 300 sec)
 -> sdb1
media label entered: "sdb1"

 --------------------------------- end dialog ---------------------------------

xfsdump: creating dump session media file 0 (media 0, file 0)
xfsdump: dumping ino map
xfsdump: dumping directories
xfsdump: dumping non-directory files
xfsdump: ending media file
xfsdump: media file size 21672 bytes
xfsdump: dump size (non-dir files) : 0 bytes
xfsdump: dump complete: 15 seconds elapsed
xfsdump: Dump Summary:
xfsdump:   stream 0 /opt/xfs_dump OK (success)
xfsdump: Dump Status: SUCCESS
  • 删除date目录下的文件模拟文件损坏丢失
[root@localhost opt]# rm -rf /date/*
[root@localhost opt]# ls /date
[root@localhost opt]# 
  • 恢复文件
[root@localhost opt]# xfsrestore -f /opt/date_dump /date/
xfsrestore: using file dump (drive_simple) strategy
xfsrestore: ERROR: stat of /opt/date_dump failed: 没有那个文件或目录
xfsrestore: Restore Status: ERROR
[root@localhost opt]# ls
date  rh  xfs_dump
[root@localhost opt]# xfsrestore -f /opt/xfs_dump /date/
xfsrestore: using file dump (drive_simple) strategy
xfsrestore: version 3.1.4 (dump format 3.0) - type ^C for status and control
xfsrestore: searching media for dump
xfsrestore: examining media file 0
xfsrestore: dump description: 
xfsrestore: hostname: localhost.localdomain
xfsrestore: mount point: /date
xfsrestore: volume: /dev/sdb1
xfsrestore: session time: Sun Nov 24 13:57:51 2019
xfsrestore: level: 0
xfsrestore: session label: "xfs_dump"
xfsrestore: media label: "sdb1"
xfsrestore: file system id: 0992bf8f-d85f-4d18-844e-72d3002ccfdc
xfsrestore: session id: 0e93d020-cc1d-44ae-9a43-bf14d9add109
xfsrestore: media id: 10515c3e-c504-4447-8d0b-48a71a8b8168
xfsrestore: using online session inventory
xfsrestore: searching media for directory dump
xfsrestore: reading directories
xfsrestore: 1 directories and 1 entries processed
xfsrestore: directory post-processing
xfsrestore: restoring non-directory files
xfsrestore: restore complete: 0 seconds elapsed
xfsrestore: Restore Summary:
xfsrestore:   stream 0 /opt/xfs_dump OK (success)
xfsrestore: Restore Status: SUCCESS
[root@localhost opt]# ls /date/
abc.txt    (成功恢复)
[root@localhost opt]# 
3.2 恢复EXT类型的文件

编译安装extundelete软件包(CentOS 6)

安装依赖包

e2fsprogs-libs-1.41.12-18.el6.x86_64.rpm

e2fsprogs-devel-1.41.12-18.el6.x86_64.rpm

配置、编译及安装

extundelete-0.2.4.tar.bz2

实验:

此实验我们在Red hat linux 6中进行,

  • 先检查挂载信息,然后安装环境包
[root@wangermazi ~]#cd /mnt/Packages
[root@wangermazi Packages]# df -h		'查看镜像文件是否挂载'
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2        20G  3.1G   16G  17% /
tmpfs           932M   76K  932M   1% /dev/shm
/dev/sda1       5.8G  168M  5.4G   3% /boot
/dev/sda3       9.7G  150M  9.0G   2% /home
/dev/sr0        3.6G  3.6G     0 100% /mnt		'挂载在/mnt目录'
[root@wangermazi ~]# cd /mnt/Packages/
[root@wangermazi Packages]# ls		'发现有很多软件包可以安装'
...省略部分内容
zip-3.0-1.el6.x86_64.rpm
zlib-1.2.3-29.el6.i686.rpm
zlib-1.2.3-29.el6.x86_64.rpm
zlib-devel-1.2.3-29.el6.i686.rpm
zlib-devel-1.2.3-29.el6.x86_64.rpm
zsh-4.3.10-7.el6.x86_64.rpm
[root@wangermazi Packages]# rpm -ivh e2fsprogs-libs-1.41.12-18.el6.x86_64.rpm 	(安装)e2fsprogs-libs-1.41.12-18.el6.x86_64.rpm'
warning: e2fsprogs-libs-1.41.12-18.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
Preparing...                ########################################### [100%]
	package e2fsprogs-libs-1.41.12-18.el6.x86_64 is already installed
[root@wangermazi Packages]# rpm -ivh e2fsprogs-devel-1.41.12-18.el6.x86_64.rpm 	(安装)e2fsprogs-devel-1.41.12-18.el6.x86_64.rpm'
warning: e2fsprogs-devel-1.41.12-18.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
error: Failed dependencies:
	libcom_err-devel = 1.41.12-18.el6 is needed by e2fsprogs-devel-1.41.12-18.el6.x86_64
	pkgconfig(com_err) is needed by e2fsprogs-devel-1.41.12-18.el6.x86_64	(报错,发现要先安装依赖包)
[root@wangermazi Packages]# rpm -ivh libcom_err-devel-1.41.12-18.el6.x86_64.rpm 		(安装依赖包)
warning: libcom_err-devel-1.41.12-18.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
Preparing...                ########################################### [100%]
   1:libcom_err-devel       ########################################### [100%]
[root@wangermazi Packages]# rpm -ivh e2fsprogs-devel-1.41.12-18.el6.x86_64.rpm 		e2fsprogs-devel-1.41.12-18.el6.x86_64.rpm'
warning: e2fsprogs-devel-1.41.12-18.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
Preparing...                ########################################### [100%]		(安装成功)
  • 进行编译安装
[root@wangermazi Packages]# mount.cifs //192.168.100.3/cccc /111
Password: 
[root@wangermazi Packages]# ls /111		(发现extundelete-0.2.4.tar.bz2存在)
extundelete-0.2.4.tar.bz2  john-1.8.0.tar.gz
[root@wangermazi Packages]# cd /111		(进入111目录)
[root@wangermazi 111]# tar jxvf extundelete-0.2.4.tar.bz2 -C /opt		(将压缩包解压到opt目录中)
..........省略部分信息
[root@wangermazi 111]# ls /opt		(查看是否解压成功)
extundelete-0.2.4  rh
(进行编译安装)
[root@wangermazi 111]# cd /opt/extundelete-0.2.4/		(进入件文件中查看)
[root@wangermazi extundelete-0.2.4]# ls
acinclude.m4  autogen.sh   configure     depcomp     LICENSE      Makefile.in  README
aclocal.m4    config.h.in  configure.ac  install-sh  Makefile.am  missing      src
[root@wangermazi extundelete-0.2.4]# yum install gcc gcc-c++ -y		(安装编译器)
[root@wangermazi extundelete-0.2.4]# ./configure 		(开始配置)
Configuring extundelete 0.2.4
Writing generated files to disk
[root@wangermazi extundelete-0.2.4]# make		(make编译)
make -s all-recursive
Making all in src
extundelete.cc:571: 警告:未使用的参数‘flags’
[root@wangermazi extundelete-0.2.4]# make install		(make install 安装)
Making install in src
  /usr/bin/install -c extundelete '/usr/local/bin'
  • 新添加磁盘,建立分区、格式化并挂载分区,最后查看信息
[root@wangermazi extundelete-0.2.4]# df -hT	(挂载分区)
Filesystem     Type     Size  Used Avail Use% Mounted on
/dev/sda2      ext4      20G  3.2G   16G  18% /
tmpfs          tmpfs    932M   76K  932M   1% /dev/shm
/dev/sda1      ext4     5.8G  168M  5.4G   3% /boot
/dev/sda3      ext4     9.7G  150M  9.0G   2% /home		
/dev/sr0       iso9660  3.6G  3.6G     0 100% /media/RHEL_6.5 x86_64 Disc 1 
/dev/sr0       iso9660  3.6G  3.6G     0 100% /mnt
/dev/sdb1      ext4      20G  172M   19G   1% /222
  • 在挂载点创建文件,然后删除文件,同时解挂载,最后尝试恢复
[root@wangermazi extundelete-0.2.4]# cd /222		(进入挂载点)
[root@wangermazi 222]# ls	
lost+found
[root@wangermazi 222]# echo a>a		(创建文件)
[root@wangermazi 222]# echo a>c
[root@wangermazi 222]# ls	(创建成功)
a   c  lost+found
[root@wangermazi 222]# cd ~		(返回家目录)
[root@wangermazi ~]# umount /222	(解挂载)
[root@wangermazi ~]# rm -rf /222/a /222/c
[root@wangermazi ~]# umount /222		(解挂载/222)
[root@wangermazi ~]# extundelete /dev/sdb1 --restore-all		(恢复数据)
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... 160 groups loaded.
Loading journal descriptors ... 29 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@wangermazi ~]# cd RECOVERED_FILES/	(进入恢复的文件中查找)
[root@wangermazi RECOVERED_FILES]# ls		(误删的文件恢复成功)
a  c
[root@wangermazi RECOVERED_FILES]# cp a /opt 		(将文件复制到目标位置)
[root@wangermazi RECOVERED_FILES]# ls /opt
a  extundelete-0.2.4  rh
成功恢复
四、日志文件的分类
4.1 日志的功能
  • 用于记录系统,程序运行中发生的各种事件

    日志文件是用于记录Linux系统中各种运行消息的文件,相当于Linux主机的“日记”

    不同的日志文件记载了不同类型的信息,如Linux内核消息,用户登录时间,程序错误等

  • 通过阅读日志,有助于诊断和解决系统故障

    在Linux系统种运行的程序通常会把系统消息和错误消息写入相应的日志文件

    当主机遭受攻击时,日志文件还可以帮助寻找攻击者留下的痕迹

4.2 日志文件的分类
  • 内核及系统日志

    由系统服务syslog统一进行管理,日志格式基本相似

  • 用户日志

    记录系统用户登录及退出系统的相关信息

  • 程序日志

    由各种应用程序独立管理的日志文件,记录格式不统一

    程序安装后不会生成日志文件,只有在启动的时候才会生成日志文件,在没有访问它时,日志文件就是空的。

4.3 日志保存位置:
  • 日志默认保存位置为/var/log目录下

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

一部分程序公用一个日志文件,一部分程序适用单个日志文件,而有些大型服务器程序因日志文件较多,所以会在/var/log目录中建立相应的子目录来存放日志文件

有相当一部分日志文件只有root用户才有权读取,保证了相关日志信息的安全性

4.4 ⭐主要日志文件介绍

在这里插入图片描述

  • /var/log/messages:记录Linux内核消息和各种应用程序的公共日志信息,包括启动,I/O错误,网络错误,程序故障等

    对于未使用独立日志文件的应用程序或服务,一般都可以从该日志文件中获得相关的时间记录信息

  • /var/log/cron:记录crond计划任务产生的事件信息

  • /var/log/dmesg:记录Linux系统在引导过程中的各种事件信息

  • /var/log/maillog:记录进入或发出系统的电子邮件活动

  • /var/log/lastlog:记录每个用户最近的登录时间

  • /var/log/secure:记录用户认证相关的安全事件信息

  • /var/log/wtmp:记录每个用户,注销及系统启动和停机事件

  • /var/log/btmp:记录失败的,错误的登录尝试及验证事件

  • yum安装的相关日志信息都存放在/var/log中

    手工编译安装的相关日志信息都是自己指定的目录

五、日志文件分析

分析日志文件的目的在于通过浏览器日志查找到关键信息,对系统服务进行测试及判断发生故障的原因等

对于大多数文本格式的日志文件(例如内核及系统日志,大多数的程序日志),只要适用tail,more,less,cat等文本处理工具就可以查看日志内容

对于一些二进制格式的日志文件(例如用户日志),需要适特定的查询命令

5.1 内核及系统日志

5.1.1 由系统服务rsyslogd统一管理

软件包:rsyslog-7.4.7-el7.x86_64

主要程序:/sbin/rsyslogd

配置文件:/etc/rsyslog.conf

5.1.2 ⭐日志消息的级别

受rsyslogd服务管理的日志文件都是Linux系统中最重要的日志文件,它们记录了Linux系统中的内核,用户认证,邮件,计划任务等最基本的系统消息

在Linux内核中,根据日志消息的重要程度不同,将其划分为不同的优先级(数字越小,优先级越高,越为重要)
在这里插入图片描述

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

日志消息还可以记录到特定的存储设备中,或者直接发送给指定用户

5.1.3 日志记录的一般格式:

[root@localhost ~]# more /var/log/messages
Nov 20 16:36:49 localhost journal: Runtime journal is using 8.0M (max allowed 91.1M, tr
ying to leave 136.7M free of 903.6M available → current limit 91.1M).
Nov 20 16:36:49 localhost kernel: Initializing cgroup subsys cpuset
Nov 20 16:36:49 localhost kernel: Initializing cgroup subsys cpu
Nov 20 16:36:49 localhost kernel: Initializing cgroup subsys cpuacct
......省略部分内容

以最后一条为例:

Nov 20 16:36:49 :时间标签

localhost : 主机名

kernel:子系统名

Initializing cgroup subsys cpu :消息字段

5.2 用户日志分析

5.2.1 保存目录及内容

保存了用户登录,退出系统等相关信息

/var/log/lastlog:最近的用户登录事件

/var/log/wtmp:用户登录,注销及系统开,关机事件

/var/log/utmp:当前登录的每个用户的详细信息

/var/log/secure:与用户验证相关的安全性事件

5.2.2 分析工具

users、who、w、last、lastb

查询当前用户的登录情况:users,who,w命令

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

示例:

[root@localhost ~]# users
root root
(root用户打开了两个终端)
  • who命令用户报告当前登录到系统的每个用户的信息,使用该命令,系统管理员可以查看当前系统存在哪些不合法用户,从而对其继续审计和处理

    who命令的默认输出包括用户名,终端类型,登录日期及远程主机

示例:

[root@localhost ~]# who
root     :0           2019-11-24 16:42 (:0)
root     pts/0        2019-11-24 16:42 (:0)
  • w命令用于显示当前系统中的每个用户及其所运行的进程信息,相比who与users命令输出的内容会更加丰富多元一些。

示例:

[root@localhost ~]# w
 16:43:51 up 2 min,  2 users,  load average: 0.68, 0.44, 0.17
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     :0       :0               16:42   ?xdm?   6.82s  0.07s /usr/libexec/gnome-ses
root     pts/0    :0               16:42    7.00s  0.04s  0.02s w
[root@localhost ~]# 
  • 查询用户登录的历史记录:last,lastb命令
  • last命令用于查询成功登录到系统的用户记录,最近的登录情况将显示在最前面
  • 通过last命令可以及时掌握Linux主机的登录情况,若发现未经授权的用户登录过,则表示当前主机可能已被入侵
[root@localhost ~]# last
root     pts/0        :0               Sun Nov 24 16:42   still logged in   
root     :0           :0               Sun Nov 24 16:42   still logged in   
reboot   system boot  3.10.0-693.el7.x Sun Nov 24 16:41 - 16:46  (00:04)    
root     pts/0        :0               Sun Nov 24 16:33 - 16:41  (00:08)    
root     :0           :0               Sun Nov 24 16:33 - crash  (00:08)    
reboot   system boot  3.10.0-693.el7.x Sun Nov 24 16:30 - 16:46  (00:15)    
root     pts/0        :0               Sun Nov 24 13:51 - crash  (02:38)    
root     :0           :0               Sun Nov 24 13:51 - crash  (02:39)    
reboot   system boot  3.10.0-693.el7.x Sun Nov 24 13:47 - 16:46  (02:58)    
root     pts/0        :1               Sun Nov 24 13:47 - 13:47  (00:00)    
root     pts/0        :1               Sun Nov 24 13:47 - 13:47  (00:00)    
root     pts/0        :1               Wed Nov 20 16:43 - 16:44  (00:00)    
root     :1           :1               Wed Nov 20 16:42 - crash (3+21:04)   
dins1    :0           :0               Wed Nov 20 16:42 - 16:42  (00:00)    
reboot   system boot  3.10.0-693.el7.x Wed Nov 20 16:36 - 16:46 (4+00:09)   

wtmp begins Wed Nov 20 16:36:50 2019
  • 而lastb命令用于查询登录失败的用户记录,如登录的用户名错误,密码不正确等情况等会被记录

    登录失败的情况属于安全事件,因为可能有非主机用户在尝试猜出主机密码

示例:

[root@localhost ~]# lastb
wangwu   :1           :1               Sun Nov 24 16:49 - 16:49  (00:00)    
wangwu   :1           :1               Sun Nov 24 16:49 - 16:49  (00:00)    

btmp begins Sun Nov 24 16:49:19 2019

同时我们也可以通过查询日志来发现登录失败的情况

示例:

[root@localhost ~]# tail /var/log/secure
Nov 24 16:49:07 localhost passwd: pam_unix(passwd:chauthtok): password changed for wangwu
Nov 24 16:49:07 localhost passwd: gkr-pam: couldn't update the login keyring password: no old password was entered
Nov 24 16:49:12 localhost gdm-launch-environment]: pam_unix(gdm-launch-environment:session): session opened for user gdm by (uid=0)
Nov 24 16:49:13 localhost polkitd[576]: Registered Authentication Agent for unix-session:c2 (system bus name :1.95 [/usr/bin/gnome-shell], object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale zh_CN.UTF-8)
Nov 24 16:49:18 localhost unix_chkpwd[2824]: password check failed for user (wangwu)
Nov 24 16:49:18 localhost gdm-password]: pam_unix(gdm-password:auth): authentication failure; logname= uid=0 euid=0 tty=/dev/tty2 ruser= rhost=  user=wangwu
Nov 24 16:49:21 localhost unix_chkpwd[2830]: password check failed for user (wangwu)
Nov 24 16:49:21 localhost gdm-password]: pam_unix(gdm-password:auth): authentication failure; logname= uid=0 euid=0 tty=/dev/tty2 ruser= rhost=  user=wangwu
Nov 24 16:49:27 localhost gdm-password]: gkr-pam: unlocked login keyring
Nov 24 16:49:28 localhost polkitd[576]: Unregistered Authentication Agent for unix-session:c2 (system bus name :1.95, object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale zh_CN.UTF-8) (disconnected from bus)

5.3 程序日志分析

5.3.1 程序日志由相应的应用程序独立进行管理

  • web服务:/var/log/httpd/
    access_log,error_log(httpd网站服务程序使用的两个日志文件access_log和error_log,分别记录客户访问事件,错误事件。)
  • 代理服务:/var/log/squid/
    access.log , cache.log
  • FTP服务:/var/log/xferlog

5.3.2:分析工具

  • 文本查看,grep过滤检索,webmin管理套件中查看
  • awk,sed等文本过滤,格式化编辑工具
  • webalizer,awstats等专用日志分析工具

5.3.3:日志管理策略

  • 及时做好备份和归档

  • 延长日志保存期限

  • 控制日志访问权限
    日志中可能会包含各类敏感信息,如账户,口令等

  • 集中管理日志
    将服务器的日志文件发到统一的日志文件服务器(分布式、GFS)
    便于日志信息的统一收集,整理和分析
    杜绝日志信息的意外丢失、恶意篡改或删除

总结:

本篇博客主要介绍了Linux系统中xfs与EXT文件系统的备份与文件恢复,需要注意的是,两种文件系统恢复数据最明显不同的处在于xfs文件恢复需要在挂载状态进行,而EXT文件恢复需要先解挂载再进行恢复。
我们在日常的学习、工作里需要熟练运行分析工具与日志,维护系统安全。

发布了48 篇原创文章 · 获赞 46 · 访问量 6624

猜你喜欢

转载自blog.csdn.net/weixin_45726050/article/details/103227162