fajne sudo czy fajne sudo?

53

czy jest jakaś różnica między uruchomieniem intensywnego zadania nad sudo za pomocą następujących poleceń ?:

  1. ładne sudo [intensywne polecenie tutaj]
  2. sudo nice [intensywne polecenie tutaj]

BTW to jest dla Linuksa 3.x.

Nicolas Laplante
źródło
6
Aby pomóc przetestować zobaczyć nice bash -c 'ps -p $$ -o pid,ni,comm', i sudo nice bash -c 'ps -p $$ -o pid,ni,comm', i nice sudo bash -c 'ps -p $$ -o pid,ni,comm'. Wszystkie trzy powinny pokazać ci dobrą wartość dla id procesu ($$) spawnowanej powłoki.
Zoredache,
@Zoredache, chociaż uważam, że twój komentarz jest BARDZO konstruktywny, powinniśmy powiedzieć, że wszystkie będą miały tę samą dobrą wartość, ponieważ zostaną odziedziczone po rozwidleniu, co powinno być faktyczną odpowiedzią na pytanie.
Florin Asăvoaie,
3
@FlorinAsavoaie, jeśli uważasz, że powinna to być odpowiedź, możesz ją dodać. Dodałem swój powyższy komentarz jako sposób na przetestowanie rzeczy, ponieważ osobiście nie byłem w 100% pewien, co się stanie, i postanowiłem znaleźć polecenie, które może pokazać dobrą wartość przy różnych wywołaniach. Jestem w obozie, który zazwyczaj woli przeprowadzić test, który pokazuje, że wszystko działa tak, jak powinno.
Zoredache,
@FlorinAsavoaie Też tak myślałem, ale spójrz na serverfault.com/a/626576/117546 .
emory

Odpowiedzi:

104

Jest różnica, kluczowa.

Jeśli chcesz zmniejszyć priorytet procesu, kolejność nie ma znaczenia. Z drugiej strony, jeśli chcesz go zwiększyć , musisz sudowcześniej nice.

Ponieważ uruchamiasz tę komendę jako zwykły użytkownik (w przeciwnym razie sudo w ogóle nie zawracałby sobie głowy), możesz jedynie zmniejszyć priorytet swojej komendy. Ale jeśli użyjesz sudopierwszego, możesz go zwiększyć, jeśli chcesz.

ThoriumBR
źródło
21
Gratulacje, wygrywasz.
Michael Hampton
2
Jest to bardzo ważna kwestia, chociaż jako odpowiedź jest kompletna tylko wtedy, gdy wyjaśnisz, dlaczego kolejność nie ma znaczenia w przypadku podstawowym (tak jak Michael w swojej odpowiedzi).
Lekkość wyścigów z Monicą
16

Jeśli uruchomisz, nice sudomonit o podanie hasła również zostanie poprawiony, ale ponieważ poświęcisz znacznie więcej czasu na jego wpisywanie, to naprawdę nie ma większego znaczenia.

Jak zauważył ThoriumBR, jeśli obniżasz priorytet, kolejność jest nieistotna, ale jeśli chcesz podnieść priorytet, musisz (ponieważ należy to zrobić jako root), musisz użyć sudo nice.

W przeciwnym razie nie wyobrażam sobie żadnej prawdziwej różnicy.

Michael Hampton
źródło
2

Korzystając z „zasady najmniejszych uprawnień” , powinieneś uruchamiać program z uprawnieniami roota tylko wtedy, gdy ich potrzebuje, a następnie upuść je ponownie, gdy tylko ich nie będziesz już potrzebować.

Tak, istnieje różnica, jeśli istnieje exploit dla Nicei, atakujący mógłby uruchomić kod z tymi samymi uprawnieniami, co miły program.

Ponadto sudo resetuje środowisko, więc może to powodować skutki uboczne, spróbuj

$ 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

Zatem polecenie „ładne” uruchamiane przez sudo może w rzeczywistości być innym plikiem binarnym.

$ which ash
~/.local/bin/ash
$ sudo which ash
[sudo] password for jens: 
which: no ash in (/sbin:/bin:/usr/sbin:/usr/bin)
Jens Timmerman
źródło
2

Spóźniona odpowiedź:

Jeśli twój dostęp do sudo jest ograniczony do niektórych programów ( fooi barna przykład), nie będziesz mieć uprawnień do uruchamiania sudo nice foo, ale będziesz mógł uruchomić nice sudo foo.

Chris Dennis
źródło