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 时,我仍然遇到相同的错误。
我已经阅读了很多关于这个问题的可怕的东西。那么你能帮我解决这个问题吗?我将非常感谢您的建议。
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
走感到满意,那也能行。
init=/bin/bash
现在您将被放入具有 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
,然后我在与我们刚才设置的新密码登录根。
我们只需要重新安装sudo
软件包,但是重新安装不会恢复此文件,我们也应该告诉dpkg
修复丢失的配置文件,如下所示:
apt-get -o Dpkg::Options::="--force-confmiss" install --reinstall sudo
Run Code Online (Sandbox Code Playgroud)
请记住,它会/etc/sudoers
通过插入y
say 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。