Wie repariere ich eine ungültige /etc/sudoers-Datei, wenn der Root-Zugriff deaktiviert ist?

Wie repariere ich eine ungültige /etc/sudoers-Datei, wenn der Root-Zugriff deaktiviert ist?

Dies betrifft meinen Raspberry Pi, auf dem ich Raspbmc installiert habe. Mir ist zwar bewusst, dass es eine Raspberry Pi StackExchange-Site gibt, aber ich dachte, dass ich hier mehr Aufmerksamkeit auf dieses Problem lenken könnte.

Das Problem besteht darin, dass ich Änderungen vorgenommen habe /etc/sudoers, um NOPASSWDeinem der Benutzer Berechtigungen zu erteilen. Ich schätze aber, dass ich dabei irgendwo die Datei vermasselt habe und jetzt jedes Mal, wenn ich mich anmelde bzw. versuche, sie zu verwenden, die folgende Fehlermeldung erhalte sudo:

sudo: parse error in /etc/sudoers near line 19
sudo: no valid sudoers sources found, quitting
sudo: unable to initialize policy plugin

Ich habe ähnliche Beiträge gefunden aufUbuntusowiePaketüberfluss, aber das Problem ist, dass alle Antworten ein Root-Passwort erfordern, und dieDas Root-Konto ist auf Raspbmc standardmäßig deaktiviert, und ich hatte es offensichtlich nicht aktiviert, bevor ich versucht habe, es zu ändern /etc/sudoers.

Meine Frage lautet also: Wie repariere ich die Datei, wenn ich keinen Root-Zugriff aktiviert habe? Ist das überhaupt möglich?

Antwort1

Sie sollten den Pi weiterhin im Einzelbenutzermodus starten können, um Root-Zugriff zu erhalten.

Ändern Sie auf einem anderen Computer cmdline.txtund fügen Sie singleam Ende der Zeile hinzu
. Wenn Sie den Pi dann von der SD-Karte booten, sollte er Sie automatisch zu einer Root-Eingabeaufforderung führen, die Ihnen das Aktualisieren ermöglicht./etc/sudoers

Antwort2

Nach zwei Tagen der Recherche und des Surfens im Internet habe ich endlich eine Lösung gefunden und konnte mein eigenes Raspberry Pi-System retten (ohne die SD-Karte neu formatieren und von vorne beginnen zu müssen)!

NOTIZ:Diese Antwort ist ziemlich lang. Wenn Sie schnell zur eigentlichen Lösung gelangen möchten, habe ich eine Überschrift hinzugefügt, zu der Sie nach unten scrollen können. Ich empfehle Ihnen jedoch, die gesamte Antwort zu lesen, da sie Ihnen möglicherweise einen Einblick in die Unterschiede zwischen der Raspbian-Distribution und anderen Linux-Distributionen sowie Klarheit darüber gibt, warum viele der im Internet vorgeschlagenen Lösungen auf Ihrem Pi möglicherweise nicht funktionieren.

Normalerweise lässt sich in einer Linux-Umgebung das beschädigte Sudo am schnellsten reparieren, ohne dass ein Neustart erforderlich ist, indem Sie PolicyKit oder den pkexec-Befehl wie folgt verwenden:

pkexec visudo

Aber auf dem Pi wird es höchstwahrscheinlich nicht funktionieren. Es wird nach dem Root-Passwort gefragt, aber es wird kein Passwort akzeptiert. (Ich meine, können Sie sich überhaupt daran erinnern, ein Root-Passwort festgelegt zu haben? Moment, Sie können es? Dann springen Sie zum Sternchen*.)

Einige Linux-Distributionen, beispielsweise Ubuntu, verfügen über einen Wiederherstellungsmodus, der durch Gedrückthalten der Umschalttaste während des Hochfahrens aufgerufen werden kann. Er bietet eine benutzerfreundliche Oberfläche und ermöglicht es, in eine Root-Shell-Eingabeaufforderung zu gelangen, wo man Zugriff erhält, um die beschädigten Dateien zu reparieren. Die Raspbian-Linux-Distribution des Pi verfügt nicht über einen solchen Wiederherstellungsmodus, daher ist diese Lösung für uns keine Lösung. Der Pi fordert Sie jedoch beim Hochfahren auf, die Umschalttaste gedrückt zu halten, um in eine Art Wiederherstellungsmodus zu wechseln, und indem wir den Wiederherstellungsmodus des Pi oder den NOOBS-Dialog aufrufen, sind wir sicherlich auf dem richtigen Weg, um das beschädigte Sudo auf unserem Pi zu reparieren.

Eine weitere gängige Methode zum Reparieren von sudo ist das Booten im Einzelbenutzermodus, wodurch Sie zu einer Root-Shell-Eingabeaufforderung gelangen. Dies erreichen Sie, indem Sie das Wort singlean das Ende der cmdline.txt-Datei auf der Bootpartition des Systems anhängen. Beim nächsten Booten Ihres Systems wird es im Einzelbenutzermodus booten.

Wir können diese Lösung problemlos auf unserem Pi ausprobieren, da wir die -Datei praktischerweise im Wiederherstellungsmodus des Pi oder im NOOBS-Dialog bearbeiten können cmdline.txt. Im Wiederherstellungsmodus oder im NOOBS-Dialog öffnen Sie durch Drücken des Symbols „Konfiguration bearbeiten“ einen Editor, mit dem Sie zwei Dateien bearbeiten können, von denen eine ist cmdline.txt. Durch Drücken von „OK“ im Editor werden Ihre Änderungen gespeichert.

Wenn Sie den Pi in den Einzelbenutzermodus oder „Rettungsmodus“ booten, erhalten Sie leider höchstwahrscheinlich die folgende Meldung:

Cannot open access to console, the root account is locked.
See sulogin(8) man page for more details.

Press Enter to continue.

Dies – und auch der Grund, warum die zuvor erwähnte Eingabeaufforderung für das Root-Passwort keine Passwörter akzeptierte – liegt daran, dass Raspbian standardmäßig kein Passwort für das Root-Konto festgelegt hat. Dies ist nicht zu verwechseln mit einem Passwort, das nichts ist oder für das kein Passwort erforderlich wäre. Raspbian erwartet, genau wie eine Handvoll anderer Linux-Distributionen (z. B. Debian, von dem Raspbian abgeleitet ist), dass der Benutzer als Root über sudo und nicht über das Konto selbst agiert. Daher befindet sich das Root-Konto in dem „Lockdown“-Zustand, den wir erleben.

*Wenn Sie das Root-Passwort selbst festlegen, beispielsweise über den Befehl sudo passwd root, sollten Sie den pkexec-Befehl verwenden und im Einzelbenutzermodus booten können. Beachten Sie, dass Sie dabei sudo verwenden müssen. Dies ist also offensichtlich keine Lösung, wenn sudo nicht funktioniert. Ich weise jedoch darauf hin, weil dies wahrscheinlich der Grund ist, warum einige Leute ihre Pis erfolgreich reparieren konnten, wenn sie die Lösungen anwendeten, die den pkexec-Befehl oder den Einzelbenutzermodus vorschlagen. Diese Leute hatten irgendwann manuell ein Root-Passwort festgelegt und damit das Root-Konto ihres Systems entsperrt.

Die Lösung

Dieser Blog-Beitragerklärt, wie wir das tun müssen, was wir tun müssen. Die Schritte sind fast identisch mit den Schritten, die wir unternommen haben, als wir versucht haben, sudo im Einzelbenutzermodus zu reparieren. Sie müssen nicht all die umständlichen Dinge tun, die im Blogbeitrag erwähnt werden, um die cmdline.txt-Datei zu bearbeiten, sondern tun dies einfach im NOOBS-Dialog. Der Schlüssel ist, init=/bin/sham Ende der cmdline.txt-Datei hinzuzufügen. Wenn Sie diesen Codeausschnitt hinzugefügt haben, werden Sie beim nächsten Booten Ihres Pi in eine Root-Shell-Eingabeaufforderung weitergeleitet.

Zunächst wird das Dateisystem im Nur-Lese-Modus geladen. Bevor Sie also etwas bearbeiten können, müssen Sie die Root-Partition durch Ausführen des folgenden Befehls erneut im Lese- und Schreibmodus mounten:

mount -o remount,rw /dev/mmcblk0p2 /

Jetzt sollten Sie sich in einer Root-Shell-Eingabeaufforderung befinden, wo Sie alle Dateien, einschließlich der beschädigten Sudo-Dateien, frei bearbeiten können.

Antwort3

Die einfachste Lösung besteht darin, ein anderes Betriebssystem auf einer LiveDVD oder einem LiveUSB (idealerweise ein LiveUSB und idealerweise ein Linux-Betriebssystem) zu starten, dann die Disc zu mounten und die Datei manuell zu ändern. Ich habe schon einmal ähnliche Dinge getan und es auf diese Weise behoben. Alle Ihre Dateien sind vom Live-System aus sichtbar und bearbeitbar. Es sei denn, Sie haben das Laufwerk verschlüsselt; das macht die Sache etwas komplizierter.

Wenn Sie Fragen haben, lassen Sie es mich wissen, und ich werde diese Antwort bearbeiten. Ich bin nicht sicher, wie gut Sie sich mit der Einrichtung eines Live-USB auskennen, aber es ist nicht sehr schwierig.

verwandte Informationen