有时候,遗忘了linux的root密码,无法进行登陆。可以使用linux内核的单用户模式进行破解。rhel6版本和7版本的方式是不一样的。该方法适用于centos

一、rhel6版本破解密码

开机按空格建进入grub引导菜单,必须5秒内输入

image.png

按e进入启动前编辑菜单,如下所示:


image.png

选择第二行内核kernel,再按e建进入编辑菜单

image.png

输入“空格+数字1”回车,或者输入single进入单用户模式,完成后再返回grub菜单

image.png

然后按b进入启动。这时linux就会完全按照单用户模式。

单用户模式类似于windows的安全模式,进入后只会加载内核,不会启动网络,不会加载pam模块,同时会绕开密码以管理员root身份登陆

image.png

进入单用户模式后,使用passwd命令输入新密码,无需知道之前的密码。


二、rhel7破解密码

开机按任意键进入grub引导菜单

image.png

按e进行编辑,找到有“linux16”的这一行

image.png


按"end"键,到这一行的末尾,然后输入"空格rd.break“

image.png

输入完成后,依照最下方指示,按”Ctrl+x"进入单用户模式

image.png

但是再rhel7中,直接输入pwssd是无法直接更改密码的,因为此时进入的是迷你系统,类似win pe

image.png

所谓迷你系统,就是运行在内存之中作为内核系统修改引导使用,可以理解win pe,使用的使用需要进行挂载和进入指定硬盘上目录/sysroot/

输入如下命令

mount -o remount,rw /sysroot
chroot /sysroot/

此时才算真正使用单用户模式进入系统,可以使用psswd命令修改root密码

image.png

注意,还需要更新一个空文件,作用是与selinux有关

touch /.autorelabel  #千万不能写错

image.png

至此,输入两次exit命令后进行重启,rhel7密码才算破解。

注意,如果开启了selinux,重启的时候会卡住一段时间,这时内核在进行selinux相关的配置,不要以为是死机,千万不能关机重启,不然系统会崩溃

image.png

可能需要2-5分钟,之后会再重启一次。


三、文件系统损坏

有时候一些重要的文件损坏,导致系统功能异常或者无法进入系统。

3.1文件基础知识

简单来说,一份文件包含inode和block,前者叫做索引,包含元数据(描述数据的数据),记录了文件的位置,存放位置指针等信息,后者就是数据块(可以设定)

就是正真的数据内容。一般删除文件就是删除文件的索引,文件损坏也是索引的问题,所以文件的数据还是存在的。这时只要不进行读写操作,覆盖数据,只要恢复索引就能

恢复和找到文件。

image.png


使用dumpe2fs命令检查分区信息


命令名称
  dumpe2fs - 显示ext2/ext3/ext4文件系统信息。

dumpe2fs命令语法
  dumpe2fs [ -bfhixV ] [ -o superblock=superblock ] [ -o blocksize=blocksize ] device
  语法看起来比较复杂,看不懂的直接看下面的常用命令选项和实例。

dumpe2fs命令描述
  显示device中文件系统的超级块和块组信息。

dumpe2fs常用命令选项  

选项描述
-b打印文件系统中的坏块
-o不常用,检查严重损坏文件系统时指定
-f强制显示所有信息,即便dumpe2fs对有些文件系统功能标识不能识别。
- i显示image文件系统信息。device指定image文件的路径
-h只显示超级块信息
-x将已分组的块的数量用十六进制显示
-v显示dumpe2fs的版本号并推出


dumpe2fs命令实例

  dumpe2fs查看/dev/sda1的文件系统信息。

image.png

查看信息,可以看到有很多group信息


image.png


文件系统的group就是将一段连续空间block划分在一个组中,保证存储空间的连续性和性能

image.png

linux中,一个block(块)默认是4096字节,一个group(组)是32768个block,group0是从0-32768,group1是从32768-65535


在一个文件系统中,会有一张inode表,记录所有索引和元数据信息,同时会有一个superblock超级块,用来记录文件系统所有的信息,包括所有block。

inode表损坏,文件就会损坏,superblock损坏,则文件系统损坏。


superblock保存在group0的0位置。

备份superblock保存在group1,3,5,7,9位置

每个group都会预留一定空间给superblock

image.png


3.2 使用fsck命令修复分区

fsck命令被用于检查并且试图修复文件系统中的错误。当文件系统发生错误四化,可用fsck指令尝试加以修复。

-a:自动修复文件系统,不询问任何问题;
-A:依照/etc/fstab配置文件的内容,检查文件内所列的全部文件系统;
-N:不执行指令,仅列出实际执行会进行的动作;
-P:当搭配"-A"参数使用时,则会同时检查所有的文件系统;
-r:采用互动模式,在执行修复时询问问题,让用户得以确认并决定处理方式;
-R:当搭配"-A"参数使用时,则会略过/目录的文件系统不予检查;
-s:依序执行检查作业,而非同时执行;
-t<文件系统类型>:指定要检查的文件系统类型;
-T:执行fsck指令时,不显示标题信息;
-V:显示指令执行过程。




文件系统:指定要查看信息的文件系统。

linux的文件系统损坏会导致linux不正常关机,出错的时候如果系统告诉你是哪一块硬盘的分区有问题,比如是/dev/hda2,接着用如下的命令去对付它:

fsck -y /dev/hda2

结束后使用reboot命令重启系统这样就好了!

如果不知道时哪个地方出了问题,可以直接:

fsck

在随后的多个确认对话框中输入:y

结束后同样使用reboot命令重启系统这样就好了!


3.3 e2fsck命令修复分区


有时候使用fsck无法修复分区,可以尝试使用e2fsck命令


e2fsck命令用于检查第二扩展文件系统的完整性,通过适当的选项可以尝试修复出现的错误。

e2fsck执行后的传回值及代表意义如下:

  • 0 没有任何错误发生。

  • 1 文件系统发生错误,并且已经修正。

  • 2 文件系统发生错误,并且已经修正。

  • 4 文件系统发生错误,但没有修正。

  • 8 运作时发生错误。

  • 16 使用的语法发生错误。

  • 128 共享的函数库发生错误。

-a:不询问使用者意见,便自动修复文件系统;
-b<superblock>:指定superblock,而不使用预设的superblock;
-B<区块大小>:指定区块的大小,单位为字节;
-c:一并执行badblocks,以标示损坏的区块;
-C:将检查过程的信息完整记录在file descriptor中,使得整个检查过程都能完整监控;
-d:显示排错信息;
-f:即使文件系统没有错误迹象,仍强制地检查正确性;
-F:执行前先清除设备的缓冲区;
-l<文件>:将文件中指定的区块加到损坏区块列表;
-L<文件>:先清除损坏区块列表,再将文件中指定的区块加到损坏区块列表。因此损坏区块列表的区块跟文件中指定的区块是一样的;
-n:以只读模式开启文件系统,并采取非互动方式执行,所有的问题对话均设置以"no"回答;
-p:不询问使用者意见,便自动修复文件系统;
-r:此参数只为了兼容性而存在,并无实际作用;
-s:如果文件系统的字节顺序不适当,就交换字节顺序,否则不做任何动作;
-S:不管文件系统的字节顺序,一律交换字节顺序;
-t:显示时间信息;
-v:执行时显示详细的信息;
-V:显示版本信息;
-y:采取非互动方式执行,所有的问题均设置以"yes"回答。


举例


检查/dev/sda1是否有问题,如发现问题便自动修复:

e2fsck -a -y /dev/sda1

指定使用superblock修复

e2fsck -b 98304 /dev/sda6  #制定superblock的位置

一般superblock的位置可以使用dumpe2fs查到,使用group1,3,5,9的superblock也是可以的,例如32768等等。因为越靠后的superblock被破坏的几率越小,所以使用98304

这种方式为采用还原超级块的方式恢复ext文件系统。


注意!!!!!


执行e2fsck或fsck前请先umount partition,否则有机会令档案系统毁损。如果需要对根目录/进行检查及修复,便需要进入singal user mode执行!!


3.4 xfs_repair命令


fsck和e2fsck是用来修复ext文件系统的,centos7分区是xfs文件系统,则需要使用xfs_repair命令。

在使用该命令前,也是首先需要将分区卸载

xfs_repair  /dev/sda1

image.png



4、使用救援模式修改系统引导

有时候,系统引导出了问题,虽然系统还在,但是无法进入系统。此时可以使用关盘进入救援模式修复引导。

系统中存在着一个特殊区域,叫mbr,主引导记录,位于磁盘0磁道的第一个扇区。里面存放了引导程序和分区信息,这是一段固定的程序。

引导程序一定放在系统的第一块硬盘即sda中。

image.png

在插入rhel7光盘,选择进入第三行的troubleshooting

image.png

进入后,选择进入救援模式

image.png

在选择完成一确定选项

image.png

在进入救援模式命令行界面后,输入如下命令回车

chroot /mnt/sysimage/
grub2-install /dev/sda


image.png

安装完成后,输入exit进行重启,此时引导程序修复完成,可以直接进入系统。