Sudoers-Datei, aktivieren Sie NOPASSWD für Benutzer, alle Befehle

142

Vorwort

Dies ist eine ziemlich komplexe Frage im Zusammenhang mit der Sudoers-Datei und dem Befehl sudo im Allgemeinen.

HINWEIS: Ich habe diese Änderungen auf einem dedizierten Computer mit Ubuntu Desktop 13.04 vorgenommen, den ich ausschließlich zu Lernzwecken verwende. Ich verstehe, dass die Aktivierung von NOPASSWD sudo ein großes Sicherheitsrisiko darstellt.

Frage

Anfänglich war meine einzige Änderung an der sudoers-Datei (/ etc / sudoers) eine Zeile, eine Benutzerspezifikation, die es 'nicholsonjf' hätte ermöglichen sollen, alle Befehle mit sudo auszuführen, ohne ein Kennwort 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 jedes Mal zur Eingabe meines Kennworts aufgefordert, wenn ich den Befehl 'nicholsonjf' ausführte. Ich konnte sudo-Befehle erst als 'nicholsonjf' ausführen, nachdem ich 'nicholsonjf' aus den Gruppen sudo und admin entfernt hatte.

Kann mir jemand erklären, warum das funktioniert hat?

Liegt es daran, dass der Benutzer 'nicholsonjf' Sudo-Rechte von den beiden Gruppenspezifikationen 'admin' und 'sudo' (siehe unten in der sudoers-Datei) erbte, die die Benutzerspezifikation 'nicholsonjf' außer Kraft setzten, weil sie sich weiter unten in der Datei befanden? Konfigurationsdatei?

James Nicholson
quelle
7
hinweis: ALL = NOPASSWD: ALL muss ALL = (ALL) sein NOPASSWD: ALL oder es funktioniert nicht ...
André Verwijs

Antworten:

164

Die von Ihnen hinzugefügte Zeile wurde überschrieben. Von man sudoers:

Wenn mehrere Einträge für einen Benutzer übereinstimmen, werden sie der Reihe nach angewendet. Bei mehreren Übereinstimmungen wird die letzte Übereinstimmung verwendet (dies ist nicht unbedingt die spezifischste Übereinstimmung).

In Ihrem Fall nicholsonjfwar ein Mitglied der Gruppe, sudodaher galt für ihn diese Zeile:

%sudo   ALL=(ALL:ALL) ALL

Wenn Sie Einträge in überschreiben möchten, setzen Sie /etc/sudoerseinfach die neuen Einträge nach ihnen.

Der neue Eintrag sollte so aussehen

myuser ALL=(ALL) NOPASSWD: ALL für einen einzelnen Benutzer oder

%sudo ALL=(ALL) NOPASSWD: ALL für eine Gruppe.

Pabouk
quelle
6
Für eine vollständige Lösung würde ich gerne etwas NOPASSWDin dieser Antwort sehen ...
Daniel Alder
22
Ich denke, die Lösung sollte sein:%sudo ALL=(ALL) NOPASSWD:ALL
Daniel Alder
3
@DanielAlder: Die Angabezeile aus der Frage nicholsonjf ALL=NOPASSWD: ALList korrekt. Es war einfach falsch, wie ich in der Antwort erklärte. ------ Die RunasAngabe - in Ihrem Fall (ALL)- ist optional. Wenn Sie die Angabe weglassen, können Sie die Befehle als ausführen rootund Sie können -uund -gOptionen von nicht verwenden sudo.
Pabouk
Dies ist ein größeres Sicherheitsrisiko, da mehrere Benutzer ohne Passwort darauf zugreifen können. Wenn es Ihr persönlicher PC ist, spielt das keine Rolle - vielleicht. Ich würde nur die persönliche Linie verschieben, um zu dauern.
Mark Williams
4
Eine Hinzufügung statt einer Korrektur, wenn etwas verwendet wird, das auf Debian / Ubuntu basiert (kann im Allgemeinen angewendet werden, wird aber an keiner anderen Stelle gesehen). Ihre absolute Best-Practice-Wette besteht darin, einer Datei in /etc/sudoers.d/ benutzerdefinierte Befehle hinzuzufügen und sudoers zu verlassen selbst durch den Paketmanager verwaltet werden.
Aquarion
120

Fügen Sie für einen einzelnen Benutzer diese Zeile am Ende Ihrer sudoersDatei mitsudo visudo

superuser ALL=(ALL) NOPASSWD: ALL

Für eine Gruppe

%supergroup  ALL=(ALL) NOPASSWD: ALL
Fedir RYKHTIK
quelle
8
Bevor ich diese Antwort las, tat ich es %sudo ALL=NOPASSWD: ALLund es funktioniert. Bin ich der einzige, der Extended Backus-Naur Form wirklich schwer zu verstehen findet?
Vince
4
@Vince Wenn Sie Ihren Befehl verwenden, kann ich sudoals Benutzer ohne sudo-Berechtigungen kein Passwort verwenden. ZB sudo -u root -ifunktioniert, aber sudo -u git -inicht.
NeverEndingQueue
Dies ist eine wesentlich hilfreichere Antwort als die akzeptierte, die zwar die Frage des OP beantwortet, aber wahrscheinlich nicht das ist, wonach die meisten Menschen diese Seite über Google erreichen.
Mahmoud Al-Qudsi
3

So fordern Sie den aktuellen Benutzer niemals zur Eingabe eines Kennworts auf, wenn dieser Benutzer sudodo verwendet

echo "$USER ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/dont-prompt-$USER-for-password

Dies erstellt eine Datei mit dem Namen /etc/sudoers.d/dont-prompt-<YOUR USERNAME>-for-sudo-passwordund bedeutet, dass der Benutzer, den Sie diesen Befehl ausgeführt haben, beim Ausführen des sudoBefehls nicht zur Eingabe seines Kennworts aufgefordert wird . In anderen Kontexten werden Sie weiterhin zur Eingabe des Kennworts aufgefordert, z. B. bei der Installation von Inhalten aus der grafischen Ubuntu-Software- App.

Die Vorteile dieser Vorgehensweise gegenüber dem Hinzufügen der Zeile im echoBefehl zu /etc/sudoersusing sudo visudo(wie in den anderen Antworten vorgeschlagen) sind:

  1. /etc/sudoerswird manchmal durch Systemaktualisierungen geändert, wohingegen Dateien in /etc/sudoers.dnicht geändert werden
  2. Die sudo visudoMethode ist fehleranfällig (wie aus dieser Frage hervorgeht), wohingegen das Kopieren / Einfügen eines Befehls viel schwieriger zu verwechseln ist

Entsprechend sudo cat /etc/sudoers.d/READMEdieser Funktion (zum Einfügen zusätzlicher Sudoer-Dateien /etc/sudoers.d) ist Debian seit 1.7.2p1-1, das Ende der 1990er Jahre herauskam, standardmäßig aktiviert (Ubuntu basiert auf Debian ).

Boris
quelle
(Fühlen Sie sich frei, meine Antwort zu bearbeiten, wenn Sie einen besseren Dateinamen finden können)
Boris
0

Als Vince hat in einem Kommentar erwähnt , können Sie diese Zeile verwenden:

%sudo ALL=NOPASSWD: ALL

(Dies unterscheidet sich von den in diesen Antworten gezeigten Zeilen und hat das Problem für mich gelöst.)

E. Fortes
quelle
@Eliah das ist nicht so anders als die anderen Antworten. Es ersetzt lediglich den Platzhalter supergroupin Fedirs Antwort durch sudo. Was kommt als nächstes, ein anderer Benutzer für die Gruppe wheel? Oder eine andere Gruppe, die der Benutzer gerade verwendet?
Muru
1
@muru "Alles was es tut, ist den Platzhalter supergroupin Fedirs Antwort durch zu ersetzen sudo." Was? Ersetzen supergroupmit sudoin der Zeile %supergroup ALL=(ALL) NOPASSWD:ALLergibt %sudo ALL=(ALL) NOPASSWD:ALLnicht %sudo ALL=NOPASSWD: ALL.
Eliah Kagan
Was wohl schlimmer ist, da NOPASSWD jetzt nur für root als Zielbenutzer ist. Es beantwortet also nicht einmal die Frage richtig!
Muru
@muru Was ist, ist nicht einmal fraglich , ist jedoch eine Substitution von supergroupmit sudo. Dies ist eine eigene Antwort, kein Dankesbeitrag oder eine Kopie einer anderen Antwort. Aber ja, dem stimme ich zu: Wenn sie dies nicht beabsichtigen, ist dies für die meisten Benutzer nicht so gut wie die Methoden in den anderen Antworten. (Aber vor allem, wenn man bedenkt, dass die Frage "alle Befehle" und nicht "alle Zielbenutzer" sagt, denke ich nicht, dass dies tatsächlich nicht einmal der Versuch ist, die gestellte Frage zu beantworten.)
Eliah Kagan
Das hat bei mir geklappt und ich wollte es mit anderen Usern teilen :) (entferne meinen Kommentar wenn gewünscht).
E. Fortes