/etc/sudoers legt den Benutzer für die allgemeine Verwendung von Sudo fest, ohne Kennwortabfrage für nur einen Befehl

/etc/sudoers legt den Benutzer für die allgemeine Verwendung von Sudo fest, ohne Kennwortabfrage für nur einen Befehl

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, wheelalle Befehle auszuführen und dann insbesondere Befehle im REBOOTAlias ​​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

verwandte Informationen