如何编辑无效的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
如何编辑无效的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
Answers:
在现代的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 一样运行程序,那么对于其中任何一种操作,在要求您输入密码之前,系统都会要求您选择要使用的帐户。)
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文件)。
#include
对sudoers
文件中的指令进行了特殊处理;#
在这种情况下,前导不会导致该行的其余部分被解释为注释。如前所述man sudoers
:“井号('#')用于表示注释(除非它是#include指令的一部分,否则除非...”),另请参见visudo:#includedir sudoers.d(来自lzone.de/博客)
pkexec visudo
要求输入密码,该密码不接受正确的密码。它将引发“ AUTHENTICATION FAILED”错误。
输入:
pkexec visudo
然后更改最后一行
#includedir /etc/sudoers
至:
#includedir /etc/sudoers.d
它应该可以解决您的问题。
#
的#includedir
原因语法错误,#
则是其中的一部分,至少在Ubuntu 12.10。
如果像我这样的人没有安装pkexec,或者无法运行vi,visudo,nano或任何其他编辑器来更改sudoers文件,则可以确定此过程。
重新安装rw的启动设备,并为用户应用exec权限,然后编辑文件
mount -n -o remount,rw /
chmod u+x /etc/sudoers
nano /etc/sudoers
解决这个错误,并开心:)
visudo
改用nano /etc/sudoers
。
如果您弄乱了sudoers
文件,则需要:
visudo
,修复文件来源:-http : //mario.net.au/content/recover-etcsudoers-ubuntu-1204
#include sudoer.d删除#include sudoer.d并没有什么问题。
但是请确保您没有任何语法错误。我遇到了同样的问题,但花了几个小时进行修复,才发现它们是语法错误。请参考手册并正确设置。
例如,说您的用户名是:doll,我用了以下哪个是错误的
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
希望这可以帮助
thunderbird
,无论如何都不应以root身份运行)在以root身份运行时将有效地赋予用户完整的系统访问权限。甚至看似简单的功能也为完全root访问打开了大门。例如,可以运行可以将文件作为root用户保存到任意位置的程序的用户可以获得完全root访问权限(他们可以安装自己的/etc/sudoers
,或者如果语法限制阻止安装,则可以自己安装/etc/crontab
)。
您也可以在grub中编辑启动项。
只需重新启动PC,然后等待grub显示。然后在“ Ubuntu”条目上按“ e”进行编辑。
查找带有“ linux =”或“ kernel =”的行,并在该行的末尾添加一个“单”。
然后按F10键启动此临时修改的启动项。这将为您提供具有根权限的Shell(无GUI),并且您可以使用s.th编辑sudoers文件。像nano / etc / sudoers一样回到原来的状态。
然后重新启动并完成。
pkexec visudo
然后恢复你的错误
visudo
必须以root用户身份运行。如果sudo
不起作用,pkexec
有时会起作用。这是我先前的答案所涵盖的内容……但这是一个正确的答案,visudo
其本身(当未以root身份运行时)将不起作用,即使他们的建议与其他答案有相当大的重叠,正确的简短答案也可能有价值。当然,如果进入恢复模式,那将是root shell,则对于诸如之类的命令既不需要sudo
也不visudo
是必需的pkexec
。也许这就是您的意思……
在VirtualBox上运行的Ubuntu 16.04(不应有所作为)中,上述方法对我不起作用(文件末尾的无效行)。起作用的是:
su -
,然后输入您自己的用户名密码即可。root@ubuntu-xenial:~#
,如果/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