次のコマンドでsudoを介して集中タスクを実行するのに違いはありますか?:
- nice sudo [ここに集中的なコマンド]
- sudo nice [集中的なコマンドはこちら]
ところで、これはLinux 3.x用です。
次のコマンドでsudoを介して集中タスクを実行するのに違いはありますか?:
ところで、これはLinux 3.x用です。
回答:
重要な違いがあります。
プロセスの優先度を下げたい場合、順序は関係ありません。一方、それを増やしたい場合は、sudo
前に置く必要がありますnice
。
通常のユーザーとしてコマンドを実行しているため(そうでない場合は、sudoをまったく使用しません)、コマンドの優先順位のみを下げることができます。ただし、sudo
最初に使用する場合は、必要に応じて増やすことができます。
実行するnice sudo
と、パスワードのプロンプトも改善されますが、それを入力するのにはるかに多くの時間を費やすので、それは本当に重要ではありません。
ThoriumBRが述べたように、優先度を下げる場合、順序は関係ありませんが、優先度を上げたい場合は(これはルートとして実行する必要があるため)を使用する必要がありますsudo nice
。
そうでなければ、本当の違いは想像できません。
「最小限の特権の原則」を使用すると、必要な場合にのみroot特権でプログラムを実行し、不要になったらすぐに再度ドロップする必要があります。
そのため、はい、違いがあります。もし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
したがって、sudoを介して実行する「素敵な」コマンドは、実際には異なるバイナリになる可能性があります。
$ which ash
~/.local/bin/ash
$ sudo which ash
[sudo] password for jens:
which: no ash in (/sbin:/bin:/usr/sbin:/usr/bin)
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'
。3つすべてが、生成されたシェルのプロセスID($$)のnice値を表示するはずです。