Linux | 单用户模式启动 / root 密码重置 / 修复

注:本文为 “Linux 启动单用户模式” 相关文章合辑。

略作重排,未去重。


以单用户模式启动 Linux 的三种方法

作者: Magesh Maruthamuthu
译者: LCTT Xiaobin.Liu
2020-05-03 23:01

单用户模式,也被称为维护模式,在此模式下超级用户能够恢复或修复系统问题。

通常情况下,此类问题在多用户环境中无法修复,例如系统能够启动但功能无法正常运行,或者无法登录系统。

在基于 Red Hat(RHEL)7/8 的系统中,可使用 runlevel1.targetrescue.target 来实现单用户模式。

在此模式下,系统会挂载所有的本地文件系统,但不会开启网络接口。

系统仅启动特定的几个服务以及修复系统所必需的尽可能少的功能。

当需要运行文件系统一致性检查以修复损坏的文件系统,或忘记 root 密码后重置密码,又或要修复系统上的一个挂载点问题时,此方法十分有用。

可以使用以下三种方法以单用户模式启动 CentOS/RHEL 7/8 系统:

  • 方法 1:通过向内核添加 rd.break 参数来以单用户模式启动 CentOS/RHEL 7/8 系统;
  • 方法 2:通过用 init=/bin/bashinit=/bin/sh 替换内核中的 rhgb quiet 语句来以单用户模式启动 CentOS/RHEL 7/8 系统;
  • 方法 3:通过用 rw init=/sysroot/bin/sh 参数替换内核中的 ro 语句以单用户模式启动 CentOS/RHEL 7/8 系统。

方法 1

通过向内核添加 rd.break 参数来以单用户模式启动 CentOS/RHEL 7/8 系统。

重启系统,在 GRUB2 启动界面,按下 e 键来编辑选中的内核。需选中第一行,其中第一个是最新的内核,若希望使用旧的内核启动系统,也可选择其他行。

img

根据 RHEL/CentOS 版本,找到 linux16linux 语句,按下键盘上的 End 键,跳至行末,按照如下截图所示添加关键词 rd.break,按下 Ctrl+xF10 以进入单用户模式。

若系统是 RHEL/CentOS 7,需查找 linux16;若系统是 RHEL/CentOS 8,则需查找 linux

img

此修改会使 root 文件系统以 “只读(ro)” 模式挂载。可使用以下命令进行验证,以下输出也明确表明当前处于 “紧急模式(Emergency Mode)”。

# mount | grep root

img

为了修改 sysroot 文件系统,需要以读写模式(rw)重新挂载它。

# mount -o remount,rw /sysroot

运行以下命令修改环境,这即通常所说的 “监禁目录” 或 “chroot 监狱”。

# chroot /sysroot

img

此时,单用户模式已完全准备就绪。当修复完问题并要退出单用户模式时,执行以下步骤。

CentOS/RHEL 7/8 默认使用 SELinux,因此需创建以下隐藏文件,该文件会在下一次启动时重新标记所有文件。

# touch /.autorelabel

最后,使用以下命令重启系统,也可输入两次 exit 命令来重启系统。

# reboot -f

方法 2

通过用 init=/bin/bashinit=/bin/sh 替换内核中的 rhgb quiet 语句来以单用户模式启动 CentOS/RHEL 7/8 系统。

重启系统,在 GRUB2 启动界面,按下 e 键来编辑选中的内核。

img

找到语句 rhgb quiet,用 init=/bin/bashinit=/bin/sh 替换它,然后按下 Ctrl+xF10 以进入单用户模式。

init=/bin/bash 的截图。

img

init=/bin/sh 的截图。

img

默认情况下,上述操作会以只读(ro)模式挂载 / 分区,因此需要以读写(rw)模式重新挂载 / 文件系统,以便能够对其进行修改。

# mount -o remount,rw /

img

此时即可执行相关任务。当任务结束时,执行以下命令来开启重启时的 SELinux 重新标记。

# touch /.autorelabel

最后,重启系统。

# exec /sbin/init 6

方法 3

通过用 rw init=/sysroot/bin/sh 参数替换内核中的 ro 单词,以单用户模式启动 CentOS/RHEL 7/8 系统。

为了中断自动启动的过程,重启系统并在 GRUB2 启动界面按下任意键。

此时会展示系统上所有可用的内核,选择最新的内核,按下 e 键来编辑选中的内核参数。

找到以 linuxlinux16 开头的语句,用 rw init=/sysroot/bin/sh 替换 ro。替换完成后按下 Ctrl+xF10 以进入单用户模式。

运行以下命令把环境切换为 “chroot 监狱”。

# chroot /sysroot

若有需要,进行必要的修改。修改完成后,执行以下命令来开启重启时的 SELinux 重新标记。

# touch /.autorelabel

最后,重启系统。

# reboot -f

增篇:大同中的小异


解决 CentOS 7 修改 root 密码报错以及无法进入单用户模式

莫闲 219 于 2022 - 03 - 23 14:00:38 发布

Linux 找回 root 密码操作如下:

  1. 启动系统,在开机界面按 “e” 进入编辑界面。
  2. 找到以 “Linux16” 开头的内容,在行的最后输入:init=/bin/sh
  3. 之后按 ctrl + x 进入单用户模式。
  4. 接着输入 mount -o remount,rw /
  5. 在新的一行输入 passwd,按回车后输入密码,并确认输入密码。如果显示 passwd... 的样式,则表示修改成功。
  6. 接着输入:touch /.autorelabel,然后回车。
  7. 之后输入 exec /sbin/init,等待一段时间,系统自动重启,新密码生成。

需要注意的是,如果出现 “SMBus Host Controller not enabled!” 之后,不要进行任何操作,等待片刻。等系统完成修改后,此时无法对编辑界面进行操作,重启虚拟机即可。如果中途退出虚拟机,会导致 root 的新老密码都无法登录,且无法在开机界面进入单用户模式,如图所示:

img

此时,需要在 linux16 中的 rd.lvm.lv 前加入 rw,并在行末尾输入 init=/bin/sh,即可进入单用户模式。

img


Red Hat & CentOS 救援模式 / 单用户模式

阿巴阿巴 编辑于 2021-09-16 13:10

环境

Red Hat 8 同时兼容 CentOS 8。单用户模式和救援模式主要用于系统出现错误配置不能正常启动的情况,可使用这两种模式来更改错误配置。当忘记 root 密码时,也可通过这两种方式强制更改密码。

单用户模式

在此模式下,与正常启动的系统差别不大,以 root 身份运行,拥有最高权限,可对所有文件进行读写,且无需输入 root 密码,因此能够实现强制更改密码。该模式主要用于配置错误导致系统无法启动,或者忘记 root 密码的场景。需注意,此模式下没有网络连接。

更改启动项

在系统启动之前的 grub 启动菜单中,按 “e” 键编辑第一个启动项。

img

编辑启动项进入单用户模式:

img

  1. 将 “ro” 改为 “rw”;
  2. 在这一行的最后添加配置 “init=/bin/sh”。

将 “ro” 改为 “rw” 表示在启动单用户模式时,将根目录挂载为可读写,否则在进入单用户模式后,还需运行命令 mount -o remount,rw / 才能对系统中的文件进行更改。

配置后如图:

img

启动单用户模式

编辑好启动项以后,按 Ctrl + x 启动。

启动后的界面:

img

输入 id 命令,可发现此时 shell 的权限为 root 权限:

img

然后即可更改导致系统不能启动的错误配置,或者直接运行 passwd 命令来更改 root 账户的密码。

重启到正常系统

当配置修改完成后,需要在根目录创建一个 .autorelabel 文件。有了这个文件,重启时系统会重新标记 SELinux 的文件系统,以使配置生效。

touch /.autorelabel

重启进入系统

exec /sbin/init

救援模式

救援模式是从其他介质启动,该介质可以是安装系统的光盘或 U 盘。此模式相当于将系统盘作为一个外挂磁盘,因此当系统无法恢复时,可用于备份重要文件。一般在单用户模式都无法进入的情况下使用。

引导光盘启动

在光盘引导项中选择第三项:Troubleshooting(故障排除)

img

然后选择故障排除的第二项:Rescue a Red Hat Enterprise Linux system(拯救系统)

img

接着会进入救援选项,选择第一个:Continue(继续操作),输入 1 并回车。

img

救援模式操作

此时,救援系统会将原来的系统挂载到 /mnt/sysroot 下:

img

到这一步,启动的是镜像光盘里的系统。执行 ls 命令后会发现,其文件与原来系统里的文件相似,但这并非原来系统里的文件,而是镜像光盘里的文件,更改这些文件并无实际作用。原来系统里的文件被挂载到了 /mnt/sysroot 中。

img

切换到系统的 root 权限

系统输出了一条提示:如果想让系统的根成为救援系统的根,可运行命令 chroot /mnt/sysroot

这条命令会更改 root 目录,执行后根目录将变更到 /mnt/sysroot 下,此时的操作就与在正常系统里操作一样了。

更改 root 密码

更改 root 密码可通过切换到原系统 root 权限进行更改,也可直接更改 /mnt/sysroot/etc/passwd 文件。

第一种方法

直接更改文件的方法

vi /mnt/sysroot/etc/passwd
# root:x:0:0:root:/root:/bin/bash
## 将 root 后面的 x 去掉,如下所示:
# root::0:0:root:/root:/bin/bash
reboot      # 重启 

passwd 文件包含系统的用户配置,root 后面的 “x” 表示账户受密码保护。如果删除这个 “x”,系统会认为 root 账户没有配置密码,当系统重启后,root 无需密码即可直接登录,之后再用 passwd 命令更改密码即可。

第二种方法

获取系统 root 权限直接更改密码,这种方法与单用户模式类似。

chroot /mnt/sysroot     # 切换为原系统的 root 权限 
passwd      # 更改 root 密码 
exit        # 退出原系统 root 权限 
reboot      # 重启 

centos 7 重设密码总是失败

哈哈虎 123 已于 2022 - 04 - 11 11:14:19 修改

之前学习时记录过 2 个方法,前天实际操作了 2 个服务器,一个顺利完成,另一个却始终不成功。而且该服务器安装的是中文方式,中途出现乱码。

原来是因为自己学习用的虚拟机上的 centos 7 关闭了 Selnux,而此次有个服务器并未关闭 Selinux。

完成修改密码之后,需要重置 .autorelabel 文件。

关于 autorelabel 文件的作用:

  • 下次重启系统时,它会自动重新标记 SElinux 的文件系统;
  • 这通常在首次为 SELinux 标记文件系统时,或者在不同类型的策略之间切换时发生,例如从目标策略更改为严格策略;
  • 一般用于 shell 层,重新定义 selinux 为非启动状态,否则重置 ROOT 密码无法生效。

这是之前的学习记录:

Centos 7 忘记密码

centos7 系统忘记 root 密码

这里重新操作并记录一番。

方法一

  1. 开机后进入编辑

在这里插入图片描述

  1. 找到 linux16 这一行

在这里插入图片描述

  • 将 “ro” 改成 “rw”;
  • 如果看到的是 “zh_CN”,将其改成 “en_US”;
  • 在尾部加上 “init=/bin/bash”;
  • 完成后,按 “Ctrl + x” 运行。
  1. 重设 root 密码

在这里插入图片描述

  • passwd:可以简单设置密码,但最好设置长度大于 8 位,以免出错重来;
  • touch /.autorelabel:最后一定要加上这条更新 SELINUX 信息的命令,除非确认忘记密码的服务器已经关闭了 Selinux。
  1. exit 不管用,手动重启,即可使用新密码。

方法二

  1. 同上进入编辑(图省略)
  2. 找到 linux16 这一行
    在这里插入图片描述
    • 如果看到的是 “zh_CN”,将其改成 “en_US”;
    • 在尾部加上 “rd.break”,完成后;
    • 按 “Ctrl + x” 运行。
  3. 重新 mount /sysroot,重设密码
    在这里插入图片描述
    • 输入 mount 可以看到最后一行显示 /sysroot 是 “ro” 方式,必须改成 “rw”;
    • mount -o remount,rw /sysroot:注意 “rw” 和 “/sysroot” 之间有空格分开;
    • chroot /sysroot
    • passwd:可以简单设置密码,但最好设置长度大于 8 位,以免出错重来;
    • touch /.autorelabel:最后一定要加上这条更新 SELINUX 信息的命令,除非确认忘记密码的服务器已经关闭了 Selinux;
    • 输入两次 exit,自动重启,即可使用新密码。

CentOS 7 进入单用户模式修改 root 密码

我要偷偷学习,然后惊艳所有人于 2021 - 12 - 30 13:31:31 发布

如何找回 root 密码,对于不同版本的 CentOS,解决方法存在一些细微区别。

这里以 CentOS 7 为例说明解决方法。

Linux 系统共有 7 个运行级别(run - level)

0:关机
1:单用户(找回丢失密码)
2:多用户无网络服务
3:多用户有网络服务
4:保留
5:图形界面
6:重启

其中,在找回 root 密码时,需要进入单用户模式,因为 root 用户进入单用户模式不需要密码。

可能有同学会有疑问,不需要密码岂不是很不安全?实际上,进入单用户模式需要在实机上操作,且进入单用户模式需要重启服务器,重启后远程连接早已中断,因此无需担心他人远程随意篡改密码。

以 CentOS 7 为例,在进入到图 1 界面时,按 “e” 进入到图 2 编辑界面。

img

图 1 进入系统界面

img

图 2 编辑界面

在编辑界面找到 linux16 一行,将 “ro” 修改为 “rw init=/sysroot/bin”,然后按 ctrl + x 进入系统,接着会看到图 3:

在这里插入图片描述

图 3

输入 chroot /sysroot,修改目录,获取 root 权限,然后即可修改 root 密码。如图 4 所示,使用 passwd root 修改 root 密码,输入两遍确认即可。

在这里插入图片描述

图 4

最后,需要使修改的密码生效,输入 touch /.autorelabel 即可,然后输入 reboot 重启。

到此,root 密码就修改完毕,远程 Xshell 连接时使用新密码即可。


via:

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值