Ist ein bedingter/kombinierter Sudoers-Befehl möglich?

Ist ein bedingter/kombinierter Sudoers-Befehl möglich?

Ich möchte sudo folgendermaßen zulassen:

myuser ALL=NOPASSWD:/usr/bin/pkill -fx "/usr/sbin/nethogs -v 3 -s" || /usr/sbin/nethogs -v 3 -s

Ich bekomme also nur eine einzige laufende Instanz von Nethogs.

visudo akzeptiert es, aber ich kann diese Befehle nicht ohne Passwort ausführen ...

Fehlgeschlagene Versuche:

sudo '/usr/bin/pkill -fx "/usr/sbin/nethogs -v 3 -s" || /usr/sbin/nethogs -v 3 -s'
sudo /usr/bin/pkill -fx "/usr/sbin/nethogs -v 3 -s" || sudo /usr/sbin/nethogs -v 3 -s

PS.: diese Version von Nethogs wurde aus dem CVS auf sf.net kompiliert

Antwort1

Sie können in der Datei nur die Namen oder Pfade von Programmen oder Skripten (und optional Argumente dafür) verwenden sudoers– Shell-Konstrukte wie ||funktionieren nicht.
Zitat man sudoers:

command name ::= file name |
                 file name args |
                 file name '""'

Die einfachste Möglichkeit, dies zu umgehen, besteht darin, ein Skript zu erstellen, das Ihren Befehlssatz ausführt, es nur für Root beschreibbar zu machen und die Berechtigung zur Ausführung über zu erteilen sudo.


Die Manpage für gibt tatsächlich ein Beispiel, das Befehle in einer Subshell ausführt, aber ich habe keine Möglichkeit gefunden, dies in der Konfiguration sudozuzulassen (und auchsudoersdie sudo-users-Mailingliste) .

verwandte Informationen