Linux文件系统与日志分析管理
目录
3.1 /etc/rsyslog.conf配置文件格式:由三部分组成
一、文件系统
1. inode表
每个文件的属性信息,比如:文件的大小,时间,类型,权限等,称为文件的元数据(meta data元信息 )元数据是存放在inode(index node)表中。inode表中有很多条记录组成,第一条记录对应的存放了一个文件的元数据信息。
2. 查看inode号
可以使用ls -i、stat命令查看
3. 文件目录
目录是个特殊文件,目录文件的内容保存了此目录中文件的列表及inode number对应关系。文件引用一个是 inode号,是通过文件名来引用一个文件,一个目录是目录下的文件名和文件inode号之间的映射。
在Linux中使用文件的过程:
根据文件夹的文件名inode号的关系找到对应的inode表,再根据inode表中的指针找到磁盘上的真实数据。文件存储的最小单位为块8个扇区组成为4k。
4.?三种时间戳
最近访问atime:查看文件的时间
最近更改mtime:最近更改文件内容的时间,注意:更改完内容之后,ctime也会改变
最近改动ctime:最近更改文件元信息的时间,比如改变权限等
5.?删除文件空间不释放
[root@localhost ~]# cp /dev/zero /boot/bigfile #模拟写入大文件
cp: 写入"/boot/bigfile" 出错: 设备上没有空间
cp: 扩展"/boot/bigfile" 失败: 设备上没有空间
[root@localhost opt]#lsof | grep deleted
#列出当前系统已打开文件,但是deleted的状态,找到对应的进程kill掉
[root@localhost opt]#echo " " > /boot/bigfile #重新写入空格至文件中
6.?文件恢复extundelete
删除一个文件,实际上并不清除inode节点和 block的数据,只是在这个文件的父目录里面的block 中,删除这个文件的名字。Linux是通过Link(硬链接)的数量来控制文件删除的,只有当一个文件不存在任何Link的时候,这个文件才会被删除。注意extundelete是一个开源的Linux数据恢复工具,支持ext3文件系统。
[root@localhost ~]#yum -y install e2fsprogs-devel e2fsprogs-libs
#安装依赖软件
[root@localhost ~]# tar -jxvf extundelete-0.2.4.tar.bz2 -C /opt
#解压软件
[root@localhost ~]# cd /opt/extundelete-0.2.4
#切换到目录下
[root@localhost ~]# yum -y install gcc gcc-c++ pcre-devel openssl-devel zlib-devel openss1 openss1-deve1
#安装编译工具
[root@localhost extundelete-0.2.4]# ./configure
#编译安装
[root@localhost extundelete-0.2.4]#make #翻译
[root@localhost extundelete-0.2.4]#make install #复制
Making install in src
/usr/bin/install -c extundelete '/usr/local/bin'
[root@localhost extundelete-0.2.4]# cd /usr/local/bin
[root@localhost bin]# ls
extundelete
[root@localhost ~]# mkfs.ext3 /dev/sdb1 #格式化写入ext3类型,新增磁盘过程略
[root@localhost ~]# mkdir /test/
[root@localhost ~]# mount /dev/sdb1 /test/
[root@localhost ~]# cd /test/
[root@localhost test]# echo 123 > a;echo 456 > b
[root@localhost test]# ls
a b lost+found
[root@localhost test]# rm -rf a b #模拟删除
[root@localhost test]# ls
lost+found
[root@localhost test]# cd
[root@localhost ~]# umount /test/ #解挂载
[root@localhost ~]#extundelete /dev/sdb1 --inode 2
# 命令 查看的分区 从2节点开始
#查看该分区下的存在哪些文件,其中--inode 2代表从i节点为2的文件开始查看,一般文件系统格式化挂
载之后,i节点是从2开始的,2代表该文件系统最开始的目录。
[root@localhost ~]# extundelete /dev/sdb1 --restore-all
# 命令 需要恢复的分区设备 恢复选项,全都要
#使用恢复
[root@localhost ~]# ls
anaconda-ks.cfg initial-setup-ks.cfg 公共 视频 文档 音乐
extundelete-0.2.4.tar.bz2 RECOVERED_FILES 模板 图片 下载 桌面
[root@localhost ~]# cd RECOVERED_FILES/
[root@localhost RECOVERED_FILES]# ls
a b
[root@localhost RECOVERED_FILES]# cat a;cat b
123
456
7.?xfs类型备份和恢复
CentOS 7 系统默认采用 xfs 类型的文件。针对 xfs 文件系统目前也没有比较成熟的文件恢复工具,所以建议提前做好数据b,以避免数据丢失。 xfs类型的文件可使用xfsdump与xfsrestore工具进行备份恢复。
常用的备份参数包括以下几种:?
- -f:指定备份文件目录
- -L:指定标签 session label
- -M:指定设备标签 media label
- -s:备份单个文件,-s 后面不能直接跟路径
使用 xfsdump 时,需要注意以下的几个限制:
- 不支持没有挂载的文件系统备份,所以只能备份已挂载的;
- 必须使用 root 的权限才能操作;
- 只能备份 XFS 文件系统;
- 备份下来的数据只能让 xfsrestore 解析;
- 不能备份两个具有相同 UUID 的文件系统(可使用blkid查看)。
二、日志分析
1. 日志的种类
日志文件位置 | 日志文件说明 |
---|---|
/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等命令查看 |
2.?内核和公共日志
日志的配置文件位置在/etc/rsyslog.conf
3.?用户日志
在wtmp、btmp、lastlog等日志文件中,保存了系统用户登录、退出等相关的事件消息。
wtmp:哪些用户正常登录到系统中,使用last命令可以查看
btmp:查看用户登录失败的信息,用lastab命令查看
lastlog:记录用户最后一次登录的信息,用lastlog查看
3.1?查询当前登录的用户情况
users 命令只是简单地输出当前登录的用户名称
[root@localhost ~]# users
root
who命令用于报告当前登录到系统中的每个用户的信息
[root@localhost ~]# who
root pts/0 2024-01-08 11:36 (192.168.190.1)
w命令用于显示当前系统中的每个用户及其所运行的进程信息 ?
[root@localhost ~]# w
15:52:55 up 4:25, 1 user, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.190.1 11:36 7.00s 0.44s 0.04s w
3.2?查询用户登录的历史记录
last命令用于查询成功登录到系统的用户记录
[root@localhost ~]# last
root pts/0 192.168.190.1 Mon Jan 8 11:36 still logged in
reboot system boot 3.10.0-693.el7.x Mon Jan 8 11:27 - 15:29 (04:01)
root pts/1 192.168.190.1 Mon Jan 8 11:07 - down (00:13)
root pts/0 :0 Sun Jan 7 02:28 - 11:21 (1+08:52)
……
lastb 命令用于查询登录失败的用户记录,如登录的用户名错误、密码不正确等情况都将记录在案。登录失败的情况属于安全事件,因为这表示可能有人在尝试猜解你的密码。除了使用 lastb 命令查看以外,也可以直接从安全日志文件/var/log/secure 中获得相关信息。
[root@localhost ~]# lastb
btmp begins Mon Jan 8 11:27:43 2024
三、日志管理
1. 日志记录的内容包括
-
历史事件:时间,地点,人物,事件
-
日志级别:事件的关键性程度,Loglevel error notice info debug
2.?系统日志服务工具
sysklogd系统日志服务:CentOS 5 之前版本采用的日志管理系统服务
rsyslog 系统日志服务:syslog是CentOS 6以后版本的系统管理服务:它提供了高性能,出色的安全性和模块化设计
ELK:由Elasticsearch, Logstash, Kibana三个软件组成
3.?rsyslog管理
3.1 /etc/rsyslog.conf配置文件格式:由三部分组成
- MODULES:相关模块配置
- GLOBAL DIRECTIVES:全局配置
- RULES:日志记录相关的规则配置
3.2 RULES配置格式*:所有级别
none:没有级别,即不记录
PRIORITY:指定级别(含)以上的所有级别
=PRIORITY:仅记录指定级别的日志信息
文件路径:通常在/var/log/,文件路径前的-表示异步写入
用户:将日志事件通知给指定的用户,* 表示登录的所有用户
日志服务器:@host,把日志送往至指定的远程UDP日志服务器 @@host 将日志发送到远程TCP日志服务器
管道: | COMMAND,转发给其它命令处理
3.3 将ssh服务的日志单独设置
通过rsyslog软件将sshd程序的日志,独立出来sshd软件的日志放在/var/log/secure日志中,很多其他软件放在一起,这个软件比较重要,所以要把sshd软件的日志单独存放。
① 修改rsyslog软件的配置文件
② 修改sshd
③ 重启服务
[root@localhost ~]# vim /etc/ssh/sshd_config
[root@localhost ~]# vim /etc/rsyslog.conf
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0
[root@localhost ~]# systemctl restart rsyslog.service sshd #重启服务
[root@localhost ~]# tail -f /var/log/ssh.log
Jan 8 17:03:17 localhost sshd[2385]: Server listening on 0.0.0.0 port 22.
Jan 8 17:03:17 localhost sshd[2385]: Server listening on :: port 22.
Jan 8 17:08:35 localhost sshd[2435]: Accepted password for fql from 192.168.190.1 port 7692 ssh2
#验证
3.4?网络日志(远程日志功能)?
日志接收端
[root@localhost ~]# vim /etc/rsyslog.conf
[root@localhost ~]# cd /var/log/
[root@localhost ~]# tail -f messages
日志发送端
[root@localhost ~]# vim /etc/rsyslog.conf
发送端
[root@localhost ~]# logger "this is test log from 192.168.91.101" #测试,写日志进去
接收端
[root@localhost log]# tail -1 messages
Jan 8 17:48:03 localhost root: this is test log from 192.168.91.101
4.?日志文件
- /var/log/secure:系统安全日志,文本格式,应周期性分析
- /var/log/btmp:当前系统上,用户的失败尝试登录相关的日志信息,二进制格式,lastb命令进行查看
- /var/log/wtmp:当前系统上,用户正常登录系统的相关日志信息,二进制格式,last命令可以查看
- /var/log/lastlog:每一个用户最近一次的登录信息,二进制格式,lastlog命令可以查看
- /var/log/dmesg:CentOS7 之前版本系统引导过程中的日志信息,文本格式,开机后的硬件变化将不再记录专用命令dmesg查看,可持续记录硬件变化的情况
- /var/log/boot.log 系统服务启动的相关信息,文本格式
- /var/log/messages :系统中大部分的信息
- /var/log/anaconda : anaconda的日志操作系统安装时安装的软件信息
[root@localhost ~]# lastlog #最后一次登录
5.?日志管理工具 journalctl
CentOS 7以后版本,利用Systemd统一管理所有Unit的启动日志。带来的好处就是,可以只用journalctl一个命令,查看所有日志(内核日志和应用日志)。
模拟程序服务无法启动查看日志:
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf #修改配置文件
[root@localhost ~]# systemctl restart httpd.service
Job for httpd.service failed because the control process exited with error code. See "systemctl status httpd.service" and "journalctl -xe" for details.
[root@localhost ~]# journalctl -xe
#显示最新的系统日志信息, 并尝试解释错误信息
?
6.?logrotate日志转储自动分割日志
logrotate程序是一个日志文件管理工具。用来把旧的日志文件删除,并创建新的日志文件,称为日志转储或滚动。可以根据日志文件的大小,也可以根据其天数来转储,这个过程一般通过cron程序来执行。
相关文件
- 计划任务:/etc/cron.daily/logrotate
- 程序文件:/usr/sbin/logrotate
- 配置文件: /etc/logrotate.conf
- 日志文件:/var/lib/logrotate/logrotate.status
6.1?主配置文件
[root@localhost ~]# vim /etc/logrotate.conf
# see "man logrotate" for details
# rotate log files weekly
weekly
#一周生成一个新的日志文件
# keep 4 weeks worth of backlogs
rotate 4
#只保留最近的4个文件
# use date as a suffix of the rotated file
dateext
# 添加一个日期后缀
6.2 程序独立的配置文件
[root@localhost ~]# cd /etc/logrotate.d/
[root@localhost logrotate.d]# cat httpd
/var/log/httpd/*log {
missingok
notifempty
sharedscripts
delaycompress
postrotate
/bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true
endscript #重新加载配置文件,即重新生成日志文件
}
[root@localhost logrotate.d]# cd /var/log/httpd/
[root@localhost httpd]# ls
access_log error_log
[root@localhost httpd]# mv access_log access_log_2024_1_8
[root@localhost httpd]# ls
access_log_2024_1_8 error_log
[root@localhost httpd]# systemctl restart httpd
[root@localhost httpd]# ls
access_log access_log_2024_1_8 error_log
?
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!