如何修改无效的’/ 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 + Fn ( Fn从1到6)以root身份在tty
控制台上登录并运行visudo
。
pkexec visudo
然后还原你的错误
我发现了这个bug。 它位于默认的/etc/sudoers
文件的最后两行中。 使用visudo
从/ etc / sudoers文件的末尾删除以下条目。
#includedir /etc/sudoers.d
在运行VirtualBox的Ubuntu 16.04中(应该没什么区别),上面的方法对我来说不起作用(文件末尾的行无效)。 工作是什么:
- 重新启动VirtualBox
- 让它正常启动,直到它在控制台中询问您的用户名和密码
- 通常使用您的用户名登录
- 然后当你最终进入控制台时(如果你的盒子没有启动到GUI),只需给出命令
su -
然后给你自己的用户名密码。 - 它现在应该以
root@ubuntu-xenial:~#
prompt结束,如果/etc/sudoers
没有太破或空。 不确定那种情况会发生什么。 - 然后你可以简单地运行
visudo
并修复文件。 - 然后
Ctrl + X
,它将提示保存修改后的缓冲区。 按Y
和Enter
- 重新启动框,它现在应该工作。
如果您的/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