Ich habe einen Eintrag in /etc/sudo für einen Benutzer, der sudo für alle Befehle ausführen kann.
Fred ALLE = (ALLE:ALLE) ALLE
Gemäß der Dokumentation ist das letzte ALL dafür verantwortlich, den Zugriff auf alle Befehle zu ermöglichen.
Ich möchte, dass Fred einen Neustart von nginx unter Ubuntu 14.04 ausführen kann, ohne ein Sudo-Passwort einzugeben, und gleichzeitig weiterhin die Möglichkeit hat, Sudo für andere Befehle aufzurufen. DiesudoersDie Dokumentation ist nicht klar, aber ich glaube
fred ALL=(ALL) NOPASSWD: /usr/sbin/service
lässt Fred nur einen Befehl ausführen. Ich möchte Fred die Möglichkeit geben, alle Befehle als Root über sudo auszuführen, wobei für alle außer /usr/sbin/service ein Passwort erforderlich ist.
Ein Blick auf die BNF der Dokumentation
User_Spec ::= User_List Host_List '=' Cmnd_Spec_List (':' Host_List '=' Cmnd_Spec_List)*
Cmnd_Spec_List ::= Cmnd_Spec | Cmnd_Spec ',' Cmnd_Spec_List
Cmnd_Spec ::= Runas_Spec? SELinux_Spec? Solaris_Priv_Spec? Tag_Spec* Cmnd
Runas_Spec ::= '(' Runas_List? (':' Runas_List)? ')'
SELinux_Spec ::= ('ROLE=role' | 'TYPE=type')
Solaris_Priv_Spec ::= ('PRIVS=privset' | 'LIMITPRIVS=privset')
Tag_Spec ::= ('EXEC:' |
'NOEXEC:' | 'FOLLOW:' | 'NOFOLLOW' |
'LOG_INPUT:' | 'NOLOG_INPUT:' | 'LOG_OUTPUT:' |
'NOLOG_OUTPUT:' | 'MAIL:' | 'NOMAIL:' | 'PASSWD:' |
'NOPASSWD:' | 'SETENV:' | 'NOSETENV:')
es scheint, dass ich mehrere Cmnd_Spec_Lists verwenden kann, also
fred ALLE = (ALLE: ALLE) ALLE, NOPASSWD: /usr/sbin/service
In der Dokumentation heißt es jedoch nicht, dass das letztere NOPASSWD: Cmnd_Spec den Root-Zugriff des Befehls ALL nur für diesen Befehl überschreibt.
Das ist die Art von Sache, die ich gerne gleich beim ersten Mal richtig mache. Kann mir bitte jemand bestätigen, dass die letzte Zeile für den vorliegenden speziellen Zweck funktioniert (oder alternativ sagen, dass sie nicht funktioniert)?
Wenn es außerdem funktioniert, Fred das Ausführen des Dienstes ohne Sudo-Passwort zu ermöglichen, gibt es dann eine Möglichkeit, die Argumente auf den Dienst zu beschränken, sodass Fred nur ohne Passwort auf dem Dienst nginx arbeiten kann, oder noch besser, sodass Fred diesen Server nur ohne Passwort neu starten kann?
Danke.
Antwort1
Befehle am Ende der Konfiguration überschreiben die Befehle darüber. Es wird in der Dokumentation erwähnt unterhttps://www.sudo.ws/man/1.8.15/sudoers.man.html#SUDOERS_FILE_FORMATdass es nicht vom spezifischsten zum unspezifischsten ist, sofern Sie sie nicht in dieser Reihenfolge anordnen.
Ich mache das mit mehreren Zeilen. Mehrere Zeilen und Regeln sind später, wenn die Dinge komplizierter werden, leichter zu lesen und zu verstehen. Mehrere Zeilen können Ihnen helfen, die Reihenfolge festzulegen.
# I don't know what order this is interpreted in:
fred ALL=(ALL : ALL) ALL, NOPASSWD: /usr/sbin/service
# I do know what order this is interpreted in:
fred ALL=(ALL) ALL
fred ALL=(ALL) NOPASSWD: /usr/sbin/service
Die folgenden Zeilen stammen aus meiner Sudoers-Datei. Sie ermöglichen den Mitgliedern der Gruppe, wheel
alle Befehle auszuführen und dann insbesondere Befehle im REBOOT
Alias ohne Kennwort auszuführen.
Cmnd_Alias REBOOT = /sbin/halt, /sbin/reboot, \
/sbin/poweroff, /sbin/shutdown
%wheel ALL=(ALL) ALL
%wheel ALL=(ALL) NOPASSWD: REBOOT
Leider habe ich nicht viel öffentliche Dokumentation, auf die ich verweisen könnte. Die Manpage von sudoers ist lächerlich. Ich habe vor einiger Zeit ein großartiges (leicht zu lesendes) Buch darüber gelesen (Sudo-Meisterschaftvon Michael W. Lucas) und dieses Beispiel funktioniert bei mir auf mehreren Linux- und BSD-Rechnern.
Antwort2
Hallo, das könnte funktionieren. Melden Sie sich als Root an und befolgen Sie die folgenden Befehle. Fügen Sie die folgenden Zeilen in die Sudoers-Datei ein.
fred ALLE=(ALLE)NOPASSWD:ALLE