sudoers 配置语法错误导致所有用户 sudo 失效的 recovery 单用户模式

18次阅读

当 /etc/sudoers 语法错误时,sudo 命令全部失效,需进 GRUB 单用户模式修复:按 Shift/Esc 调出菜单→e 编辑→linux 行尾加 init=/bin/bash→Ctrl+ X 启动→mount -o remount,rw /visudo -c 定位错误→vi 修正→exec /sbin/reboot -f 重启验证。

sudoers 配置语法错误导致所有用户 sudo 失效的 recovery 单用户模式

/etc/sudoers 文件语法错误时,sudo 会直接拒绝执行任何命令(包括 sudo susudo -i),所有普通用户将无法提权——但系统仍可正常启动和登录。此时需进入单用户模式(recovery mode)修复。

进入 GRUB 单用户模式(以 Ubuntu/Debian 为例)

重启机器,在 GRUB 启动菜单出现时按 Shift(BIOS)或 Esc(UEFI)调出菜单;用方向键选中当前内核条目,按 e 编辑启动参数;找到以 linux 开头的行,在行尾空格后添加:

  • init=/bin/bash(推荐,直接启动 bash,绕过 init 系统)
  • rd.break(RHEL/CentOS 8+)
  • systemd.unit=rescue.target(较新 systemd 系统,需 root 密码)

编辑完按 Ctrl+XF10 启动。若使用 init=/bin/bash,将直接进入 root shell,但根文件系统默认为只读。

重新挂载根分区为可写

执行以下命令(必须做,否则无法保存修复):

mount -o remount,rw /

验证是否成功:

mount | grep "/"

输出中应含 rw(而非 ro)。

修复 sudoers 文件

运行语法检查并定位错误:

visudo -c

它会提示具体行号和错误类型(如 syntax error near line 25)。常见错误包括:

  • 漏掉 Defaults 或用户别名后的等号(如 Defaults env_reset 写成 Defaults env_reset 没问题,但写成 Defaults env_reset = 就错)
  • 权限行末尾多加逗号、分号或引号不匹配
  • 使用了未定义的别名(如 %webadmins ALL=(ALL) /usr/bin/systemctl,但没定义 %webadmins

vinano 编辑修复:

vi /etc/sudoers

⚠️ 务必用 visudo(而非直接 vim)编辑,因为它自带语法锁和自动备份;但单用户下 visudo 可能依赖终端环境,若报错可先用 vi 手动修正,再用 visudo -c 验证。

重启并验证

修复完成后,执行:

exec /sbin/init

或直接:

exec /sbin/reboot -f

系统重启后,用普通用户运行 sudo -lsudo whoami 测试是否恢复。

text=ZqhQzanResources