Wie ändere ich eine ungültige '/ etc / sudoers'-Datei?


238

Wie bearbeite ich eine ungültige sudoers-Datei? Der folgende Fehler wird ausgegeben, und ich kann ihn nicht erneut bearbeiten, um ihn zu beheben.

Folgendes passiert:

$ sudo visudo
>>> /etc/sudoers: syntax error near line 28 <<<
sudo: parse error in /etc/sudoers near line 28
sudo: no valid sudoers sources found, quitting


Verwandte Themen
Eliah Kagan

Antworten:


361

Auf einem modernen Ubuntu-System (und vielen anderen GNU / Linux-Distributionen) ist das Beheben einer beschädigten sudoersDatei recht einfach und erfordert keinen Neustart, keine Live-CD oder keinen physischen Zugriff auf den Computer.

Melden Sie sich dazu über SSH am Computer an und führen Sie den Befehl aus pkexec visudo. Wenn Sie physischen Zugriff auf den Computer haben, ist SSH nicht erforderlich. Öffnen Sie einfach ein Terminal-Fenster und führen Sie diesen pkexecBefehl aus.

Vorausgesetzt , dass Sie (oder einen anderen Benutzer) sind berechtigt , Programme laufen rootmit PolicyKit können Sie Ihr Passwort eingeben, und dann wird es laufen visudowie root, und Sie können Ihre beheben /etc/sudoers.

Wenn Sie eine der Konfigurationsdateien bearbeiten müssen /etc/sudoers.d(was in dieser Situation ungewöhnlich, aber möglich ist), verwenden Sie .pkexec visudo -f /etc/sudoers.d/filename

Wenn Sie in einer verwandten Situation zusätzliche Systemverwaltungsbefehle als root ausführen müssen, um das Problem zu beheben (in diesem Fall ebenfalls ungewöhnlich, in anderen Fällen jedoch häufig), können Sie eine interaktive Root-Shell mit starten pkexec bash. Im Allgemeinen sudokann pkexecstattdessen jeder nicht-grafische Befehl ausgeführt werden, mit dem Sie ausgeführt würden .

(Wenn es mehr als ein Benutzerkonto auf dem System gibt, das zum Ausführen von Programmen wie rootmit PolicyKit berechtigt ist , werden Sie bei einer dieser Aktionen aufgefordert, das gewünschte Konto auszuwählen, bevor Sie nach Ihrem Kennwort gefragt werden.)


Wenn dies nicht funktioniert - zum Beispiel, wenn keine Benutzer berechtigt sind, Programme als Root über PolicyKit auszuführen -, booten Sie von einer Ubuntu Live-CD (wie die CD, die Sie wahrscheinlich zur Installation von Ubuntu verwendet haben) und hängen Sie das Dateisystem für das ein installiertes System. Sie können dies tun, indem Sie ausführen sudo parted -l, um Ihre Partitionen anzuzeigen - es gibt wahrscheinlich nur eine ext4-Partition, und das ist das Root-Dateisystem.

Angenommen, das Root-Dateisystem des installierten Ubuntu-Systems befindet sich unter / dev / sda1. Dann könnten Sie es mit montieren sudo mount /dev/sda1 /mnt. Anschließend können Sie die sudoers-Datei des installierten Systems mit bearbeiten sudo nano -w /mnt/etc/sudoers. Oder, noch besser, Sie können es mit bearbeiten

sudo visudo -f /mnt/etc/sudoers

(Dies verhindert, dass Sie eine sudoers-Datei mit falscher Syntax speichern).


7
pkexec / usr / sbin / visudo arbeitete an debian 7
marinara am

10
HEILIGER BIMBAM! Danke vielmals! Hab meinen Speck gerettet. Fügte eine Datei, wie vorgeschlagen, in das Verzeichnis etc / sudoers.d / unter Verwendung eines regulären Texteditors (DON-T__D-O__T-HAT !!!) hinzu. Verlor die Fähigkeit, erhöhte Rechte zu erlangen, EINSCHLIESSLICH der Bearbeitung der betreffenden Datei. Dies half beim Bearbeiten der Datei. Seltsamerweise musste ich zuerst / etc / sudoers bearbeiten, dann fand es die Fehler in der anderen Datei und öffnete diese für mich. AUCH WENIGER, die Direktive in der / etc / sudoers-Datei 'inlcudedir /etc/sudoers.d' wurde auskommentiert und enthält sie immer noch.
Dennis

4
@Dennis Verwirrenderweise werden #includeDirektiven in sudoersDateien speziell behandelt. die führende #nicht dazu führt , den Rest der Zeile als Kommentar interpretiert werden, in diesem Fall. Wie man sudoersgesagt: "Das Nummernzeichen ('#') gibt einen Kommentar an (es sei denn, es ist Teil einer # include-Direktive oder ..." Siehe auch visudo: #includedir sudoers.d (archiviert von lzone.de/ Blog )
Eliah Kagan

5
Mein Benutzer ist sudoer, aber ich habe folgenden Fehler erhalten: Fehler beim Ausführen des Befehls als anderer Benutzer: Nicht autorisiert
SuB

2
In Ubuntu 16.04 wird pkexec visudonach einem Passwort gefragt, das das korrekte Passwort nicht akzeptiert. Es wird der Fehler "AUTHENTICATION FAILED" ausgegeben.
Juha Untinen

54

Verwenden visudoSie diese Option immer , um Ihre sudoers-Datei zu bearbeiten, und bearbeiten Sie sie niemals direkt. Sie können es nur dann auf der Festplatte speichern, wenn es überprüft wird.


17
im
nachhinein

4
Es wird keine Katastrophe verhindern. Es ist leicht genug, sich selbst zu leugnen.
Joshua

Kann Visudo von Scripten verwendet werden? Wenn das so ist, wie?
Lukas

Ich habe kein Visudo installiert. Also habe ich pkexec vim gemacht. Dann wird die Liste der Benutzer angezeigt und nach dem Kennwort gefragt. Wenn ich ein Kennwort eingebe, wird der Fehler als "Fehler beim Ausführen des Befehls als anderer Benutzer: Nicht autorisiert" ausgegeben. Bitte helfen Sie
Shyamkkhadka

24

Eintippen:

pkexec visudo

Ändern Sie dann die letzte Zeile

#includedir /etc/sudoers

Zu:

#includedir /etc/sudoers.d

Es sollte Ihr Problem lösen.


2
Mir ist aufgefallen, dass das Entfernen des Führenden #von #includedirSyntaxfehlern verursacht, die #zumindest unter Ubuntu 12.10 Teil der Direktive sind.
SAFX

1
Das hat mir nur viel Kopfschmerzen erspart. Vielen Dank :)
Addo Solutions

1
Ich habe kein Visudo installiert. Also habe ich pkexec vim gemacht. Dann wird die Liste der Benutzer angezeigt und nach dem Kennwort gefragt. Wenn ich ein Kennwort eingebe, wird der Fehler als "Fehler beim Ausführen des Befehls als anderer Benutzer: Nicht autorisiert" ausgegeben. Bitte helfen Sie
Shyamkkhadka

11

Wenn jemand wie ich pkexec nicht installiert hatte oder vi, visudo, nano oder einen anderen Editor zum Ändern der sudoers-Datei nicht ausführen konnte, können Sie sicher sein, dass dieser Prozess ausgeführt wird.

  • neustarten
  • Umschalttaste beim Booten gedrückt halten, um den Wiederherstellungsmodus zu aktivieren (Eingabe)
  • Kommandozeile als root eingeben (vorletzte Option in meinem Grub-Menü)
  • Hängen Sie das Boot-Gerät für rw erneut ein und wenden Sie das Exec-Recht für den Benutzer an und bearbeiten Sie die Datei

    mount -n -o remount,rw /
    chmod u+x /etc/sudoers
    nano /etc/sudoers
    

behebe diesen Fehler und sei glücklich :)


Während die von @ eliah-kagan vorgeschlagene pkexec-Lösung einfacher zu sein scheint, ist diese universeller. Auf meinem Rechner stellte sich heraus, dass kein pkexec installiert ist und ich es natürlich nicht installieren konnte, da sudo apt-get install pkexec irgendwie nicht funktionierte.
running.t

Auch innerhalb dieses Ansatzes würde ich visudostattdessen verwenden nano /etc/sudoers.
pa4080

7

Wenn Sie Ihre sudoersDatei durcheinander gebracht haben , müssen Sie:

  • Neustart in den Wiederherstellungsmodus (während des Startvorgangs Escape drücken, Wiederherstellungsmodus auf dem Grub-Bildschirm auswählen)
  • Wählen Sie die Option "Netzwerk aktivieren" (wenn Sie dies nicht tun, wird Ihr Dateisystem als schreibgeschützt bereitgestellt. Wer wusste das?)
  • Wählen Sie die Option "In Root-Shell ablegen"
  • starte visudo, repariere deine Datei
  • Starten Sie mit der normalen Grub-Option neu

Quelle: - http://mario.net.au/content/recover-etcsudoers-ubuntu-1204


Hallo, entfernt es die Iptables, Dateien des vorhandenen Systems?
Shyamkkhadka

6

Es ist nichts Falsches #include sudoer.d Entfernen von #include sudoer.d wird keinen Unterschied machen.

Stellen Sie jedoch sicher, dass Sie keine Syntaxfehler haben. Ich hatte das gleiche Problem, aber ich habe Stunden damit verbracht, es zu beheben und herauszufinden, dass es sich um Syntaxfehler handelt. Siehe Handbuch und korrigieren Sie sie.

Angenommen, Ihr Benutzername lautet: dolly Ich habe Folgendes verwendet, was falsch ist

 dolly ALL = (ALL) ALL NO PASSWD: ALL

korrekte Syntax ist

dolly ALL = (ALL) ALL //give permission to everything, not good

oder

dolly ALL=(ALL) NOPASSWD:/usr/bin/thurderbird //good, give specific permission

hoffe das hilft


Ein besserer Ansatz, als sicherzustellen, dass Sie keine Syntaxfehler haben, besteht darin, visudobeim Bearbeiten dieser Dateien immer zu verwenden , wodurch sichergestellt wird, dass Sie keine Syntaxfehler haben, bevor die Datei geändert wird. visudodient nicht nur zum Bearbeiten /etc/sudoers- es werden auch Dateien in erstellt und bearbeitet /etc/sudoers.d. Es funktioniert auch mit jedem beliebigen Texteditor. Einzelheiten finden Sie auf der Manpage .
Eliah Kagan

Beachten Sie bitte, dass dies nur für sehr einfache Befehle / Apps nützlich ist, da jede ausreichend komplexe App (einschließlich der thunderbird, die ohnehin nie als Root ausgeführt werden sollte) dem Benutzer bei der Ausführung als Root den vollständigen Systemzugriff gewährt. Selbst scheinbar einfache Funktionen öffnen die Tür zum vollständigen Root-Zugriff. Zum Beispiel kann ein Benutzer, der ein Programm ausführen kann, das eine Datei an einem beliebigen Ort als root speichern kann, vollen Root-Zugriff erhalten (er kann seine eigenen installieren /etc/sudoers, oder wenn Syntaxbeschränkungen dies verhindern, kann er seine eigenen installieren /etc/crontab).
Eliah Kagan

3

Führen Sie den Wiederherstellungsmodus aus und geben Sie diesen ein

chown -R root: root /etc/sudoers.d
chmod u = rwx, g = rx, o = rx /etc/sudoers.d/
chmod u = r, g = r, o = /etc/sudoers.d/*

Nur die Gruppe und der Benutzer root sollten Leserechte haben


3

Sie können sich auch als root an einer ttyKonsole mit Ctrl+ Fn( Fnvon 1 bis 6) anmelden und ausführen visudo.


2

Sie können Ihren Boot-Eintrag auch in grub bearbeiten.

Starten Sie einfach Ihren PC neu und warten Sie, bis Grub angezeigt wird. Drücken Sie dann "e" im "Ubuntu" -Eintrag, um ihn zu bearbeiten.

Suchen Sie nach einer Zeile mit "linux =" oder "kernel =" und fügen Sie am Ende dieser Zeile einfach eine "single" hinzu.

Drücken Sie dann F10, um diesen vorübergehend geänderten Starteintrag zu starten. Dadurch erhalten Sie eine Shell (ohne GUI) mit Root-Rechten und Sie können die sudoers-Datei mit s.th. wie Nano / etc / sudoers zurück in seinen vorherigen Zustand.

Dann neu starten und fertig.


2
pkexec visudo

Machen Sie dann Ihre Fehler wieder rückgängig


1
nicht notwendig, um pkexec zu verwenden
Braiam

@Braiam visudomuss als root ausgeführt werden. Wenn sudoes nicht funktioniert, pkexecfunktioniert es manchmal. Dies wird von meiner früheren Antwort abgedeckt ... aber es ist eine korrekte Antwort, die visudoan sich (wenn sie nicht als root ausgeführt wird) nicht funktioniert, und es kann sinnvoll sein, korrekte, kurze Antworten zu geben, auch wenn sich ihre Empfehlungen erheblich mit anderen Antworten überschneiden. Wenn man in den Wiederherstellungsmodus geht, ist das natürlich eine Root-Shell, die für Befehle wie weder notwendig sudonoch visudonotwendig ist pkexec. Vielleicht meinen Sie das ...
Eliah Kagan

0

In Ubuntu 16.04, das auf einer VirtualBox läuft (sollte keinen Unterschied machen), haben die oben genannten Methoden bei mir nicht funktioniert (ungültige Zeile am Ende der Datei). Was hat funktioniert war:

  1. Starten Sie die VirtualBox neu
  2. Lassen Sie es normal booten, bis Sie in der Konsole nach Ihrem Benutzernamen und Passwort gefragt werden
  3. Melden Sie sich normalerweise mit Ihrem Benutzernamen an
  4. Wenn Sie dann in der Konsole landen (vorausgesetzt, Ihre Box bootet nicht in einer GUI), geben Sie einfach den Befehl ein su -und geben Sie dann das Passwort Ihres eigenen Benutzernamens ein.
  5. Es sollte nun in root@ubuntu-xenial:~#prompt enden , wenn das /etc/sudoersnicht zu kaputt oder leer ist. Ich bin mir nicht sicher, was in diesem Fall passieren würde.
  6. Dann können Sie visudodie Datei einfach ausführen und reparieren.
  7. Dann werden Ctrl + XSie aufgefordert, den geänderten Puffer zu speichern. Drücken Sie YundEnter
  8. Starten Sie die Box neu und es sollte jetzt funktionieren.

Falls Ihr /etc/sudoersleer ist oder etwas fehlt und Sie es bearbeiten können, dann ist hier der Inhalt von mir:

Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

root ALL=(ALL:ALL) ALL

%admin ALL=(ALL) ALL

%sudo ALL=(ALL:ALL) ALL

Ihr Schritt 4 macht keinen Sinn, er funktioniert nur, wenn Ihr Root-Passwort mit Ihrem normalen Benutzer übereinstimmt.
Alfred

Was in einer lokalen VM sehr verbreitet ist.
Juha Untinen

0

Gute Praxis: ein Backup-Terminal-Fenster und dort ausführen sudo su. Führen Sie auf einem anderen Termianl visudo oder sudo vim / etc / sudoers aus. Wenn etwas schief geht, kehren Sie zu Terminal 1 zurück und reparieren Sie die Datei. Sie fragen sich vielleicht, warum nicht einfach sudo suvorher visudoin einem Terminal laufen ? Dies funktioniert auch, birgt jedoch ein höheres Risiko, dass Sie das Terminal schließen, bevor Sie es wissen.


-1

Es gibt eine einfachere Lösung. Ohne Neustart, Wiederherstellungsmodus oder pkgexec( pkgexechat nicht funktioniert und ich habe keine Ahnung, warum oder wie ich es verwenden sollte) einfach Folgendes tun:

su root # switch to root user, without using sudo (which is broken at this point)
your_favorite_editor /etc/sudoers # e.g. nano

Und dann einfach den Syntaxfehler beheben!


Was ist mit der Ablehnung? Arbeitete perfekt für mich.
Rien333
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.