Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

26.10. 引导期间编辑终端

可以修改菜单条目,并在启动时传输到内核的参数。这通过菜单条目编辑器界面完成,该界面在启动加载器菜单中所选菜单条目上按 e 键时触发。Esc 键丢弃任何更改并重新加载标准菜单界面c 键加载命令行界面。

命令行界面是最基本的 GRUB 2 界面,但它也是授予最多控制权的界面。通过命令行,可以键入任何相关的 GRUB 2 命令,后跟 Enter 键来执行它们。此界面具有与 shell 类似的一些高级功能,包括基于上下文的 Tab 键 完成和 Ctrl+a 以移到行首,而 Ctrl+e 可移到行末。此外,箭头HomeEdDelete 键的工作方式与 bash shell 中相同。

26.10.1. 引导至救援模式

救援模式提供了一个方便的单用户环境,并允许您在无法完成正常引导过程时修复您的系统。在救援模式中,系统会尝试挂载所有本地文件系统并启动一些重要的系统服务,但不激活网络接口或者同时允许更多的用户登录到该系统。在 Red Hat Enterprise Linux 7 中,救援模式等同于单用户模式,需要 root 密码。

  1. 要在启动过程中进入救援模式,请在 GRUB 2 引导屏幕上按 e 键进行编辑。
  2. 在 64 位 IBM Power 系列中的 linux 行的末尾添加以下参数,在基于 x86-64 BIOS 的系统中 linux16 行,或者 UEFI 系统上的 linuxefi 行:

    systemd.unit=rescue.target

    Ctrl+a Ctrl+e 键,分别跳到行首和行尾。在某些系统上,HomeEnd 也起作用。

    请注意,等同的参数( 1ssingle )也可以传输到内核。

  3. Ctrl+x 使用 参数启动系统。

26.10.2. 引导至紧急模式

紧急模式提供最最小的环境,并允许您在系统无法进入救援模式的情况下修复您的系统。在紧急模式中,系统仅挂载用于读取的 root 文件系统,不会尝试挂载任何其他本地文件系统,不激活网络接口,并且仅启动很少的基本服务。在 Red Hat Enterprise Linux 7 中,紧急模式需要 root 密码。

  1. 要进入紧急模式,请在 GRUB 2 引导屏幕上按 e 键进行编辑。
  2. 在 64 位 IBM Power 系列中的 linux 行的末尾添加以下参数,在基于 x86-64 BIOS 的系统中 linux16 行,或者 UEFI 系统上的 linuxefi 行:

    systemd.unit=emergency.target

    Ctrl+a Ctrl+e 键,分别跳到行首和行尾。在某些系统上,HomeEnd 也起作用。

    请注意,等同的参数( emergency-b )也可以传输到内核。

  3. Ctrl+x 使用 参数启动系统。

26.10.3. 引导至 Debug Shell

systemd 调试 shell 在启动过程的早期阶段提供了一个 shell,可用于诊断 systemd 相关的启动问题。进入 debug shell 时,system ctl 命令(如 systemctl list-jobssystemctl list-units )可用于查找引导问题的原因。此外,可以将 debug 选项添加到内核命令行中,以增加日志消息的数量。对于 systemd,内核命令行选项 debug 现在是 systemd.log_level=debug 的快捷方式。

添加 Debug Shell 命令

要只为此会话激活 debug shell,请按照如下所示:

  1. 在 GRUB 2 引导屏幕上,将光标移至要编辑的菜单条目,然后按 e 键进行编辑。
  2. 在 64 位 IBM Power 系列中的 linux 行的末尾添加以下参数,在基于 x86-64 BIOS 的系统中 linux16 行,或者 UEFI 系统上的 linuxefi 行:

    systemd.debug-shell

    (可选)添加 debug 选项。

    Ctrl+a Ctrl+e 键,分别跳到行首和行尾。在某些系统上,HomeEnd 也起作用。

  3. 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。

  1. CtrlAltF9 连接到调试 shell。如果使用虚拟机,发送此组合键需要虚拟化应用程序的支持。例如,如果使用 虚拟机管理器,请从菜单中选择 Send KeyCtrl+Alt+F9
  2. debug shell 不需要身份验证,因此应当在 TTY9 中看到类似如下的提示: [root@localhost /]#
  3. 如果需要,请按如下所示输入一个命令来验证您在 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
  4. 要返回到默认 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 密码

  1. 启动系统并显示 BIOS 信息时,为引导菜单选择 选项并选择 从安装磁盘引导。
  2. 选择 Troubleshooting
  3. 选择 Rescue a Red Hat Enterprise Linux System
  4. 选择 Continue,这是默认选项。此时,如果找到加密的文件系统,您将获得密码短语。
  5. 按确定以确认显示的信息,直至显示 shell 提示符。
  6. 按如下所示更改文件系统 root

    sh-4.2# chroot /mnt/sysimage
  7. 输入 passwd 命令并按照命令行中显示的说明更改 root 密码。
  8. 删除 自动相关文件,以防止消耗 SELinux 重新标记磁盘:

    sh-4.2# rm -f /.autorelabel
  9. 输入 exit 命令退出 chroot 环境
  10. 再次输入 exit 命令以恢复初始化并完成系统引导。

使用 rd.break 重置 Root 密码

  1. 启动系统,并在 GRUB 2 引导屏幕上按 e 键进行编辑。
  2. linux16 行的末尾或附近删除 rhgbquiet 参数,或从 UEFI 系统上的 linuxefi 中删除。

    Ctrl+a Ctrl+e 键,分别跳到行首和行尾。在某些系统上,HomeEnd 也起作用。

    重要

    必须删除 rhgbquiet 参数,才能启用系统消息。

  3. 在 64 位 IBM Power 系列中的 linux 行的末尾添加以下参数,在基于 x86-64 BIOS 的系统中 linux16 行,或者 UEFI 系统上的 linuxefi 行:

    rd.break enforcing=0

    添加 enforcing=0 选项可忽略 SELinux 重新标记过程所需的时间。

    在将控制权交给 Linux 内核 之前,init ramfs 将停止,使您能够使用 root 文件系统。

    请注意,init ramfs 提示将显示在 Linux 行中指定的最后一个控制台中。

  4. Ctrl+x 使用更改的参数启动系统。

    使用加密的文件系统时,此时需要输入密码。但是,密码提示符可能不会显示,因为日志消息会屏蔽密码提示。您可以按 Backspace 键来查看提示。释放密钥并输入加密文件系统的密码,同时忽略日志记录消息。

    此时 会显示 initramfs switch_root 提示符。

  5. /sysroot/ 中,文件系统以只读形式挂载。如果文件系统不可写入,则不允许更改密码。

    将文件系统重新挂载为可写:

    switch_root:/# mount -o remount,rw /sysroot
  6. 在启用 write 时,文件系统会重新挂载。

    按如下方式更改文件系统的

    switch_root:/# chroot /sysroot

    提示更改为 sh-4.2#

  7. 输入 passwd 命令并按照命令行中显示的说明更改 root 密码。

    请注意,如果系统不可写入,passwd 工具 会失败并显示以下错误:

    Authentication token manipulation error
  8. 更新密码文件会导致文件带有不正确的 SELinux 安全上下文。要在下一次系统引导时重新标记所有文件,请输入以下命令:

    sh-4.2# touch /.autorelabel

    另外,为节省重新标记大磁盘所需的时间,您可以省略此步骤,只要在第 3 步中包含 enforcing=0 选项。

  9. 将文件系统重新挂载为只读:

    sh-4.2# mount -o remount,ro /
  10. 输入 exit 命令退出 chroot 环境
  11. 再次输入 exit 命令以恢复初始化并完成系统引导。

    使用加密的文件系统时,此时需要一个通过词语或短语。但是,密码提示符可能不会显示,因为日志消息会屏蔽密码提示。您可以按住 Backspace 键来查看提示。释放密钥并输入加密文件系统的密码,同时忽略日志记录消息。

    注意

    请注意,SELinux 重新标记过程可能需要很长时间。系统重新启动将在过程完成后自动进行。

  12. 如果您在第 3 步中添加了 enforcing=0 选项,并在第 8 步中省略 touch /.autorelabel 命令,请输入以下命令来恢复 /etc/shadow 文件的 SELinux 安全上下文:

    ~]# restorecon /etc/shadow

    输入以下命令重新打开 SELinux 策略强制并验证它是否启动:

    ~]# setenforce 1
    ~]# getenforce
    Enforcing