有时候,遗忘了linux的root密码,无法进行登陆。可以使用linux内核的单用户模式进行破解。rhel6版本和7版本的方式是不一样的。该方法适用于centos
一、rhel6版本破解密码
开机按空格建进入grub引导菜单,必须5秒内输入
按e进入启动前编辑菜单,如下所示:
选择第二行内核kernel,再按e建进入编辑菜单
输入“空格+数字1”回车,或者输入single进入单用户模式,完成后再返回grub菜单
然后按b进入启动。这时linux就会完全按照单用户模式。
单用户模式类似于windows的安全模式,进入后只会加载内核,不会启动网络,不会加载pam模块,同时会绕开密码以管理员root身份登陆
进入单用户模式后,使用passwd命令输入新密码,无需知道之前的密码。
二、rhel7破解密码
开机按任意键进入grub引导菜单
按e进行编辑,找到有“linux16”的这一行
按"end"键,到这一行的末尾,然后输入"空格rd.break“
输入完成后,依照最下方指示,按”Ctrl+x"进入单用户模式
但是再rhel7中,直接输入pwssd是无法直接更改密码的,因为此时进入的是迷你系统,类似win pe
所谓迷你系统,就是运行在内存之中作为内核系统修改引导使用,可以理解win pe,使用的使用需要进行挂载和进入指定硬盘上目录/sysroot/
输入如下命令
mount -o remount,rw /sysroot chroot /sysroot/
此时才算真正使用单用户模式进入系统,可以使用psswd命令修改root密码
注意,还需要更新一个空文件,作用是与selinux有关
touch /.autorelabel #千万不能写错
至此,输入两次exit命令后进行重启,rhel7密码才算破解。
注意,如果开启了selinux,重启的时候会卡住一段时间,这时内核在进行selinux相关的配置,不要以为是死机,千万不能关机重启,不然系统会崩溃
可能需要2-5分钟,之后会再重启一次。
三、文件系统损坏
有时候一些重要的文件损坏,导致系统功能异常或者无法进入系统。
3.1文件基础知识
简单来说,一份文件包含inode和block,前者叫做索引,包含元数据(描述数据的数据),记录了文件的位置,存放位置指针等信息,后者就是数据块(可以设定)
就是正真的数据内容。一般删除文件就是删除文件的索引,文件损坏也是索引的问题,所以文件的数据还是存在的。这时只要不进行读写操作,覆盖数据,只要恢复索引就能
恢复和找到文件。
使用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的文件系统信息。
查看信息,可以看到有很多group信息
文件系统的group就是将一段连续空间block划分在一个组中,保证存储空间的连续性和性能
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
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; -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
4、使用救援模式修改系统引导
有时候,系统引导出了问题,虽然系统还在,但是无法进入系统。此时可以使用关盘进入救援模式修复引导。
系统中存在着一个特殊区域,叫mbr,主引导记录,位于磁盘0磁道的第一个扇区。里面存放了引导程序和分区信息,这是一段固定的程序。
引导程序一定放在系统的第一块硬盘即sda中。
在插入rhel7光盘,选择进入第三行的troubleshooting
进入后,选择进入救援模式
在选择完成一确定选项
在进入救援模式命令行界面后,输入如下命令回车
chroot /mnt/sysimage/ grub2-install /dev/sda
安装完成后,输入exit进行重启,此时引导程序修复完成,可以直接进入系统。