Чи є різниця між виконанням інтенсивного завдання над sudo за допомогою наступних команд:
- хороший судо [інтенсивна команда тут]
- sudo nice [інтенсивна команда тут]
До речі, це для Linux 3.x.
Чи є різниця між виконанням інтенсивного завдання над sudo за допомогою наступних команд:
До речі, це для Linux 3.x.
Відповіді:
Є різниця, вирішальна.
Якщо ви хочете зменшити пріоритет процесу, порядок не має значення. З іншого боку, якщо ви хочете його збільшити , ви повинні поставити sudo
раніше nice
.
Оскільки ви виконуєте команду як звичайний користувач (інакше ви б взагалі не заважали судо), ви можете лише зменшити пріоритет вашої команди. Але якщо ви скористаєтеся sudo
спочатку, ви можете збільшити його, якщо хочете.
Якщо запустити, nice sudo
то також буде вказано підказку про ваш пароль, але, оскільки ви витратите набагато більше часу, набираючи його, він насправді не має великого значення.
Як зазначав ThoriumBR, якщо ви знижуєте пріоритет, то порядок не має значення, але якщо ви хочете підвищити пріоритет, тоді (оскільки це потрібно зробити як корінь) ви повинні використовувати sudo nice
.
Інакше я не можу уявити жодної реальної різниці.
Використовуючи "принцип найменшого привілею", ви повинні запускати програму з привілеями 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)
Пізня відповідь:
Якщо ваш доступ до судо обмежений певними програмами ( foo
і bar
, наприклад), ви не матимете повноважень на запуск sudo nice foo
, але буде дозволено запускати nice sudo foo
.
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'
. Усі три повинні показати вам приємне значення для ідентифікатора процесу ($$) породженої оболонки.