不能,因为 visudo 依赖 sudoers 语法检查器,即使 root 身份运行也会读取并校验已损坏的 /etc/sudoers,语法错误(如多 Defaults、漏引号)导致其拒绝启动。
visudo 保存失败后 sudo 不可用,还能用 su -c visudo 吗?
不能直接用
恢复——因为
本身依赖
的配置去校验语法,而保存失败通常意味着
文件已损坏或语法错误。此时
会拒绝启动,哪怕你用
切换到 root,它仍会读取并校验当前损坏的
,然后报错退出。
为什么 su -c 'visudo' 会失败?
不是普通编辑器,它会在写入前调用
语法检查器(
)。只要
存在语法错误(比如多了一个
、漏了引号、路径含空格未转义),
就会拒绝保存,也不允许你进入编辑状态——哪怕你是 root。
常见错误现象:
和
在语法校验环节行为一致,只是执行身份不同
即使你用
登录 root shell,再手动运行
,结果一样
真正能恢复的方法:绕过 visudo,直接编辑 /etc/sudoers
必须放弃
,改用基础编辑器(如
、
或
)修复文件。前提是 root 密码可用,且系统未禁用
。
先用
切到 root(输入 root 密码)
备份当前损坏文件:
用
手动删掉最后几行可疑修改,或还原到上一版(如果有
下的片段,也检查是否误删了关键行)
最保险做法:用默认最小配置覆盖(仅保留必要行):
(注意:发行版不同,组名可能是
或
)
编辑完后,用
手动验证语法:
—— 这步不打开编辑器,只做检查
如果连 su 都被禁用或 root 密码忘了怎么办?
只能进单用户模式或 recovery 模式。Ubuntu/Debian 系统在 GRUB 启动时按
,CentOS/RHEL 按
编辑内核参数,在
行末尾加
(RHEL8+)或
(旧版),然后 remount
为可写,
,再编辑
。
这个路径没有快捷方式,每一步都得手敲;而且
在 recovery 下依然会校验失败,所以还是得用
或
直接写。
最容易被忽略的一点:很多教程说「用
」,但
本身也依赖
配置里的策略,一旦主文件崩了,它大概率也失效——别指望图形环境下的替代命令能救场。
su -c visudovisudosudo/etc/sudoersvisudosu/etc/sudoersvisudosudoerssudoers_parse/etc/sudoersDefaultsvisudovisudo: >>> /etc/sudoers: syntax error near line 23 ,接着直接退出su -c visudosudo visudosu -visudovisudovisedcpsusu -cp /etc/sudoers /etc/sudoers.brokenvi /etc/sudoers/etc/sudoers.d/root ALL=(ALL:ALL) ALL
%admin ALL=(ALL) ALL
%sudo ALL=(ALL:ALL) ALLsudoadminvisudo -cvisudo -cShiftelinuxrd.breakinit=/bin/bash/sysrootchroot /sysroot/etc/sudoersvisudoviechopkexec visudopkexecsudoers