忘记 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 目录下,因此,你得要这样作:

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


  1. [root@study ~]# getenforce
  2. Permissive
  3. [root@study ~]# restorecon -Rv /etc
  4. restorecon reset /etc/shadow context system_u:object_r:unlabeled_t:s0
  5. ->system_u:object_r:shadow_t:s0
  6. restorecon reset /etc/selinux/config context system_u:object_r:unlabeled_t:s0
  7. ->system_u:object_r:selinux_config_t:s0
  8. [root@study ~]# vim /etc/selinux/config
  9. SELINUX=enforcing
  10. [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. MyBatis学习总结(二)---实例

    为了对MyBatis有个初步了解,现做一个简单的增.删.改.查实例.了解涉及的文件与相关作用. MySql创建friends表,以下是表的sql语句 DROP TABLE IF EXISTS `fri ...

  2. @PropertySource

    功能 加载指定的属性文件(*.properties)到 Spring 的 Environment 中.可以配合 @Value 和 @ConfigurationProperties 使用. @Prope ...

  3. python基础---有关nparray----切片和索引(一)

    Numpy最重要的一个特点就是其N维数组对象,即ndarray,该对象是一种快速而灵活的大数据集容器,实际开发中,我们可以利用这种数组对整块数据执行一些数学运算. 有关ndarray,我们就从最简单的 ...

  4. 【简抄】h5 新增的几个背景属性和文本属性

    一.背景图像显示: ①background-size:规定背景图像的大小: 值:像素值.百分比.auto.cover.contain ②background-origin :规定背景图像的起始位置: ...

  5. Godaddy虚拟主机新建mysql数据库 2019最新

    第一次用狗爹,完全摸不着路子. 网站本地已搭建,不知道数据库是在哪里上传. 百度搜索结果都是四五年前的旧内容,耽误时间. 还是问客服,Godaddy的客服确实不赖 godaddy虚拟主机如何新建数据库 ...

  6. 初识RatingBar

    RatingBar,SeekBar和ProgressBar的子类 <RatingBar android:id="@+id/ratingBar2" android:layout ...

  7. HDU 1847 Good Luck in CET-4 Everybody! 四级好运!(博弈)

    思路:先用P/N状态来找规律. N状态:1 2 4 6 8 16 P状态:3 5 因为3=1+2, 无论拿1或者2皆输.看看5,只要抽掉2就变成了3,所以是N状态.看看6,可以抽掉1 2 4,若抽1, ...

  8. 将数据表中的数据添加到ComboBox控件中

    实现效果: 知识运用: ComboBox控件的DataSource 属性 //获取或设置ComboBox的数据源 public Object DataResouce{get;set;} //属性值:任 ...

  9. appium---命令行启动appium

    在客户端的appium长时间运行的时候,出产生一些数据.日志有可能会对appium的内存有所增长,严重的会使appium产生崩溃,这个时候就推荐使用通过cmd进行运行appium, 安装前提需要安装N ...

  10. CPP-网络/通信:SSL功能和原理

    面对诸多的网上交易的风险,很多网上银行.网上商城在建立系统时都注意到了安全问题.而我们也经常可以看到很多网上银行.电子商务网站在强调本系统的安全性的时候,都说采用了基于数字证书的SSL加密传输.SSL ...