日志的功能
用于记录系统、程序运行中发生的各种事件
通过阅读日志,有助于诊断和解决系统故障
日志文件的分类
内核及系统日志
由系统服务syslog统一进行管理,主配置文件/etc/syslog.conf(配置了将日志文件记录的位置)
用户日志
记录系统用户登录及退出系统的相关信息
程序日志
由各种应用程序独立管理的日志文件,记录格式不统一
日志文件是用于记录 Linux 系统中各种运行消息的文件,相当于 Linux 主机的"日记"
日志文件对于诊断和解决系统中的问题很有帮助,系统一旦出现问题时及时分析日志就会"有据可查"。此外,当主机遭受攻击时,日志文件还可以帮助寻找攻击者留下的痕迹
不同的日志文件记载了不同类型的信息,例如 Linux 内核消息、用户登录记录、程序错误等等 ,后面将会分别进行介绍
日志保存位置
默认位于:/var/log 目录下
主要日志文件介绍
内核及公共消息日志:/var/log/messages 启动 IO network soft
计划任务日志: /var/log/cron
系统引导日志: /var/log/dmesg
邮件系统日志: /var/log/maillog
安装的rpm包: /var/log/rpmpkgs
用户登录志: /var/log/lastlog 每个用户最近的登录事件
/var/log/secure 用户认证相关的安全事件
/var/log/wtmp 每个用户登录,注销及系统启动和停机时间
/var/log/btmp 失败的,错误的登录尝试及验证事件
/var/log/messages:记录Linux内核消息及各种应用程序的公共日志信息,包括启动、IO错误、网络错误、程序故障等。对于未使用独立日志文件的应用程序或服务,一般都可以从该日志文件中获得相关的事件记录信息。/var/log/cron: 记录crond计划任务产生的事件信息。
/var/log/dmesg: 记录Linux系统在引导过程中的各种事件信息。
/var/log/maillog: 记录进入或发出系统的电子邮件活动。
/var/log/lastlog: 记录每个用户最近的登录事件。
/var/log/rpmpkgs:记录系统中安装的各rpm包列表信息。
/var/log/secure: 记录用户认证相关的安全事件信息。
/var/log/wtmp: 记录每个用户登录、注销及系统启动和停机事件。
/var/log/btmp: 记录失败的、错误的登录尝试及验证事件。
内核及系统日志
由系统服务 rsyslogd 统一管理
**软件包:**rsyslog-8.24.0-38.el7.x86_64.rpm
主要程序:/sbin/rsyslogd
配置文件:/etc/rsyslog.conf
由rsyslog软件包提供了rsyslogd程序,分别用于记录系统内核的消息和各种应用程序的消息
在 /etc/syslog.conf 配置文件中,配置记录的格式如下(具体参考 man syslog.conf):
设备类别.日志级别 日志消息发送位置
配置文件:grep -v "^$" /etc/rsyslog.conf |grep -v "^#"
------ 如果需要在同一行中设置多个"设备.级别"组合,每组之间用分号隔开。日志级别的含义在下一页讲解------ 发送位置可以是本机的用户名; "-/var/log/maillog" 中前面的"-"号表示每次记录日志时并不马上进行数据同步
日志消息的级别
0 EMERG(紧急):会导致主机系统不可用的情况
1 ALERT(警告):必须马上采取措施解决的问题
2 CRIT(严重):比较严重的情况
3 ERR(错误):运行出现错误
4 WARNING(提醒):可能会影响系统功能的事件
5 NOTICE(注意):不会影响系统但值得注意
6 INFO(信息):一般信息
7 DEBUG(调试):程序或系统调试信息等
理解日志消息的级别,级别数字越小的日志消息反映的问题越严重
必要时可以展示配置文件 /etc/rsyslog.conf 中的内容,并就其中的日志级别配置做简要说明
日志记录的一般格式
内核及系统日志文件中的每一行表示一条消息,每个消息由 4 个字段的固定格式组成:
时间标签:消息发出的日期和时间
主机名:生成消息的计算机的名字
子系统名称:发出消息的应用程序名称
消息:消息的具体内容
bash
[root@centos ~]# tail -f /var/log/messages
Sep 1 11:04:07 centos dbus[4841]: [system] Successfully activated service 'org.freedesktop.realmd'
Sep 1 11:04:07 centos systemd: Started Realm and Domain Configuration.
Sep 1 11:04:07 centos org.gnome.Shell.desktop: Window manager warning: "XF86RFKill" is not a valid accelerator
用户日志分析
保存了用户登录、退出系统等相关信息
/var/log/lastlog:最近的用户登录事件
/var/log/wtmp:用户登录、注销及系统开、关机事件
/var/run/utmp:当前登录的每个用户的详细信息
/var/log/secure:与用户验证相关的安全性事件
分析工具
bash
users 、who、w、last、lastb
除了 /var/log/secure 文件以外,其他三个用户日志文件都是二进制的数据文件,无法直接使用tail、less等文本查看工具浏览
因此,分析用户登录相关信息通常需要借助专门的命令工具
分别演示users 、who、w、last、lastb命令工具的使用,并进行比较讲解,侧重于较为陌生的last命令的使用
bash
[root@centos ~]# who
root pts/0 2020-09-01 11:04 (192.168.137.1)
hao :0 2020-09-01 11:17 (:0)
[root@centos ~]# w
11:18:09 up 14 min, 2 users, load average: 2.50, 0.71, 0.31
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.137.1 11:04 1.00s 0.27s 0.07s w
hao :0 :0 11:17 ?xdm? 29.36s 0.26s /usr/libexec/
w 功能说明:显示目前登入系统的用户信息。
语法:w [-fhlsuV][用户名称]
补充说明:执行这项指令可得知目前登入系统的用户有那些人,以及他们正在执行的程序。单独执行w
指令会显示所有的用户,您也可指定用户名称,仅显示某位用户的相关信息。
当前时间,系统启动到现在的时间,登录用户的数目,系统在1分钟,5分钟,15分钟内系统的平均负载值
登录帐号、终端名称、远程主机名、登录时间、空闲时间、JCPU、PCPU、当前正在运行进程的命令行
参数:
-f 开启或关闭显示用户从何处登入系统。
-h 不显示各栏位的标题信息列。
-l 使用详细格式列表,此为预设值。
-s 使用简洁格式列表,不显示用户登入时间,终端机阶段作业和程序所耗费的CPU时间。
-u 忽略执行程序的名称,以及该程序耗费CPU时间的信息。
-V 显示版本信息。
bash
[root@centos ~]# users
hao root
[root@centos ~]# last
[root@centos ~]# lastb
注意:
用户在非常规的时间登录,或者用户登录系统的IP地址和以往的不一样
用户登录失败的日志记录,尤其是一再联系尝试进入失败的日志记录
非法使用或不正当使用超级用户权限
无故或者非法重新启动各项网络服务记录
不正常的日志信息
程序日志分析
由相应的应用程序独立进行管理
Web服务:/var/log/httpd/
access_log、error_log
代理服务:/var/log/squid/
access.log、cache.log、
FTP服务:/var/log/xferlog
分析工具
文本查看、grep过滤检索、Webmin管理套件中查看
awk、sed等文本过滤、格式化编辑工具
Webalizer、Awstats等专用日志分析工具
日志并不是完全可靠的,高明的黑客在入侵系统后,经常会打扫现场
日志管理策略
及时作好备份和归档
延长日志保存期限
控制日志访问权限
日志中可能会包含各类敏感信息,如账户、口令等
集中管理日志
将服务器的日志文件发到统一的日志文件服务器
便于日志信息的统一收集、整理和分析
杜绝日志信息的意外丢失、恶意篡改或删除
修复 MBR 扇区故障
故障原因
病毒、木马等造成的破坏
不正确的分区操作、磁盘读写误操作
故障现象
找不到引导程序,启动中断
无法加载操作系统,开机后黑屏
解决思路
应提前作好备份文件
以 CentOS 7安装光盘引导进入急救模式
从备份文件中恢复
常见的系统启动类故障包括:MBR扇区故障、GRUB引导故障、丢失系统文件、遗忘root密码......
MBR即Master Boot Record,主引导记录,位于硬盘的第一个扇区(512 字节 ),其中包含了系统引导程序、硬盘分区表信息
如果没有MBR的备份文件,恢复难度会比较大,可能需要使用"诺顿磁盘医生(Norton Disk Doctor)"之类能够按分区位置查找修复的磁盘工具
方法 :
新添加一个块硬盘
Fdisk进行分区
bash
新挂载一个分区格式化成ext4
[root@centos ~]# mkfs.ext4 /dev/sdb1
Parted --l命令检查分区类型
[root@centos ~]# parted -l
新建一个目录进行新分区挂载点backup
[root@centos ~]# mkdir /backup
[root@centos ~]# mount /dev/sdb1 /backup
[root@centos ~]#dd if=/dev/sda of=/backup/sda.mbr.bak bs=512 count=1 创建一个mbr备份
[root@centos ~]#dd if=/dev/zero of=/dev/sda bs=512 count=1
模拟mbr损坏
开机进入到修复模式

进入修复模式

第二行修复系统

输入1进入配置模式----回车----在回车
bash
fdisk --l /dev/sda 检查无法获得有效分区表
mkdir /back 新建一个挂载点
mount /dev/sdb1 /back 挂载分区
dd if=/back/sda.mbr.bak of=/dev/sda 恢复备份数据
exit 退出
修复 GRUB 引导故障
故障原因
MBR 中的 GRUB 引导程序遭到破坏
grub.conf 文件丢失、引导配置有误
故障现象
系统引导停滞,显示"grub>" 提示符
解决思路
尝试手动输入引导命令
进入急救模式,重写或者从备份中恢复 grub.conf
向 MBR 扇区中重建 grub 程序
/boot/grub/grub.conf这个文件是Grub的配置文件,这个文件是linux系统启动的核心文件

GRand Unified Bootloader 中文意思为"极好的统一引导器",是大多数Linux系统默认使用的引导程序
例子 :
方法一、
1.备份grub菜单引导文件
bash
[root@a ~]# cd /boot/grub2/
[root@a grub2]# ls
device.map fonts grub.cfg grubenv i386-pc locale themes
[root@a grub2]# cp grub.cfg grub.cfg.bak
2.将grub.cfg文件中的内容复制到txt文件当中
bash
insmod xfs
linux16 /vmlinuz-3.10.0-1062.el7.x86_64 root=/dev/mapper/centos-root ro rd.lv m.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet LANG=zh_CN.UTF-8
initrd16 /initramfs-3.10.0-1062.el7.x86_64.img
3.模拟grub菜单损坏
bash
cd /boot/grub2/
rm -rf grub.cfg
reboot
4.启动开始修复。如下图


方法二、
进入急救模式
1.首先挂载光盘
2.调整设备启动顺序

3.按shift和 "+"将cd-rom调整到第一位。F10保存退出。

4.进入急救模式



开始恢复。

然后我们在将硬盘设备的启动顺序调整到第一位

最后系统启动成功。
遗忘 root 用户密码
故障原因
遗忘 root 用户的密码
故障现象
无法进行需要 root 权限的管理操作
若没有其他可用帐号,将无法登录系统
解决思路
进入急救模式,重设密码
例子 :
方法一
进入急救模式
bash
chroot /mnt/sysimage 设置sysimage为当前环境的根
passwd root 重新设置密码
exit
exec /sbin/init 6 重新启动
修复文件系统
故障原因
非正常关机、突然断电、设备读写失误等
文件系统的超级块(super-block)信息被破坏
故障现象
无法向分区中读取或写入数据
启动后提示"Give root password for maintenance"
解决思路
根据提示输入 root 口令,进入修复状态
使用xfs_repair命令进行修复
磁盘资源耗尽故障
故障原因
磁盘空间已被大量的数据占满,空间耗尽
虽然还有可用空间,但文件数i节点耗尽
故障现象
无法写入新的文件,提示"... : 设备上没有空间"
部分程序无法运行,甚至系统无法启动
解决思路
清理磁盘空间,删除无用、冗余的文件
转移或删除占用大量 i 节点的琐碎文件
进入急救模式进行修复
为用户设置磁盘配额
例子 :
bash
mkdir /date
mount /dev/sdb1 /date
df --i /date
vi aaa.sh
chmod 777 aaa.sh
sh aaa.sh &
新建文档内容为下
vi aaa.sh
i=1
while [ i -le 10000 ]
do
touch /date/file$i
let i++
done
检测磁盘坏道
故障原因
磁盘设备中存在坏道(逻辑的或物理的)
故障现象
读取磁盘中的数据时,磁盘设备发出异常声响。
访问磁盘中的某个文件时,反复读取且出错,提示文件损坏
对于新建立的分区无法完成格式化
系统使用该磁盘时频繁死机
解决思路
bash
检测硬盘中是否存在坏道
修复硬盘,或更换新的硬盘
badblocks --sv /dev/sdb
逻辑坏道主要由于软件操作不当造成,可以使用软件修复
物理坏道是物理性损坏,只能通过更改磁盘分区或扇区的占用位置来进行改善,排除掉包含有坏块的磁盘空间
注意是mkfs命令而不是fsck命令,检查坏道之前,应尽量先卸载该分区,退出正在访问设备的其他程序
