хороший sudo или хороший sudo?

53

Есть ли разница между выполнением интенсивной задачи над sudo с помощью следующих команд ?:

  1. хороший sudo [интенсивная команда здесь]
  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%, что произойдет, и я решил найти команду, которая могла бы показать хорошее значение с различными вызовами. Я нахожусь в лагере, который, как правило, предпочитает проводить тесты, которые показывают, что все работает так, как они должны.
Зоредаче
@FlorinAsavoaie Я бы тоже так подумал, но посмотрите на serverfault.com/a/626576/117546 .
Эмори

Ответы:

104

Есть разница, решающая.

Если вы хотите уменьшить приоритет процесса, порядок не имеет значения. С другой стороны, если вы хотите увеличить его, вы должны поставить sudoраньше nice.

Поскольку вы запускаете команду как обычный пользователь (иначе вы вообще не будете беспокоиться о sudo), вы можете только уменьшить приоритет своей команды. Но если вы используете sudoсначала, вы можете увеличить его, если хотите.

ThoriumBR
источник
21
Поздравляю, ты выиграл.
Майкл Хэмптон
2
Это очень важный момент, хотя в качестве ответа он завершается только тогда, когда вы объясняете, почему порядок не имеет значения в базовом случае (как Майкл делает в своем ответе).
Легкость гонок с Моникой
16

Если вы запустите, nice sudoзапрос пароля также будет замечен, но, поскольку вы будете тратить гораздо больше времени на его ввод, это не имеет большого значения.

Как отметил ThoriumBR, если вы понижаете приоритет, то порядок не имеет значения, но если вы хотите повысить приоритет, то (так как это должно быть сделано как root) вы должны использовать sudo nice.

Иначе я не могу представить никакой реальной разницы.

Майкл Хэмптон
источник
2

Используя «принцип наименьших привилегий», вы должны запускать программу с привилегиями суперпользователя только в том случае, если она им нужна, а затем отбрасывать их снова, как только они вам больше не нужны.

Так что да, есть разница: если есть уязвимость для nice, злоумышленник может запустить код с теми же привилегиями, что и для nice.

Кроме того, 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

Поздний ответ:

Если ваш доступ к sudo ограничен определенными программами ( fooи bar, например), у вас не будет прав для запуска sudo nice foo, но вам будет разрешено работать nice sudo foo.

Крис Деннис
источник