schönes sudo oder sudo schön?

53

Gibt es einen Unterschied zwischen dem Ausführen einer intensiven Aufgabe über sudo mit den folgenden Befehlen ?:

  1. nice sudo [intensiver Befehl hier]
  2. sudo nice [intensiver Befehl hier]

Übrigens ist dies für Linux 3.x.

Nicolas Laplante
quelle
6
Zum Testen sehen Sie nice bash -c 'ps -p $$ -o pid,ni,comm', und sudo nice bash -c 'ps -p $$ -o pid,ni,comm', und nice sudo bash -c 'ps -p $$ -o pid,ni,comm'. Alle drei sollten Ihnen den netten Wert für die Prozess-ID ($$) der erzeugten Shell anzeigen.
Zoredache
@Zoredache, während ich denke, dass Ihr Kommentar SEHR konstruktiv ist, sollten wir sagen, dass sie alle den gleichen netten Wert haben, weil er beim Gabeln geerbt wird, was die eigentliche Antwort auf die Frage sein sollte.
Florin Asăvoaie
3
@FlorinAsavoaie Wenn Sie der Meinung sind, dass dies die Antwort sein sollte, können Sie sie gerne hinzufügen. Ich habe den obigen Kommentar hinzugefügt, um die Dinge zu testen, da ich persönlich nicht zu 100% überzeugt war, was passieren würde, und ich entschied mich, einen Befehl zu finden, der den netten Wert mit verschiedenen Aufrufen zeigen könnte. Ich bin in dem Lager, das es bevorzugt, einen Test durchzuführen, der zeigt, dass die Dinge so funktionieren, wie sie sollen.
Zoredache
@FlorinAsavoaie hätte ich mir auch gedacht, aber schau unter serverfault.com/a/626576/117546 .
Emory

Antworten:

104

Es gibt einen entscheidenden Unterschied.

Wenn Sie die Priorität des Prozesses verringern möchten , spielt die Reihenfolge keine Rolle. Auf der anderen Seite, wenn Sie es erhöhen möchten , müssen Sie sudovor setzen nice.

Da Sie den Befehl als normaler Benutzer ausführen (andernfalls würden Sie sich überhaupt nicht um sudo kümmern), können Sie die Priorität Ihres Befehls nur verringern. Aber wenn Sie sudozuerst verwenden, können Sie es erhöhen, wenn Sie möchten.

ThoriumBR
quelle
21
Herzlichen Glückwunsch, Sie gewinnen.
Michael Hampton
2
Dies ist ein sehr wichtiger Punkt, obwohl er als Antwort nur dann vollständig ist, wenn Sie erklären, warum die Reihenfolge im Basisfall keine Rolle spielt (wie Michael es in seiner Antwort tut).
Leichtigkeit Rennen mit Monica
16

Wenn Sie ausführen, nice sudowird die Aufforderung zur Eingabe Ihres Kennworts ebenfalls beeinträchtigt, aber da Sie viel mehr Zeit damit verbringen, es einzugeben, spielt es wirklich keine Rolle.

Wie ThoriumBR feststellte, ist die Reihenfolge irrelevant, wenn Sie die Priorität verringern, aber wenn Sie die Priorität erhöhen möchten, müssen Sie (da dies als root erfolgen muss) verwenden sudo nice.

Ansonsten kann ich mir keinen wirklichen Unterschied vorstellen.

Michael Hampton
quelle
2

Wenn Sie das Prinzip der geringsten Rechte verwenden, sollten Sie ein Programm mit Root-Rechten nur dann ausführen, wenn es diese benötigt, und sie dann wieder löschen, sobald Sie sie nicht mehr benötigen.

Also ja, es gibt einen Unterschied, wenn es einen Exploit für nice gibt, könnte ein Angreifer Code mit den gleichen Berechtigungen wie das nice-Programm ausführen.

Außerdem setzt sudo Ihre Umgebung zurück, sodass es möglicherweise zu Nebenwirkungen kommt. Versuchen Sie es

$ echo 'echo $PATH' | sh
/usr/lib64/qt-3.3/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/home/jens/.local/bin:/home/jens/bin:/home/jens/.local/bin
$ echo 'echo $PATH' | sudo sh
[sudo] password for jens: 
/sbin:/bin:/usr/sbin:/usr/bin

Der 'nice'-Befehl, den Sie über sudo ausführen, ist möglicherweise eine andere Binärdatei.

$ which ash
~/.local/bin/ash
$ sudo which ash
[sudo] password for jens: 
which: no ash in (/sbin:/bin:/usr/sbin:/usr/bin)
Jens Timmerman
quelle
2

Späte Antwort:

Wenn Ihr sudo-Zugriff auf bestimmte Programme ( foound barz. B.) beschränkt ist, haben Sie keine Berechtigung zum Ausführen sudo nice foo, können diese jedoch ausführen nice sudo foo.

Chris Dennis
quelle