意外删除了 /etc/sudoers 文件

Avi*_*Raj 4 sudo

尝试更新我的存储库时出现以下错误,

avinash@avinash-VirtualBox:~$ sudo apt-get update
sudo: unable to stat /etc/sudoers: No such file or directory
sudo: no valid sudoers sources found, quitting
sudo: unable to initialize policy plugin
Run Code Online (Sandbox Code Playgroud)

好像我不小心删除了我的/etc/sudoers文件。/etc/sudoers文件实际上属于sudo包,所以我尝试重新安装sudopkexec但它不起作用。

avinash@avinash-VirtualBox:~$ pkexec apt-get install sudo
Reading package lists... Done
Building dependency tree       
Reading state information... Done
sudo is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 301 not upgraded.
1 not fully installed or removed.
After this operation, 0 B of additional disk space will be used.
Do you want to continue [Y/n]? y
Setting up sudo (1.8.6p3-0ubuntu3.1) ...
WARNING:  /etc/sudoers not present!
chown: cannot access ‘/etc/sudoers’: No such file or directory
dpkg: error processing sudo (--configure):
 subprocess installed post-installation script returned error exit status 1
Errors were encountered while processing:
 sudo
E: Sub-process /usr/bin/dpkg returned an error code (1)
avinash@avinash-VirtualBox:~$ 
Run Code Online (Sandbox Code Playgroud)

而且我也试过,

avinash@avinash-VirtualBox:~$ pkexec apt-get install --reinstall sudo
Reading package lists... Done
Building dependency tree       
Reading state information... Done
0 upgraded, 0 newly installed, 1 reinstalled, 0 to remove and 301 not upgraded.
1 not fully installed or removed.
After this operation, 0 B of additional disk space will be used.
E: Internal Error, No file name for sudo:amd64
Run Code Online (Sandbox Code Playgroud)

我怎样才能让 sudo命令再次工作?

Rad*_*anu 6

在我备份/etc/sudoers文件后:

sudo mv /etc/sudoers{,.bak}
Run Code Online (Sandbox Code Playgroud)

我遇到了与您的情况相同的错误。

如果你使用

pkexec apt-get install sudo
Run Code Online (Sandbox Code Playgroud)

不会工作,因为apt-get会看到:

sudo is already the newest version.
Run Code Online (Sandbox Code Playgroud)

如果您使用:

pkexec apt-get install --reinstall sudo
Run Code Online (Sandbox Code Playgroud)

也不会工作,因为/etc/sudoers找不到文件被删除和替换。

但是如果你使用:

pkexec apt-get purge sudo
pkexec apt-get install sudo
Run Code Online (Sandbox Code Playgroud)

这个答案中所述,一切都会像魅力一样工作。我可以这样说,因为我只是再次测试它。

因此,浪费时间并使用活动磁盘启动系统是没有意义的。


Avi*_*Raj 4

只需从 Ubuntu live disk 启动并将/etc/sudoers文件复制到已安装的 Ubuntu 分区的/etc目录即可。

  • 启动 Ubuntu live dis 并在启动时单击尝试 Ubuntu 选项。

  • 运行sudo blkid命令来了解已安装的 Ubuntu 的分区 ID。

  • 将已安装的 Ubuntu 分区挂载到特定目录,如下所示,

    sudo mkdir /media/foo
    sudo mount /dev/sdaX /media/foo     # /dev/sdaX installed Ubuntu's partition id.
    
    Run Code Online (Sandbox Code Playgroud)
  • 现在将 live 磁盘的sudoers文件复制到/etc安装的 Ubuntu 分区的目录中。

    sudo cp /etc/sudoers /media/foo/etc
    
    Run Code Online (Sandbox Code Playgroud)
  • 现在从硬盘启动(启动你的 Ubuntu 操作系统)。它会起作用。