我该如何编辑无效的 sudoers 文件?它会引发以下错误,并且不允许我再次编辑来修复它。
事情的经过如下:
$ sudo visudo
>>> /etc/sudoers: syntax error near line 28 <<<
sudo: parse error in /etc/sudoers near line 28
sudo: no valid sudoers sources found, quitting
答案1
在现代 Ubuntu 系统(以及许多其他 GNU/Linux 发行版)上,修复损坏的sudoers
文件实际上非常容易,并且不需要重新启动、使用实时 CD 或物理访问机器。
要通过 SSH 执行此操作,请登录到计算机并运行命令pkexec visudo
。如果您可以物理访问该计算机,则不需要 SSH;只需打开终端窗口并运行该pkexec
命令即可。
假设你(或其他用户)被授权使用root
PolicyKit 来运行程序,你可以输入你的密码,然后它将visudo
作为运行root
,然后你就可以修复你的/etc/sudoers
。
如果您需要编辑其中一个配置文件/etc/sudoers.d
(在这种情况下并不常见,但有可能),请使用。pkexec visudo -f /etc/sudoers.d/filename
如果您遇到相关情况,需要以 root 身份执行其他系统管理命令来解决问题(在这种情况下也不常见,但在其他情况下很常见),您可以使用 启动交互式 root shell pkexec bash
。一般来说,您运行的任何非图形命令sudo
都可以改为运行pkexec
。
(如果系统上有多个用户帐户被授权运行程序,就像root
PolicyKit 一样,那么对于任何操作,你都会被要求选择要使用哪一个,然后再被要求输入密码。)
如果这不起作用(例如,如果没有用户通过 PolicyKit 获得以 root 身份运行程序的授权),则从 Ubuntu Live CD(例如您可能用来安装 Ubuntu 的 CD)启动并为已安装的系统安装文件系统。您可以通过运行
sudo parted -l
查看分区来执行此操作——可能只有一个 ext4 分区,那就是根文件系统。
假设已安装的 Ubuntu 系统的根文件系统位于/dev/sda1
。那么您可以使用 挂载它sudo mount /dev/sda1 /mnt
。然后您可以使用 编辑已安装系统的 sudoers 文件sudo nano -w /mnt/etc/sudoers
。或者,更好的是,您可以使用 编辑它
sudo visudo -f /mnt/etc/sudoers
(这将阻止您保存具有不正确语法的 sudoers 文件)。
答案2
始终使用visudo
编辑 sudoers 文件,切勿直接自行编辑。除非验证成功,否则它将阻止您将其保存到磁盘。
答案3
输入:
pkexec visudo
然后改变最后一行
#includedir /etc/sudoers
到:
#includedir /etc/sudoers.d
它应该可以解决你的问题。
答案4
如果其他人像我一样没有执行命令安装,或者无法运行 vi、visudo、nano 或任何其他编辑器来更改 sudoers 文件,您可以通过这个过程来确保..我被保存了:
- 重启
- 启动时按住 Shift 键以选择恢复模式(输入)
- 以 root 身份进入命令行(我的 grub 菜单中的倒数第二个选项)
重新挂载启动设备为 rw,并为用户应用执行权限,并编辑文件
mount -n -o remount,rw / chmod u+x /etc/sudoers visudo /etc/sudoers
改正错误,开心就好:)