进单用户模式后/仍是只读,需先remount为rw再visudo修复:Ubuntu加init=/bin/bash后执行mount -o remount,rw /,RHEL加rd.break后chroot并remount;必须用visudo校验语法,检查include文件及权限(0440),最后visudo -c确认parsed OK。

进单用户模式后 / 仍是只读,直接 visudo 会失败
现代发行版(Ubuntu 22.04+、RHEL 8/9)默认以只读方式挂载根文件系统,哪怕进了 GRUB 单用户模式,/ 仍是 ro。此时运行 visudo 会报错:Read-only file system,连临时文件都写不进去。
必须先手动 remount 为读写:
- Ubuntu/Debian 系:启动时按
e编辑 GRUB 启动项,在linux行末尾加init=/bin/bash→Ctrl+X启动 → 执行mount -o remount,rw / - RHEL/CentOS 系:同样按
e,在linux行末尾加rd.break→Ctrl+X→ 进入 initramfs 后执行switch_root /sysroot /bin/bash→ 再执行mount -o remount,rw / - 验证是否成功:
touch /etc/test && rm /etc/test,无报错即 OK
用 visudo 而不是 vim 直接改 /etc/sudoers
visudo 的核心价值不是“打开编辑器”,而是在保存前自动调用 sudoers -c 做语法校验。直接 vim /etc/sudoers 改完一保存,如果第 42 行漏了个冒号,重启就再次锁死——你刚修好的系统又进不去了。
常见低级错误包括:
-
%wheel ALL=(ALL) NOPASSWD:ALL写成%wheel ALL=(ALL NOPASSWD:ALL)(括号位置错) - 别名定义漏前缀,比如写了
REBOOT = /sbin/reboot,但没加Cmnd_Alias - 用户行末尾多了一个空格或不可见的 BOM 字符(尤其从 Windows 复制过来时)
如果系统没装 vim,visudo 可能 fallback 到 vi 或 nano;可提前设 export EDITOR=/bin/nano 避免卡在 vi 模式。
修复后必须单独检查 include 的外部文件
/etc/sudoers 里只要有一行 #includedir /etc/sudoers.d 或 #include /etc/sudoers.local,这些被包含的文件就参与语法解析。主文件修好了,/etc/sudoers.d/01-custom 里一个拼写错误照样让 sudo 全局报 parse error。
排查步骤:
- 运行
visudo -c -f /etc/sudoers.d/01-custom(注意:老版本用visudo -c -f,新版本用sudoers -c -f) - 若报错,临时重命名可疑文件:
mv /etc/sudoers.d/01-custom /etc/sudoers.d/01-custom.bak - 再跑
visudo -c看是否通过;通过后再逐个恢复、单独校验 - 所有 sudoers 相关文件权限必须是
root:root且 ≤0440,否则visudo -c会警告并拒绝加载
重启前别跳过 visudo -c 手动验证
改完保存退出 visudo 后,它会自动做一次语法检查,但这个检查可能因终端环境异常而静默失败。务必手动再跑一遍:visudo -c。只有输出明确的 sudoers file parsed OK,才算真正安全。
真正容易被忽略的是:修复完主文件、也确认了 /etc/sudoers.d/ 下所有文件都没问题,却忘了检查文件编码或换行符。一个带 UTF-8 BOM 的 .sudoers.d 文件,在部分系统上不会报语法错,但会导致规则完全不生效——sudo -l 显示为空,日志里只写 user not in sudoers,让人误以为是配置没加对。











