无法统计 /etc/sudoers: 没有这样的文件或目录

Cas*_*sie 7 permissions command-line sudo

我最近才使用 Ubuntu 14.04。不知何故,我更改了/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
Run Code Online (Sandbox Code Playgroud)

我能够以用户身份登录并更改权限。所以现在当我运行ls -l /etc/sudoers命令时,我得到:

-r--r----- 1 root root 755 ??? 14  2016 /etc/sudoers
Run Code Online (Sandbox Code Playgroud)

但我无法让 root 成为所有者。当我尝试使用 sudo 时,我仍然遇到相同的错误。

我已经阅读了很多关于这个问题的可怕的东西。那么你能帮我解决这个问题吗?我将非常感谢您的建议。

Rav*_*ina 9

捷径:

dpkg-reconfigure: 如果/etc/sudoers文件权限有问题,以root权限运行:dpkg-reconfigure sudo。像pkexec dpkg-reconfigure sudo应该做的工作。

visudo:如果dpkg-reconfigure对您不起作用,则只需运行pkexec visudo,该sudoers文件将在编辑器中打开,然后保存并关闭该文件,visudo将为您修复权限。

毕竟,如果您也更改了sudoers.d目录权限,请运行:

pkexec chmod 755 /etc/sudoers.d
Run Code Online (Sandbox Code Playgroud)

如果文件在那里,并且它们的权限应该是这样,但您仍然收到此错误消息,我想到的唯一可能性是您破坏了其他权限并且sudo无法访问/etc/sudoers. 最可能的猜测是/etc/.

所以运行:

pkexec chmod 755 /etc
Run Code Online (Sandbox Code Playgroud)

我们已经完成了,但是如果您想要详细的说明来恢复损坏或删除的sudoers文件,并且权限混乱,我们将使用另一种方法来解决问题。


介绍

我把我的/etc/sudoers文件弄乱了,得到了和你类似的错误。我非常接近,所以我完全删除了我的,它变得和你的完全一样。

我为解决这个问题所做的工作:

我的root账户被锁了,而且没有密码,所以我无法做我想做的事。但是,如果您的 root 帐户处于活动状态并且有密码,请切换到 root 用户su -并跳过此部分。如果没有,请按照说明操作。

在进一步讨论之前,我必须提到您始终可以使用活动磁盘对chroot您的系统进行操作,有很多关于使用活动磁盘的 chroot 的说明,因此我不会再费心提供所有这些说明,相反,我将假设我们没有任何活动磁盘,我们将使用我们已有的磁盘来解决此问题。如果你对那样cheroot走感到满意,那也能行。


获取根访问权限

  • 重新启动系统
  • 当 grub 出现时按下e编辑它
  • 在以 linux 开头的行的末尾,添加 init=/bin/bash
  • CTRL+X

现在您将被放入具有 root 访问权限的 bash shell。首先重新挂载具有写访问权限的文件系统:

mount -o remount,rw /
Run Code Online (Sandbox Code Playgroud)

然后解锁root用户并在其上设置密码:

passwd -u root
passwd root
Run Code Online (Sandbox Code Playgroud)

现在,如果您/etc/sudoers仍然存在于/etc,请将其移至其他地方:

mv /etc/sudoers /etc/sudoers.broken
Run Code Online (Sandbox Code Playgroud)

因为我们要告诉我们的包管理器这个文件丢失了,它会为我们替换一个正确的文件,所以它不应该在那里。

我们快完成了,重新启动您的系统。以普通用户身份登录,打开终端,然后尝试su -切换到 root 用户。我是不是能够做到这一点,所以我一直在使用做CTRL+ ALT+ F1,进入tty1,然后我在与我们刚才设置的新密码登录根。


把sudoers带回来

我们只需要重新安装sudo软件包,但是重新安装不会恢复此文件,我们也应该告诉dpkg修复丢失的配置文件,如下所示:

apt-get -o Dpkg::Options::="--force-confmiss" install --reinstall sudo
Run Code Online (Sandbox Code Playgroud)

请记住,它会/etc/sudoers通过插入ysay yes来询问您是否安装文件。

如果它不适合您,请以 root 身份执行以下操作:

mkdir /root/tmp
cd /root/tmp
apt-get download sudo
dpkg-deb -x sudo*.deb .
cp etc/sudoers /etc/sudoers
cd /root
rm -r tmp
Run Code Online (Sandbox Code Playgroud)

现在权限之间可能有一些不同,运行dpkg-reconfigure sudo以修复它。如果它不起作用,visudo以root用户身份运行,sudoers文件将在编辑器中打开,然后保存并关闭文件,visudo将为您修复权限。

如果一切顺利,您的 sudoers 文件将返回,您将能够像以前一样使用 sudo。