这适用于我的 Raspberry Pi,我已在其上安装了 Raspbmc。我确实知道有一个 Raspberry Pi StackExchange 网站,但我认为在这里我可能会让更多人关注这个问题。
问题是我进行了修改/etc/sudoers
以尝试NOPASSWD
向其中一个用户授予权限,但我猜在此过程中的某个地方我搞砸了文件,现在每当我登录/尝试使用时都会出现以下错误sudo
:
sudo: parse error in /etc/sudoers near line 19
sudo: no valid sudoers sources found, quitting
sudo: unable to initialize policy plugin
我在Ubuntu也堆栈溢出,但问题是所有的答案都需要 root 密码,并且Raspbmc 上默认禁用 root 帐户,而且我显然在尝试更改之前没有启用它/etc/sudoers
。
所以我的问题是:如果我没有启用 root 访问权限,我该如何修复该文件?这可能吗?
答案1
您仍然应该能够在单用户模式下启动 Pi 来获取 root 权限。
使用另一台计算机,修改cmdline.txt
并添加single
到行尾
然后,当您从 SD 卡启动 Pi 时,它会自动将您转储到 root 提示符,这将允许您更新/etc/sudoers
答案2
经过两天的研究和浏览网页,我终于找到了解决方案,并且能够保存我自己的 Raspberry Pi 系统(不必重新格式化 SD 卡并从头开始)!
笔记:这个答案相当长。如果你想快速找到实际的解决方案,我添加了一个标题,你可以向下滚动到它。不过,我建议你阅读整个答案,因为它可能会让你了解 Raspbian 发行版与其他 Linux 发行版之间的差异,并让你明白为什么你在互联网上找到的许多建议解决方案可能不适用于你的 Pi。
因此,通常在 Linux 环境中,无需重新启动即可修复损坏的 sudo 的最快方法是使用 PolicyKit 或 -command,pkexec
如下所示:
pkexec visudo
但在 Pi 上,它很可能不起作用,它会要求输入 root 密码,但不接受任何密码。(我的意思是,您还记得设置 root 密码吗?等一下,您记得吗?然后跳到星号*。)
一些 Linux 发行版(例如 Ubuntu)带有恢复模式,可以通过在启动时按住 Shift 键来访问,并提供用户友好的界面,并允许将用户放入 root shell 提示符中,以便访问并修复损坏的文件。Pi 的 Raspbian Linux 发行版没有这种恢复模式,因此该解决方案对我们来说不是解决方案。然而,Pi 确实会在启动时提示您按住 Shift 键以进入某种恢复模式,通过进入 Pi 的恢复模式或 NOOBS 对话框,我们肯定可以修复 Pi 上损坏的 sudo。
修复 sudo 的另一种常见方法是启动单用户模式,这样您就可以进入 root shell 提示符。执行此操作的方法是将单词添加single
到系统启动分区上的 -file 末尾cmdline.txt
。下次系统启动时,它将启动到单用户模式。
我们可以轻松地在 Pi 上尝试此解决方案,因为 Pi 的恢复模式或 NOOBS 对话框允许我们编辑文件cmdline.txt
。在恢复模式或 NOOBS 对话框中,通过按“编辑配置”图标,您可以打开一个编辑器,该编辑器允许您编辑两个文件,其中一个是cmdline.txt
。通过在编辑器中按“确定”,您的更改将被保存。
不幸的是,当你在 Pi 上启动单用户模式或“救援模式”时,你很可能会收到以下消息:
Cannot open access to console, the root account is locked.
See sulogin(8) man page for more details.
Press Enter to continue.
这(以及前面提到的 root 密码提示不接受任何密码的原因)是因为 Raspbian 默认没有为 root 帐户设置密码。这与没有密码或不需要密码不同。Raspbian 与其他一些 Linux 发行版(例如 Debian,Raspbian 是其衍生产品)一样,要求用户通过 sudo 以 root 身份操作,而不是通过帐户本身。因此,root 帐户处于我们所经历的“锁定”状态。
*如果您自己设置了 root 密码,例如通过命令sudo passwd root
,那么您应该能够使用pkexec
-command 并启动到单用户模式。请注意,执行此操作时,您需要使用 sudo,因此一旦 sudo 损坏,这显然不是一个解决方案,但我指出这一点是因为这可能就是为什么有些人在应用建议使用 -commandpkexec
或单用户模式的解决方案时成功修复了他们的 Pi。这些人曾经手动设置过 root 密码,解锁了系统的 root 帐户。
解决方案
这篇博文解释了如何做我们需要做的事情。这些步骤与我们尝试通过单用户模式修复 sudo 时所采取的步骤几乎相同。您不必执行博客文章中提到的所有繁琐的操作来编辑 -file cmdline.txt
,而只需在 NOOBS 对话框中执行即可。关键是添加到-fileinit=/bin/sh
的末尾cmdline.txt
。添加该代码片段后,下次启动 Pi 时,您将进入 root shell 提示符。
最初,文件系统将以只读模式加载,因此在能够编辑任何内容之前,您必须通过执行以下命令以读写模式重新挂载根分区:
mount -o remount,rw /dev/mmcblk0p2 /
现在您应该处于 root shell 提示符下,您可以自由编辑任何文件,包括损坏的 sudo 文件。
答案3
最简单的解决方案是在 LiveDVD 或 LiveUSB 上启动另一个操作系统(最好是 LiveUSB,最好是 Linux 操作系统),然后安装光盘并手动更改文件。我以前做过类似的事情,并以这种方式修复了它。您的所有文件都将在 Live 系统中可见且可编辑。除非您已加密驱动器;这会使事情变得有点复杂。
如果您有任何疑问,请告诉我,我会编辑这个答案 - 我不确定您对设置实时 USB 的熟悉程度,但这不太难。