Dies ist eine ziemlich komplexe Frage im Zusammenhang mit der Sudoers-Datei und dem sudo-Befehl im Allgemeinen.
HINWEIS: Ich habe diese Änderungen auf einem dedizierten Rechner mit Ubuntu Desktop 13.04 vorgenommen, den ich nur zu Lernzwecken verwende. Ich weiß, dass es ein großes Sicherheitsrisiko ist, NOPASSWD sudo zu aktivieren.
Ursprünglich bestand meine einzige Änderung an der Datei sudoers (/etc/sudoers) aus einer Zeile, einer Benutzerspezifikation, die es 'nicholsonjf' ermöglichen sollte, alle Befehle mit sudo auszuführen, ohne ein Passwort eingeben zu müssen (siehe die Zeile, die mit 'nicholsonjf' beginnt):
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
# Host alias specification
# User alias specification
# Cmnd alias specification
# User privilege specification
root ALL=(ALL:ALL) ALL
nicholsonjf ALL=NOPASSWD: ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d
Dies funktionierte jedoch nicht, und ich wurde immer noch jedes Mal zur Eingabe meines Passworts aufgefordert, wenn ich einen Befehl als 'nicholsonjf' ausführte. Erst nachdem ich 'nicholsonjf' aus den Gruppen sudo und admin entfernt hatte, konnte ich sudo-Befehle als 'nicholsonjf' ausführen.
Kann jemand erklären, warum das funktioniert hat?
Liegt es daran, dass der Benutzer 'nicholsonjf' sudo-Rechte von den beiden Gruppenspezifikationen 'admin' und 'sudo' (unten in der Datei sudoers zu sehen) geerbt hat, die die Benutzerspezifikation 'nicholsonjf' außer Kraft setzten, weil sie weiter unten in der Konfigurationsdatei standen?
Die von Ihnen hinzugefügte Zeile wurde überschrieben. Von man sudoers
:
Wenn mehrere Einträge für einen Benutzer übereinstimmen, werden sie in der Reihenfolge angewendet. Wenn es mehrere Übereinstimmungen gibt, wird die letzte Übereinstimmung verwendet (die nicht unbedingt die spezifischste ist).
In Ihrem Fall war "nicholsonjf" ein Mitglied der Gruppe "sudo", so dass diese Zeile für ihn galt:
%sudo ALL=(ALL:ALL) ALL
Wenn Sie die Einträge in /etc/sudoers
überschreiben wollen, fügen Sie einfach die neuen Einträge dahinter ein.
Der neue Eintrag sollte wie folgt aussehen
myuser ALL=(ALL) NOPASSWD: ALL
für einen einzelnen Benutzer oder
%sudo ALL=(ALL) NOPASSWD: ALL
für eine Gruppe.
Für einen einzelnen Benutzer fügen Sie diese Zeile am Ende Ihrer sudoers
-Datei mit sudo visudo
ein
superuser ALL=(ALL) NOPASSWD: ALL
Für eine Gruppe
%supergroup ALL=(ALL) NOPASSWD: ALL
Wie Vince in einem Kommentar erwähnt hat, können Sie diese Zeile verwenden:
%sudo ALL=NOPASSWD: ALL
(Dies unterscheidet sich von den Zeilen, die in den Antworten gezeigt werden, und es löste das Problem für mich).