我意外删除了我的 /etc/sudoers 文件

我意外删除了我的 /etc/sudoers 文件

我没有备份。

我对此非常无知,所以如果有人能为这个问题提供一份新手指南那就太好了

这是使用任何 sudo 命令时显示的错误:

sudo: unable to stat /etc/sudoers: No such file or directory
sudo: no valid sudoers sources found, quitting
sudo: unable to initialize policy plugin

我看到有人建议使用这个命令来解决这个问题:

pkexec apt-get install sudo

但当我这样做时,我得到了以下回应

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

答案1

我会清除然后重新安装 sudo。有几种方法可以做到这一点。一种是启动到实时 USB 并从那里恢复 sudoers 文件。另一种是启动到恢复模式并手动重建文件。实时 USB 选项要容易得多,但如果您无法访问实时 USB(如果您摆脱了实时 USB 并且此系统是您唯一的系统,则可能存在这种情况),则另一种选项会起作用。

首先是实时 USB 方法。插入一个实时 USB 驱动器,其 Ubuntu 版本与计算机上的版本相匹配。例如,如果您使用的是 Ubuntu 20.04,请启动 Ubuntu 20.04 实时 USB。接下来,使用 打开终端Ctrl+Alt+T

接下来,找出 Ubuntu 安装在哪个驱动器和分区。为此,请lsblk在终端中输入。这将向您显示系统中的驱动器和分区列表。您应该能够根据磁盘大小判断哪个驱动器和分区装有 Ubuntu。找到相应的分区代码(它看起来像sda1nvme0n1p1)。

现在您知道了 Ubuntu 系统的分区代码,是时候挂载它了。为此,请运行sudo mount /dev/<partition code here> /mnt,将 替换<partition code here>为您找到的分区代码lsblk。这将使您可以访问您的 Ubuntu 系统。

接下来,运行以下命令序列以在主 Ubuntu 分区内获取具有 Internet 访问权的 root shell:

sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
sudo mount --bind /dev/pts /mnt/dev/pts
sudo cp /etc/resolv.conf /mnt/etc/resolv.conf
sudo chroot /mnt

轰隆隆,root shell。现在您应该能够执行以下命令序列:

export SUDO_FORCE_REMOVE=yes
apt purge sudo
apt install sudo

完成后,关机,移除实时 USB,然后再次启动系统。如果一切顺利,您应该可以恢复正常运行。

如果您无法访问实时 USB,则可以使用恢复模式来获取 root 访问权限,以便重新安装 sudo 并重新创建文件。为此,请完全关闭计算机,然后重新打开。应显示早期启动屏幕,然后屏幕应变为纯黑色(或者您应该看到它以某种明显的方式发生变化)。发生这种情况时,点击Esc。这应该会让您进入启动菜单。(如果Esc无论如何尝试都不起作用,请尝试按住Shift。)

进入启动菜单后,选择Advanced Options for Ubuntu,然后选择列表中显示的第一个条目(recovery mode)。(如果您看不到“恢复模式”字样,只需尝试列表中的第二个选项,应该可以。)这将打开一个相当吓人的菜单。从那里,选择network启用 Internet 访问的选项,然后root使用箭头键选择该选项,按Enter,然后进入 root shell。

最后执行以下命令:

export SUDO_FORCE_REMOVE=yes
apt purge sudo
apt install sudo
reboot

这应该可以解决问题。

最后说明:虚拟机是试验系统的绝佳方式,而且不会损坏系统。如果您想尝试一些可能有危险的事情,请先在虚拟机中尝试。虚拟机中一切正常并不能保证它在您的物理系统上也能正常工作,但它可以帮助您更轻松地捕获此类问题。

答案2

另一种方式去ubuntu 软件包搜索查找适用于您版本的 sudo 软件包(在您的案例中)并下载它(使用 wget 或在您的浏览器中)并将其保存在您的 $HOME 中。在恢复中启动并获得 rootshell所以它有效,清除旧的 sudo 包,并安装使用 dpkg 下载的包。

在恢复模式下,您必须将驱动器重新安装为读/写,因为它默认为只读。为此,请在恢复模式下输入 rootshell,然后运行mount -o remount,rw /以获取读/写访问权限。

相关内容