26.10. 引导期间编辑终端
可以修改菜单条目,并在启动时传输到内核的参数。这通过菜单条目编辑器界面完成,该界面在启动加载器菜单中所选菜单条目上按 e 键时触发。Esc 键丢弃任何更改并重新加载标准菜单界面。c 键加载命令行界面。
命令行界面是最基本的 GRUB 2 界面,但它也是授予最多控制权的界面。通过命令行,可以键入任何相关的 GRUB 2 命令,后跟 Enter 键来执行它们。此界面具有与 shell 类似的一些高级功能,包括基于上下文的 Tab 键 完成和 Ctrl+a 以移到行首,而 Ctrl+e 可移到行末。此外,箭头、Home、Ed 和 Delete 键的工作方式与 bash shell 中相同。
26.10.1. 引导至救援模式
救援模式提供了一个方便的单用户环境,并允许您在无法完成正常引导过程时修复您的系统。在救援模式中,系统会尝试挂载所有本地文件系统并启动一些重要的系统服务,但不激活网络接口或者同时允许更多的用户登录到该系统。在 Red Hat Enterprise Linux 7 中,救援模式等同于单用户模式,需要 root
密码。
- 要在启动过程中进入救援模式,请在 GRUB 2 引导屏幕上按 e 键进行编辑。
在 64 位 IBM Power 系列中的
linux
行的末尾添加以下参数,在基于 x86-64 BIOS 的系统中linux16
行,或者 UEFI系统上的 linuxefi
行:systemd.unit=rescue.target
Ctrl+a Ctrl+e 键,分别跳到行首和行尾。在某些系统上,Home 和 End 也起作用。
请注意,等同的参数(
1
、s
和single
)也可以传输到内核。- Ctrl+x 使用 参数启动系统。
26.10.2. 引导至紧急模式
紧急模式提供最最小的环境,并允许您在系统无法进入救援模式的情况下修复您的系统。在紧急模式中,系统仅挂载用于读取的 root
文件系统,不会尝试挂载任何其他本地文件系统,不激活网络接口,并且仅启动很少的基本服务。在 Red Hat Enterprise Linux 7 中,紧急模式需要 root
密码。
- 要进入紧急模式,请在 GRUB 2 引导屏幕上按 e 键进行编辑。
在 64 位 IBM Power 系列中的
linux
行的末尾添加以下参数,在基于 x86-64 BIOS 的系统中linux16
行,或者 UEFI系统上的 linuxefi
行:systemd.unit=emergency.target
Ctrl+a Ctrl+e 键,分别跳到行首和行尾。在某些系统上,Home 和 End 也起作用。
请注意,等同的参数(
emergency
和-b
)也可以传输到内核。- Ctrl+x 使用 参数启动系统。
26.10.3. 引导至 Debug Shell
systemd
调试 shell 在启动过程的早期阶段提供了一个 shell,可用于诊断 systemd
相关的启动问题。进入 debug shell 时,system
ctl 命令(如 systemctl list-jobs
和 systemctl list-units
)可用于查找引导问题的原因。此外,可以将 debug
选项添加到内核命令行中,以增加日志消息的数量。对于 systemd
,内核命令行选项 debug
现在是 systemd.log_level=debug
的快捷方式。
添加 Debug Shell 命令
要只为此会话激活 debug shell,请按照如下所示:
- 在 GRUB 2 引导屏幕上,将光标移至要编辑的菜单条目,然后按 e 键进行编辑。
在 64 位 IBM Power 系列中的
linux
行的末尾添加以下参数,在基于 x86-64 BIOS 的系统中linux16
行,或者 UEFI系统上的 linuxefi
行:systemd.debug-shell
(可选)添加
debug
选项。Ctrl+a Ctrl+e 键,分别跳到行首和行尾。在某些系统上,Home 和 End 也起作用。
- Ctrl+x 使用 参数启动系统。
如果需要,可以通过 systemctl enable debug-shell 命令启用 debug shell 来在每次引导时启动 debug
shell。或者,grubby
工具可用于对 GRUB 2 菜单中的内核命令行进行永久性更改。有关使用 grubby
的更多信息,请参阅 第 26.4 节 “使用 grubby 工具对 GRUB 2 菜单进行持久更改”。
永久启用 debug shell 是一种安全风险,因为不需要进行身份验证即可使用。调试会话结束后禁用它。
连接到 Debug Shell
在启动过程中,systemd-debug-generator
将在 TTY9 上配置 debug shell。
-
CtrlAltF9 连接到调试 shell。如果使用虚拟机,发送此组合键需要虚拟化应用程序的支持。例如,如果使用 虚拟机管理器,请从菜单中选择
。 -
debug shell 不需要身份验证,因此应当在 TTY9 中看到类似如下的提示:
[root@localhost /]#
如果需要,请按如下所示输入一个命令来验证您在 debug shell 中:
/]# systemctl status $$ ● debug-shell.service - Early root shell on /dev/tty9 FOR DEBUGGING ONLY Loaded: loaded (/usr/lib/systemd/system/debug-shell.service; disabled; vendor preset: disabled) Active: active (running) since Wed 2015-08-05 11:01:48 EDT; 2min ago Docs: man:sushell(8) Main PID: 450 (bash) CGroup: /system.slice/debug-shell.service ├─ 450 /bin/bash └─1791 systemctl status 450
- 要返回到默认 Ctrl+Alt+F1。
要诊断启动问题,可以通过在内核命令行上添加 systemd.mask=unit_name
几次来屏蔽某些 systemd 单元
。要在引导过程中启动其他进程,请将 systemd.wants=unit_name
添加到内核命令行。systemd-debug-generator(8)手册页
描述了这些选项。
26.10.4. 更改和重置根密码
设置 root
密码是 Red Hat Enterprise Linux 7 安装的强制部分。如果忘记或丢失 root
密码,可以重置它,但属于 wheel 组成员的用户可以更改 root
密码,如下所示:
~]$ sudo passwd root
请注意,在 GRUB 2 中,重置密码不再以单用户模式执行,因为它包含在 Red Hat Enterprise Linux 6 中的 GRUB 中。现在,需要 root
密码 才能在单用户模式
和紧急
模式下运行。
此处显示了两个重置 root
密码的步骤:
- 使用安装磁盘重置 Root 密码 带您进入 shell 提示符,而无需编辑 GRUB 2 菜单。它是两个程序的时间较短,也是推荐的方法。您可以使用引导磁盘或常规的 Red Hat Enterprise Linux 7 安装磁盘。
-
使用 rd.break 重置 Root 密码 在将控制权从
initramfs
传递给systemd
之前,使用rd.break
来中断引导过程。此方法的缺点在于它需要更多步骤,包括必须编辑 GRUB 2 菜单,涉及在消耗的 SELinux 文件重新标记或更改 SELinux 强制模式之间选择,然后在启动完成后恢复/etc/shadow/
的 SELinux 安全上下文。
使用安装磁盘重置 Root 密码
- 启动系统并显示 BIOS 信息时,为引导菜单选择 选项并选择 从安装磁盘引导。
-
选择
Troubleshooting
。 -
选择
Rescue a Red Hat Enterprise Linux System
。 -
选择
Continue
,这是默认选项。此时,如果找到加密的文件系统,您将获得密码短语。 - 按确定以确认显示的信息,直至显示 shell 提示符。
按如下所示更改文件系统
root
:sh-4.2# chroot /mnt/sysimage
-
输入
passwd
命令并按照命令行中显示的说明更改root
密码。 删除
自动相关文件
,以防止消耗 SELinux 重新标记磁盘:sh-4.2# rm -f /.autorelabel
-
输入
exit
命令退出chroot 环境
。 -
再次输入
exit
命令以恢复初始化并完成系统引导。
使用 rd.break 重置 Root 密码
- 启动系统,并在 GRUB 2 引导屏幕上按 e 键进行编辑。
从
linux16
行的末尾或附近删除rhgb
和quiet
参数,或从 UEFI 系统上的linuxefi
中删除。Ctrl+a Ctrl+e 键,分别跳到行首和行尾。在某些系统上,Home 和 End 也起作用。
重要必须删除
rhgb
和quiet
参数,才能启用系统消息。在 64 位 IBM Power 系列中的
linux
行的末尾添加以下参数,在基于 x86-64 BIOS 的系统中linux16
行,或者 UEFI系统上的 linuxefi
行:rd.break enforcing=0
添加
enforcing=0
选项可忽略 SELinux 重新标记过程所需的时间。在将控制权交给 Linux 内核 之前,
init
ramfs 将停止,使您能够使用root
文件系统。请注意,
init
ramfs 提示将显示在 Linux 行中指定的最后一个控制台中。Ctrl+x 使用更改的参数启动系统。
使用加密的文件系统时,此时需要输入密码。但是,密码提示符可能不会显示,因为日志消息会屏蔽密码提示。您可以按 Backspace 键来查看提示。释放密钥并输入加密文件系统的密码,同时忽略日志记录消息。
此时
会显示 initramfs
switch_root
提示符。在
/sysroot/
中,文件系统以只读形式挂载。如果文件系统不可写入,则不允许更改密码。将文件系统重新挂载为可写:
switch_root:/# mount -o remount,rw /sysroot
在启用 write 时,文件系统会重新挂载。
按如下方式更改文件系统的
根
:switch_root:/# chroot /sysroot
提示更改为
sh-4.2#
。输入
passwd
命令并按照命令行中显示的说明更改root
密码。请注意,如果系统不可写入,passwd 工具 会失败并显示以下错误:
Authentication token manipulation error
更新密码文件会导致文件带有不正确的 SELinux 安全上下文。要在下一次系统引导时重新标记所有文件,请输入以下命令:
sh-4.2# touch /.autorelabel
另外,为节省重新标记大磁盘所需的时间,您可以省略此步骤,只要在第 3 步中包含
enforcing=0
选项。将文件系统重新挂载为只读:
sh-4.2# mount -o remount,ro /
-
输入
exit
命令退出chroot 环境
。 再次输入
exit
命令以恢复初始化并完成系统引导。使用加密的文件系统时,此时需要一个通过词语或短语。但是,密码提示符可能不会显示,因为日志消息会屏蔽密码提示。您可以按住 Backspace 键来查看提示。释放密钥并输入加密文件系统的密码,同时忽略日志记录消息。
注意请注意,SELinux 重新标记过程可能需要很长时间。系统重新启动将在过程完成后自动进行。
如果您在第 3 步中添加了
enforcing=0
选项,并在第 8 步中省略touch /.autorelabel
命令,请输入以下命令来恢复/etc/shadow
文件的 SELinux 安全上下文:~]# restorecon /etc/shadow
输入以下命令重新打开 SELinux 策略强制并验证它是否启动:
~]# setenforce 1 ~]# getenforce Enforcing