Linux 单用户模式详解

2026-01-27 16:23:54 444

Linux 单用户模式

欢迎来到8455线路检测中心技术小课堂,每天分享一个技术小知识。

Linux 系统管理中,单用户模式(Single-User Mode) 是一种特殊的运行状态,通常用于系统维护、故障排除和紧急恢复。与多用户模式(正常运行状态)不同,单用户模式仅允许 root 用户登录,启动最精简的系统服务(甚至完全不启动额外服务),且默认禁用网络功能。这种“隔离”环境为管理员提供了安全的操作空间,可用于修复损坏的文件系统、重置丢失的 root 密码、修改错误的配置文件等关键任务。

一、单用户模式的本质

单用户模式的核心是最小化系统启动,仅加载维持基本操作所需的组件(如内核、根文件系统驱动),不启动用户会话、网络服务或图形界面。其实现依赖于 Linux 的初始化系统(Init System),而初始化系统的演进(从 SysVinit 到 Systemd)也导致了单用户模式的分类细化。

1. 传统SysVinit 和 Runlevel

在传统的 SysVinit 初始化系统(如早期的 CentOS 6、Debian 7)中,系统运行状态通过 运行级别(Runlevel) 定义,共分为 7 个级别(0-6):

Runlevel

含义

0

关机(Halt)

1

单用户模式(Single-User Mode)

2-5

多用户模式(具体取决于发行版)

6

重启(Reboot)

单用户模式对应 Runlevel 1,此时系统仅挂载根文件系统,启动 init 进程和基本 shell(如 /bin/sh),不启动网络、SSH 或其他服务。

2. Systemd 目标(Target)体系

现代 Linux 发行版(如 CentOS 7+、Ubuntu 16.04+、Debian 8+)普遍采用 Systemd 作为初始化系统。Systemd 用 目标(Target) 替代了 Runlevel,每个目标对应一组服务的集合。与单用户模式相关的目标有:

Target

含义

对应传统 Runlevel

rescue.target

救援模式:挂载所有本地文件系统,启动基本服务(如日志),允许 root 登录

Runlevel 1

emergency.target

紧急模式:仅挂载根文件系统(只读),不启动任何服务,直接进入 root shell

Runlevel 1 更精简

multi-user.target

多用户模式(无图形界面)

Runlevel 3

graphical.target

图形界面模式

Runlevel 5》

注意:日常运维中,管理员常将 rescue.target  emergency.target 统称为“单用户模式”,但两者的“精简程度”不同:rescue.target 更接近传统单用户模式,而 emergency.target 仅在 rescue.target 也无法启动时使用(如根文件系统严重损坏)。

3. 单用户模式 vs 救援模式 vs 紧急模式

为避免混淆,明确三者的核心区别:

模式

启动服务

文件系统挂载

典型用途

单用户模式

仅基础服务

根文件系统(读写)

常规维护(如密码重置)

救援模式(Systemd)

日志等核心服务

所有本地文件系统

修复配置错误、服务故障

紧急模式(Systemd)

无任何服务

根文件系统(只读)

根文件系统损坏、驱动故障

二、如何进入单用户模式

进入单用户模式的核心是修改内核启动参数,通过引导加载器(如 GRUB2)传递参数给内核,强制系统启动到指定模式。以下是主流场景的详细步骤。

1. 通过 GRUB2 引导菜单进入(通用方法)

GRUB2 是绝大多数 Linux 发行版的默认引导加载器(如 Ubuntu、CentOS、Debian)。通过 GRUB 菜单修改内核参数是进入单用户模式的标准方式:

步骤 1:重启系统并中断 GRUB 菜单

· 重启系统,在开机过程中快速按下 Esc  Shift (不同主板可能不同),直到出现 GRUB 菜单。

· 若系统默认隐藏 GRUB 菜单(如 Ubuntu),可在启动时按住 Shift 键强制显示。

步骤 2:编辑内核启动参数

·  GRUB 菜单中,使用方向键选择要启动的内核(通常是第一个选项),按 e 进入编辑模式。

· 找到以 linux  linux16 开头的行(内核参数行),末尾通常包含 ro quiet splash 等参数。

步骤 3:添加单用户模式参数

根据初始化系统(SysVinit 或 Systemd)添加不同参数:

初始化系统

目标模式

需添加的参数

示例(修改后内核行)

SysVinit

单用户模式

single  1

linux /vmlinuz-xxx ro single

Systemd

救援模式

systemd.unit=rescue.target

linux /vmlinuz-xxx ro systemd.unit=rescue.target

Systemd

紧急模式

systemd.unit=emergency.target

linux /vmlinuz-xxx ro systemd.unit=emergency.target

通用(强制 shell)

直接进入 bash

init=/bin/bash  init=/bin/sh

linux /vmlinuz-xxx ro init=/bin/bash

· redhat为例:

image.png

· centos7为例:

image.png

步骤 4:启动单用户模式

· 编辑完成后,按 Ctrl + X  F10 启动系统,内核将按修改后的参数引导至单用户模式。

· 若系统使用 LUKS 加密分区,需先在提示时输入密码解锁根分区,再进入单用户模式。

2. SysVinit 系统:使用 single 参数#

对于传统 SysVinit 系统(如 CentOS 6),除了通过 GRUB 编辑,还可在启动后通过 init 命令切换:

# 直接切换到单用户模式(需 root 权限)init 1

但此方法仅适用于系统已正常启动的场景,若系统无法启动,仍需通过 GRUB 修改参数。

3. Systemd 系统:指定救援目标(Rescue Target)#

Systemd 系统可通过 systemctl 命令切换至救援模式(需系统已启动):

# 切换到救援模式(会提示输入 root 密码)systemctl rescue

若系统无法启动,仍需通过 GRUB 修改内核参数为 systemd.unit=rescue.target

4. 特殊场景:加密分区(LUKS)系统#

若根分区使用 LUKS 加密,进入单用户模式的步骤会增加“解锁分区”环节:

1.  2.1 节步骤修改 GRUB 参数后启动,系统会先提示 Please unlock disk luks-xxx:

2. 输入 LUKS 加密密码,解锁根分区。

3. 之后系统会继续启动至单用户模式(救援模式或紧急模式)。

 

三、 常见应用场景

1. 重置root密码

root 密码丢失或遗忘时,单用户模式是最安全的重置方式:

步骤1:进入单用户模式

2.1 节步骤进入 rescue.targetSystemd)或传统单用户模式(SysVinit)。

步骤2:确认根文件系统挂载状态

部分系统(如 Systemd 紧急模式)会将根文件系统挂载为只读(ro),需先 remount 为读写(rw):

# 查看挂载状态(确认根分区是否为 ro)

mount | grep /

 

# 若为 ro,重新挂载为 rw

mount -o remount,rw /

步骤 3:重置 root 密码

使用 passwd 命令直接修改 root 密码:

passwd root

# 按提示输入新密码(无回显,输入两次确认)

 

# 创建.autorelabel文件(如果使用SELinux)

touch /.autorelabel

步骤 4:重启系统

reboot

 

2. 修复损坏的文件系统(fsck)

若系统因文件系统损坏(如意外断电)无法启动,会提示 filesystem check failed 或自动进入维护模式。此时可在单用户模式下手动运行 fsck(文件系统检查工具):

步骤 1:进入单用户模式

2.1 节步骤进入 emergency.target(文件系统损坏时,救援模式可能也无法启动,需用紧急模式)。

步骤 2:卸载目标分区(若已挂载)

fsck 需对未挂载的分区执行(或强制检查已挂载分区,但不推荐):

# 卸载根分区(若挂载为 ro,可直接执行 fsck)umount /dev/sda1  # 假设根分区为 /dev/sda1

步骤 3:运行 fsck 修复

# 检查并修复 /dev/sda1(ext4 文件系统)fsck -y /dev/sda1# 参数说明:-y 自动回答 "yes" 修复所有错误(谨慎使用,极端情况可能导致数据丢失)

步骤 4:重启验证

reboot

3. 禁用故障服务(解决启动失败)

若某服务(如 nginxdocker)因配置错误导致系统启动卡住,可在单用户模式下禁用该服务:

步骤 1:进入救援模式(Systemd)

2.1 节步骤进入 rescue.target(需加载服务管理工具)。

步骤 2:禁用问题服务

# Systemd 系统

systemctl disable nginx  

# 永久禁用 nginx 服务

systemctl mask nginx     

# 彻底屏蔽服务(防止被其他服务依赖启动)

# SysVinit 系统(如 CentOS 6)

chkconfig nginx off      # 禁用服务

步骤 3:重启验证

reboot

4. 修改错误的配置文件(如 /etc/fstab)

/etc/fstab 是文件系统挂载配置文件,若其中存在错误(如 UUID 错误、挂载点不存在),系统会启动失败并进入紧急模式。此时可在单用户模式下直接编辑该文件:

步骤 1:进入单用户模式

2.1 节步骤进入 rescue.target(需挂载根文件系统为读写)。

步骤 2:编辑 /etc/fstab

# 用 vi 或 nano 编辑(单用户模式可能仅支持 vi)vi /etc/fstab # 注释或修正错误行(如错误的 UUID 或挂载参数)# 示例:将错误行前加 # 注释# UUID=xxx /mnt/data ext4 defaults 0 0

步骤 3:重启验证

reboot

 

8455线路检测中心官网上拥有完善的技术支持库可供参考,大家可自行查阅,更多技术问题,可以直接咨询。同时,8455线路检测中心整理了运维必备的工具包免费分享给大家使用,需要的朋友可以直接咨询。

更多技术知识,8455线路检测中心期待与你一起探索。

 

 


提交成功!非常感谢您的反馈,我们会继续努力做到更好!

这条文档是否有帮助解决问题?

非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

在文档使用中是否遇到以下问题:
XML 地图