如何修改无效的’/ etc / sudoers’文件?

如何编辑无效的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 

在现代的Ubuntu系统(以及许多其他GNU / Linux发行版)上,修复损坏的sudoers文件实际上非常简单,并且不需要重新启动,使用Live CD或对计算机进行物理访问。

要通过SSH执行此操作,请登录计算机并运行命令pkexec visudo 。 如果您可以物理访问机器,则不需要SSH; 只需打开一个终端窗口并运行该pkexec命令。

假设您(或其他一些用户)被授权以PolicyKit的root身份运行程序,您可以输入您的密码,然后它将以root身份运行visudo ,您可以修复/etc/sudoers

如果您需要编辑/etc/sudoers.d一个配置文件(在这种情况下很常见,但可能),请使用pkexec visudo -f /etc/sudoers.d/ filename

如果您遇到相关情况,您必须以root身份执行其他系统管理命令来解决问题(在这种情况下也很常见,但在其他情况下很常见),您可以使用pkexec bash启动交互式root shell。 一般来说,您使用sudo运行的任何非图形命令都可以使用pkexec运行。

(如果系统上有多个用户帐户授权以PolicyKit的root身份运行程序,那么对于任何这些操作,在被要求输入密码之前,系统会要求您选择要使用的用户帐户。)


如果这不起作用 – 例如,如果没有授权用户通过PolicyKit以root身份运行程序 – 那么从Ubuntu live CD(比如你可能用来安装Ubuntu的CD)启动并挂载文件系统安装系统。 你可以通过运行sudo parted -l来查看你的分区 – 可能只有一个ext4分区,那就是根文件系统。

假设安装的Ubuntu系统的根文件系统在/ dev / sda1上。 然后你可以用sudo mount /dev/sda1 /mnt挂载它。 然后,您可以使用sudo nano -w /mnt/etc/sudoers编辑已安装系统的sudoers文件。 或者,更好的是,您可以使用它进行编辑

 sudo visudo -f /mnt/etc/sudoers 

(这将阻止您使用不正确的语法保存sudoers文件)。

始终使用visudo编辑您的sudoers文件,不要自己直接编辑它。 它会阻止您将其保存到磁盘,除非它validation。

输入:

 pkexec visudo 

然后改变最后一行

 #includedir /etc/sudoers 

至:

 #includedir /etc/sudoers.d 

它应该解决你的问题。

如果像我这样的其他人没有安装pkexec ,或者无法运行vi,visudo,nano或任何其他编辑器来更改sudoers文件,你可以肯定这个过程..我得到了这样的保存:

  • 重启
  • 启动时按住shift键可以选择恢复模式(输入)
  • 以root身份输入命令行(我的grub菜单中的倒数第二个选项)
  • 为rw重新启动启动设备,并为用户应用exec,并编辑文件

     mount -n -o remount,rw / chmod u+x /etc/sudoers nano /etc/sudoers 

修复那个错误并开心:)

没有什么不对#include sudoer.d删除#include sudoer.d不会有任何区别。

但请确保您没有任何语法错误。 我有同样的问题,但花了几个小时修复,只是发现它们是语法错误。 请参阅手册并使其正确。

例如,假设您的用户名是:dolly我使用了以下哪个是错误的

  dolly ALL = (ALL) ALL NO PASSWD: ALL 

正确的语法是

 dolly ALL = (ALL) ALL //give permission to everything, not good 

要么

 dolly ALL=(ALL) NOPASSWD:/usr/bin/thurderbird //good, give specific permission 

希望这可以帮助

如果你弄乱了你的sudoers文件,你需要:

  • 重启进入恢复模式(在启动时点击退出,在grub屏幕上选择恢复模式选项)
  • 选择“启用网络”选项(如果不是,您的文件系统将以只读方式挂载。谁知道)
  • 选择’Drop to root shell’选项
  • 运行visudo ,修复你的文件
  • 使用普通grub选项重新启动

来源: – http://mario.net.au/content/recover-etcsudoers-ubuntu-1204

运行恢复模式然后键入此

  chown -R root:root /etc/sudoers.d
 chmod u = rwx,g = rx,o = rx /etc/sudoers.d/
 chmod u = r,g = r,o = /etc/sudoers.d/* 

只有组和用户root才能读取privelege

您也可以在grub中编辑引导条目。

只需重启你的电脑,等待grub显示。 然后按“Ubuntu”条目上的“e”进行编辑。

查找带有“linux =”或“kernel =”的行,只需在该行的末尾添加“single”即可。

然后按F10启动此临时修改的启动项。 这将为您提供具有root权限的shell(无GUI),您可以使用s.th编辑sudoers文件。 像nano / etc / sudoers回到之前的状态。

然后重启并完成。

您也可以使用Ctrl + FnFn从1到6)以root身份在tty控制台上登录并运行visudo

 pkexec visudo 

然后还原你的错误

我发现了这个bug。 它位于默认的/etc/sudoers文件的最后两行中。 使用visudo从/ etc / sudoers文件的末尾删除以下条目。

 #includedir /etc/sudoers.d 

在运行VirtualBox的Ubuntu 16.04中(应该没什么区别),上面的方法对我来说不起作用(文件末尾的行无效)。 工作是什么:

  1. 重新启动VirtualBox
  2. 让它正常启动,直到它在控制台中询问您的用户名和密码
  3. 通常使用您的用户名登录
  4. 然后当你最终进入控制台时(如果你的盒子没有启动到GUI),只需给出命令su -然后给你自己的用户名密码。
  5. 它现在应该以root@ubuntu-xenial:~# prompt结束,如果/etc/sudoers没有太破或空。 不确定那种情况会发生什么。
  6. 然后你可以简单地运行visudo并修复文件。
  7. 然后Ctrl + X ,它将提示保存修改后的缓冲区。 按YEnter
  8. 重新启动框,它现在应该工作。

如果您的/etc/sudoers是空的或缺少某些东西,并且您可以编辑它,那么这是我的内容:

 Defaults env_reset Defaults mail_badpass Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin" root ALL=(ALL:ALL) ALL %admin ALL=(ALL) ALL %sudo ALL=(ALL:ALL) ALL