приємно судо чи судо приємно?


53

Чи є різниця між виконанням інтенсивного завдання над sudo за допомогою наступних команд:

  1. хороший судо [інтенсивна команда тут]
  2. sudo nice [інтенсивна команда тут]

До речі, це для Linux 3.x.


6
Щоб допомогти вам перевірити бачення nice bash -c 'ps -p $$ -o pid,ni,comm', і sudo nice bash -c 'ps -p $$ -o pid,ni,comm', і nice sudo bash -c 'ps -p $$ -o pid,ni,comm'. Усі три повинні показати вам приємне значення для ідентифікатора процесу ($$) породженої оболонки.
Зоредаче

@Zoredache, хоча я вважаю, що ваш коментар ДУЖЕ конструктивний, ми повинні сказати, що всі вони матимуть однакове приємне значення, оскільки воно передається у спадок при розщепленні, що має бути фактичною відповіддю на питання.
Florin Asăvoaie

3
@FlorinAsavoaie, якщо ви думаєте, що це відповідь, то будь ласка, не соромтесь додати це. Я додав свій вище коментар як спосіб перевірити речі, оскільки я особисто не був на 100% впевнений у тому, що станеться, і вирішив знайти команду, яка могла б показати гарне значення за допомогою різних викликів. Я в таборі, який, як правило, вважає за краще тестувати тест, який показує, що все працює так, як і належить.
Zoredache

@FlorinAsavoaie Я б теж так подумав, але подивіться на serverfault.com/a/626576/117546 .
emory

Відповіді:


104

Є різниця, вирішальна.

Якщо ви хочете зменшити пріоритет процесу, порядок не має значення. З іншого боку, якщо ви хочете його збільшити , ви повинні поставити sudoраніше nice.

Оскільки ви виконуєте команду як звичайний користувач (інакше ви б взагалі не заважали судо), ви можете лише зменшити пріоритет вашої команди. Але якщо ви скористаєтеся sudoспочатку, ви можете збільшити його, якщо хочете.


21
Вітаю, ви виграєте.
Майкл Хемптон

2
Це дуже важливий момент, хоча, як відповідь, він є повним лише тоді, коли ви пояснюєте, чому наказ не має значення в базовому випадку (як це робить Майкл у своїй відповіді).
Гонки легкості з Монікою

16

Якщо запустити, nice sudoто також буде вказано підказку про ваш пароль, але, оскільки ви витратите набагато більше часу, набираючи його, він насправді не має великого значення.

Як зазначав ThoriumBR, якщо ви знижуєте пріоритет, то порядок не має значення, але якщо ви хочете підвищити пріоритет, тоді (оскільки це потрібно зробити як корінь) ви повинні використовувати sudo nice.

Інакше я не можу уявити жодної реальної різниці.


2

Використовуючи "принцип найменшого привілею", ви повинні запускати програму з привілеями root, лише якщо вона їм потрібна, а потім скидати їх знову, як тільки вони вам більше не потрібні.

Так, так, є різниця, якщо є експлуатування приємного, зловмисник може запустити код з тими ж привілеями, що і хороша програма.

Крім того, sudo скидає ваше оточення, тому це може пом'якшити побічні ефекти, спробуйте

$ 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

Отже команда 'nice', яку ви запускаєте через sudo, може насправді бути іншою бінарною.

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

2

Пізня відповідь:

Якщо ваш доступ до судо обмежений певними програмами ( fooі bar, наприклад), ви не матимете повноважень на запуск sudo nice foo, але буде дозволено запускати nice sudo foo.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.