忘记 root 密码的解决之道

新版的 systemd 的管理机制中,默认的 rescue 模式是无法直接取得 root 权限的喔!还是得要 使用 root 的密码才能够登入 rescure 环境。没关系,还是有办法滴~透过一个名 为『 rd.break 』的核心参数来处理即可喔!只是需要注意的是, rd.break 是在 Ram Disk 里面的操 作系统状态,因此你不能直接取得原本的 linux 系统操作环境。所以,还需要 chroot 的支持!更 由于 SELinux 的问题,你可能还得要加上某些特殊的流程才能顺利的搞定 root 密码的救援喔!

现在就让我们来实作一下吧!(1)按下 systemctl reboot 来重新启动,(2)进入到开机画面,在可以开机 的选单上按下 e 来进入编辑模式, 然后就在 linux16 的那个核心项目上面使用这个参数来处理:

改完之后按下 [crtl]+x 开始开机,开机完成后屏幕会出现如下的类似画面,此时请注意,你应该是在RAM Disk 的环境,并不是原本的环境,因此根目录底下的东西跟你原本的系统无关喔!而且,你 的系统应该会被挂载到 /sysroot 目录下,因此,你得要这样作:

Generating "/run/initramfs/rdsosreport.txt"

Enter emergency mode. Exit the shell to continue.
Type "journalctl" to view system logs.
You might want to save "/run/initramfs/rdsosreport.txt" to a USB stick or /boot
after mounting them and attach it to a bug report. switch_root:/# # 无须输入密码即可取得 root 权限!
switch_root:/# mount # 检查一下挂载点!一定会发现 /sysroot 才是对的!
.....(前面省略).....
/dev/mapper/centos-root on /sysroot type xfs (ro,relatime,attr,inode64,noquota) switch_root:/# mount -o remount,rw /sysroot # 要先让它挂载成可擦写!
switch_root:/# chroot /sysroot # 实际切换了根目录的所在!取回你的环境了! sh-4.2# echo "your_root_new_pw" | passwd --stdin root
sh-4.2# touch /.autorelabel # 很重要!变回 SELinux 的安全本文~
sh-4.2# exit switch_root:/# reboot

比较不懂的,应该是 (1)chroot 是啥? (2)为何需要 /.autorelabel 这个文件?

  • chroot 目录:代表将你的根目录『暂时』切换到 chroot 之后所接的目录。因此,以上表为例,那个 /sysroot 将会被暂时作为根目录, 而我们知道那个目录其实就是最原先的系统根目录,所以你当然就能够用来处理 你的文件系统与相关的账号管理啰!

  • 为何需要 /.autorelabel:在 rd.break 的 RAM Disk 环境下,系统是没有 SELinux 的,而你刚刚更改了 /etc/shadow (因为改密码啊!), 所以『这个文件的 SELinux 安全本文的特性将会被取消』喔!如果你没有 让系统于开机时自动的回复 SELinux 的安全本文, 你的系统将产生『无法登入』的问题 (在 SELinux 为 Enforcing 的模式下!)加上 /.autorelabel 就是要让系统在开机的时候自动的使用预设的 SELinux type 重新 写入 SELinux 安全本文到每个文件去!

不过加上 /.autorelabel 之后,系统在开机就会重新写入 SELinux 的 type 到每个文件,因此会花不 少的时间喔!如果你不想要花太多时间, 还有个方法可以处理:

  • 在 rd.break 模式下,修改完 root 密码后,将 /etc/selinux/config 内的 SELinux 类型改为 permissive
  • 重新启动后,使用 root 的身份下达『 restorecon -Rv /etc 』仅修改 /etc 底下的文件;
  • 重新修改 /etc/selinux/config 改回 enforcing ,然后『 setenforce 1 』即可!

直接开机就以 root 执行 bash 的方法

除了上述的 rd.break 之外,我们还可以直接开机取得系统根目录后,让系统直接丢一个 bash 给我 们使用喔!使用的方法很简单,就同样在开机的过程中,同在 linux16 的那一行,最后面不要使用 rd.break 而是使用『 init=/bin/bash 』即可!最后开机完成就会丢一个 bash 给我们!同样不需要 root 密码而有 root 权限!

但是要完整的操作该系统是不可能的,因为我们将 PID 一号更改为 bash 啦!所以,最多还是用在 救援方面就是了! 而且,同样的,要操作该系统你还是得要 remount 根目录才行啊!否则无法更改 文件系统啦!基本上,这个系统的处理方法你应该是要这样作的:

如上图的完整截图,你会发现由于是最预设的 bash 环境,所以连 PATH 都仅有 /bin 而已~所以你 不能下达 reboot !同时, 由于没有 systemd 或者是 init 的存在,所以真的使用绝对路径来下达 reboot 时,系统也是无法协助你重新启动啦! 此时只能按下 reset 或者是强制关机后,才能再次开机!

同时请注意,上面刻意忘记处理 /.autorelabel 的文件建置~你如果按照上述的方法实作的话, 嘿嘿!此时应该是无法登入的喔! 请重新启动进入 rd.break 模式,然后使用 SELinux 改为permissive 的方法来实验看看。等到可以顺利以 root 登入系统后, 使用 restorecon -Rv /etc 来瞧一 瞧,应该会像底下这样:


[root@study ~]# getenforce
Permissive [root@study ~]# restorecon -Rv /etc
restorecon reset /etc/shadow context system_u:object_r:unlabeled_t:s0
->system_u:object_r:shadow_t:s0
restorecon reset /etc/selinux/config context system_u:object_r:unlabeled_t:s0
->system_u:object_r:selinux_config_t:s0 [root@study ~]# vim /etc/selinux/config
SELINUX=enforcing [root@study ~]# setenforce 1

因文件系统错误而无法开机

如果因为设定错误导致无法开机时,要怎么办啊?这就更简单了!最容易出错的设定而导致无法顺利开机的步骤,通常就是 /etc/fstab 这个文件了,尤其是使用者在实作 Quota/LVM/RAID 时,最容易写错参数, 又没有经过 mount -a 来测试挂载,就立刻直接重新启动,真要命!无法开机成功怎么办? 这种情况的问题大多如下面的画面所示:

看到最后两行,他说可以输入 root 的密码继续加以救援喔!那请输入 root 的密码来取得 bash 并以 mount -o remount,rw / 将根目录挂载成可擦写后,继续处理吧!其实会造成上述画面可能的原因除了 /etc/fstab 编辑错误之外,如果你曾经不正常关机后,也可能导致文件系统不一致 (Inconsistent) 的情 况, 也有可能会出现相同的问题啊!如果是扇区错乱的情况,请看到上图中的第二行处, fsck 告 知其实是 /dev/md0 出错, 此时你就应该要利用 fsck.ext3 去检测 /dev/md0 才是!等到系统发现错 误,并且出现『clear [Y/N]』时,输入『 y 』吧!

当然啦,如果是 XFS 文件系统的话,可能就得要使用 xfs_repair 这个指令来处理。这个 fsck/xfs_repair 的过程可能会很长,而且如果你的 partition 上面的 filesystem 有过多的数据损毁时, 即使 fsck/xfs_repair 完成后,可能因为伤到系统槽,导致某些关键系统文件数据的损毁,那么依旧是 无法进入 Linux 的。此时,就好就是将系统当中的重要数据复制出来,然后重新安装,并且检验一 下,是否实体硬盘有损伤的现象才好!不过一般来说,不太可能会这样啦~ 通常都是文件系统处理 完毕后,就能够顺利再次进入 Linux 了。

Linux学习-开机过程的问题解决的更多相关文章

  1. linux系统开机过程描述

    本文描述linux系统开机过程,属于个人理解范畴,如果文中表述有误请大家批评指正! 计算机开机之后,首先要加载BIOS(基本输入输出系统)信息,BIOS包含了很多重要的信息,包括CPU信息,设备启动顺 ...

  2. Linux学习12-CentOS设置多个tomcat开机自启动

    前言 一台服务器上有多个tomcat环境,重启服务器后,每次需要手动一个个启动服务,非常麻烦,于是可以设置tomcat开机自启动. tomcat开机自启动非常慢,可以修改jvm下配置解决tomcat开 ...

  3. Linux 开机过程(转)

    Linux 开机过程 初始化 POST(加电自检)并执行硬件检查: 当 POST 完成后,系统的控制权将移交给启动管理器的第一阶段(first stage),它存储在一个硬盘的引导扇区(对于使用 BI ...

  4. Linux学习-Linux 的开机流程分析

    开机流程一览 系统开机的经过可以汇整成底下的流程的: 加载 BIOS 的硬件信息与进行自我测试,并依据设定取得第一个可开机的装置; 读取并执行第一个开机装置内 MBR 的 boot Loader (亦 ...

  5. Linux学习笔记:系统启动引导过程

    Linux系统启动引导过程 近期发现自己在仅仅是掌握上有几个比較硬的伤: 一.知识体系碎片,比方Linux,这学点那学点,结果没有成体系,串不起来: 二.记忆时间短暂,非常多的内容学了就忘,最后的结果 ...

  6. 我的Linux系统开始学习的过程

    Linux系统,不知大家是否了解.接触计算机不多或对计算机不感冒的人可能对其比较陌生,曾经的我也是.上大学前的我的确对Linux一无所知,那时候接触面窄,都没有听说过此名字,上了大学后,身边的人有学习 ...

  7. day06 tar命令使用,vim简单操作以及linux开机过程

    上节课复习: cat: 查看全部文件内容 head: 从头查看文件内容,默认为前10行 tail: tail -f //动态查看文件是否增加内容 >> 追加 > 覆盖 more: 百 ...

  8. Linux文件系统简介一(磁盘分区、开机过程、目录结构、文件权限、文件扩展名、目录管理)

    Linux:就是一组软件,一套操作系统=核心+系统呼叫接口层. 1.操作系统 操作系统 = 核心(内核) + 系统呼叫(接口) 操作系统其实也是一组程序,重点在于管理计算机的所有活动以及驱动系统中的所 ...

  9. Linux学习笔记之Linux启动引导过程

    早期时,启动一台计算机意味着要给计算机喂一条包含引导程序的纸带,或者手工使用前端面板地址/数据/控制开关来加载引导程序.尽管目前的计算机已经装备了很多工具来简化引导过程,但是这一切并没有对整个过程进行 ...

随机推荐

  1. spring的2种类型转换器

    spring有2种类型转换器,一种是propertyEditor,一种是Converter.虽然都是类型转换,但是还是有细微差别. 所以这里以一个例子的形式来分析一下这2种类型转换的使用场景和差别. ...

  2. GIT主要用到的命令

    git add . //添加到暂存盘 git commit -m ‘备注’//提交到本地仓库 git push //提交到远程仓库 fetch更新本地仓库两种方式: //方法一 $ git fetch ...

  3. SyntaxHighlighter

    SyntaxHighlighter uses separate syntax files called brushes to define its highlighting functionality ...

  4. 【转】如何学习Javascript

    首先要说明的是,咱现在不是高手,最多还是一个半桶水,算是入了JS的门. 谈不上经验,都是一些教训. 这个时候有人要说,“靠,你丫半桶水,凭啥教我们”.您先别急着骂,先听我说. 你叫一个大学生去教小学数 ...

  5. ASPECTJ 注解。。。

    public interface ISomeService { public void doSome(); public String dade(); } public class SomeServi ...

  6. Fleet(集群管理器)

    工作原理 fleet 是通过systemd来控制你的集群的,控制的任务被称之为unit(单元),控制的命令是fleetctl unit运行方式 unit的运行方式有两种: standard globa ...

  7. JS将人民币小写金额转换为大写

    /** 数字金额大写转换(可以处理整数,小数,负数) */ function smalltoBIG(n) { var fraction = ['角', '分']; var digit = ['零', ...

  8. 变更gcc版本

    当前的GCC版本为GCC-4.2,需要切换到GCC-3.4.首先,你需要去你的usr/bin/下去看看有没有gcc-3.4这样文件,如果没有的话,就安装一下吧: apt-get install gcc ...

  9. MovieReview—Transformers.The.Last.Knight.(变形金刚5:最后的骑士.)

     Gorgeous Effect & Bad Plot   I can only say that the movie's effects are shocking. However, the ...

  10. codeforce Gym 100685F Flood (topo排序)

    如果直接模拟水向周围流会TLE,因为某些个结点被重复扩展了多次, 科学做法是topo排序,每次只把入度为0的点放入队列,这样就严格保证了每个结点只被扩展一次. #include<bits/std ...