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?
Antworten:
Die von Ihnen hinzugefügte Zeile wurde überschrieben. Von
man sudoers
:In Ihrem Fall
nicholsonjf
war ein Mitglied der Gruppe,sudo
daher galt für ihn diese Zeile:Wenn Sie Einträge in überschreiben möchten, setzen Sie
/etc/sudoers
einfach 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.quelle
NOPASSWD
in dieser Antwort sehen ...%sudo ALL=(ALL) NOPASSWD:ALL
nicholsonjf ALL=NOPASSWD: ALL
ist korrekt. Es war einfach falsch, wie ich in der Antwort erklärte. ------ DieRunas
Angabe - in Ihrem Fall(ALL)
- ist optional. Wenn Sie die Angabe weglassen, können Sie die Befehle als ausführenroot
und Sie können-u
und-g
Optionen von nicht verwendensudo
.Fügen Sie für einen einzelnen Benutzer diese Zeile am Ende Ihrer
sudoers
Datei mitsudo visudo
Für eine Gruppe
quelle
%sudo ALL=NOPASSWD: ALL
und es funktioniert. Bin ich der einzige, der Extended Backus-Naur Form wirklich schwer zu verstehen findet?sudo
als Benutzer ohne sudo-Berechtigungen kein Passwort verwenden. ZBsudo -u root -i
funktioniert, abersudo -u git -i
nicht.So fordern Sie den aktuellen Benutzer niemals zur Eingabe eines Kennworts auf, wenn dieser Benutzer
sudo
do verwendetDies erstellt eine Datei mit dem Namen
/etc/sudoers.d/dont-prompt-<YOUR USERNAME>-for-sudo-password
und bedeutet, dass der Benutzer, den Sie diesen Befehl ausgeführt haben, beim Ausführen dessudo
Befehls 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
echo
Befehl zu/etc/sudoers
usingsudo visudo
(wie in den anderen Antworten vorgeschlagen) sind:/etc/sudoers
wird manchmal durch Systemaktualisierungen geändert, wohingegen Dateien in/etc/sudoers.d
nicht geändert werdensudo visudo
Methode ist fehleranfällig (wie aus dieser Frage hervorgeht), wohingegen das Kopieren / Einfügen eines Befehls viel schwieriger zu verwechseln istEntsprechend
sudo cat /etc/sudoers.d/README
dieser 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 ).quelle
Als Vince hat in einem Kommentar erwähnt , können Sie diese Zeile verwenden:
(Dies unterscheidet sich von den in diesen Antworten gezeigten Zeilen und hat das Problem für mich gelöst.)
quelle
supergroup
in Fedirs Antwort durchsudo
. Was kommt als nächstes, ein anderer Benutzer für die Gruppewheel
? Oder eine andere Gruppe, die der Benutzer gerade verwendet?supergroup
in Fedirs Antwort durch zu ersetzensudo
." Was? Ersetzensupergroup
mitsudo
in der Zeile%supergroup ALL=(ALL) NOPASSWD:ALL
ergibt%sudo ALL=(ALL) NOPASSWD:ALL
nicht%sudo ALL=NOPASSWD: ALL
.supergroup
mitsudo
. 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.)