WSL 上的 Sudoers 文件语法错误

WSL 上的 Sudoers 文件语法错误

所以,我搞乱了 Linux 的 Windows 子系统中的 sudoers 文件。我试图添加一些内容,教程的作者说用 nano/vim 编辑 sudoers 文件,我就是这么做的(后来我发现你只能用 visudo 编辑它,太好了)。当我保存时,我意识到我不能再使用“sudo”了,终端会抱怨说:

>>> /etc/sudoers: syntax error near line 33 <<<
sudo: parse error in /etc/sudoers near line 33
sudo: no valid sudoers sources found, quitting
sudo: unable to initialize policy plugin

我读过很多文章说我必须跑步:

pkexec /usr/sbin/visudo

但结果总是一样的:

Error getting authority: Error initializing authority: Could not connect: No such file or directory

我尝试了所有方法,花了大约两个小时阅读资料,但什么也没做。有人能帮助我吗?正如你所见,在真正的 Linux 方面我显然是个新手。

答案1

我发现了一个针对我的情况的相当简单的解决方案。

只需打开 Windows 控制台(cmd),然后:

wsl -u root visudo

并修复文件。

请注意,visudo无法捕获所有错误。为避免被锁定,请在彻底测试新配置之前sudo保持 root shell ( sudo -s) 或打开。visudo

答案2

由于该命令不起作用,因此wsl -u root visudo我使用了以下替代方法:

我按照以下说明将默认用户更改为 root这个答案

ubuntu config --default-user root

然后重新启动LxssManager服务(从 services.msc)

当我打开 WSL 时,默认以 root 身份连接,并且我可以安全地visudo从该 WSL 实例执行命令。

我更正了错误的条目并保存了它。

修正后,我的 WSL 启动正常。

为了以防万一,这里是sudoers我一开始的默认文件:

#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults    env_reset
Defaults    mail_badpass
Defaults    secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification
%sudo ALL=NOPASSWD: /sbin/start-stop-daemon
%sudo ALL=NOPASSWD: /etc/init.d/ssh

# User privilege specification
root    ALL=(ALL:ALL) ALL

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d

一些条目可能已通过“apt install”命令添加。

操作完成后别忘了切换回原用户:

ubuntu1804.exe config --default-user <username>

该命令ubuntu1804.exe可以适应您的发行版(20.04,其他 Linux 等...)

答案3

关闭 WSL 终端,打开 Windows 命令提示符,并使用以下命令将默认 WSL 用户设为 root

ubuntu2004 config --default-user root

打开一个新的 WSL 终端,您将以 root 身份登录。输入

nano /etc/sudoers

现在您可以编辑 sudoers 文件了。干杯!

额外:ubuntu1804 config --default-user root适用于 Ubuntu 18.04 及以上版本或ubuntu config --default-user root以下版本。

相关内容