を使用su
すると、別のユーザーになります。デフォルトではルートですが、潜在的に別のユーザーになります。と言うsu -
場合、環境はそのユーザーのログイン環境にも置き換えられるため、表示される内容はそのユーザーとしてログインすることと区別できません。su
別のユーザーがログインしたときに、そのユーザーによるアクションから、ユーザーが何をしているのかをシステムが伝える方法はありません。
物事は非常に異なっていsudo
ます:
sudo
実行するコマンドは、ターゲットユーザーとして実行されます(デフォルトではrootですが、変更可能です)が-u
、実行するコマンドをログに記録し、ユーザー名でタグ付けして、後で責任を割り当てることができます。:)
sudo
非常に柔軟です。たとえば、特定のユーザーまたはユーザーのグループが実行できるコマンドを制限できます。でsu
、それはすべてまたは何もありません。
この機能は通常、ロールを定義するために使用されます。たとえば、実行dump
を許可する「バックアップ」グループを定義tar
し、システムディスクを適切にバックアップするためにそれぞれルートアクセスを必要とします。
誰かにsudo
権限sudo -s
やsudo bash
能力を与えることなく、誰かに特権を与えることができることを意味するため、ここでこれについて言及します。su
システム全体を実行しているのに対し、彼らは仕事をするのに必要な権限しか持っていません。ただし、これに注意する必要があります。sudo vi
たとえば、誰かに発言する能力を与えた場合、相手はから脱出vi
して、実質的にの場合と同じ力を持つことができますsudo -s
。
ルートパスワードの代わりにsudoerのパスワードを使用するため、複数のsudoer sudo
間のアクセス許可を分離します。
これにより、管理上の問題が解決されsu
ます。つまり、rootパスワードが変更された場合、使用するためにパスワードを知っていなければならなかったすべての人に通知するsu
必要がありました。sudo
sudoersのパスワードを個別に変更できます。実際、システム上のrootユーザーのアカウントをパスワードロックして、sudo
すべてのsysadminタスクをを介して強制的に実行するのが一般的ですsudo
。多くの信頼できるsudoerを使用する大規模な組織では、sysadminの1人が去っても、rootパスワードを変更して残っている管理者に配布する必要はありません。
主な違いsudo bash
とはsudo -s
つまり-s
短く、あなたはいくつかの方法で、ユーザーのデフォルトのシェルで実行するコマンドを渡すことができます:
sudo -s some-command
どちらがsome-command
シェルの下で実行されるかを言うことができます。基本的にの略記ですsudo $SHELL -c some-command
。
代わりに、コマンドをシェルの標準入力に渡すことができます(例:)sudo -s < my-shell-script
。これをヒアドキュメントで使用すると、複数のコマンドを1回のsudo
呼び出しに送信でき、sudo
繰り返し入力する必要がなくなります。
これらの動作は両方ともオプションです。はるかに一般的には、-s
単独で与えるので、ユーザーのシェルをインタラクティブに実行するだけです。そのモードでは、最初に環境変数を調べ、それが設定されていない場合はユーザーのログインシェル設定(通常は)であるため、とはsudo bash
異なるシェルを実行する可能性があるという点で異なります。bash
SHELL
/etc/passwd
によって実行されるシェルはsudo -s
、現在のユーザー環境を継承します。ログイン直後に取得するように、実際に必要なのがクリーンな環境である場合、代わりに必要なのはsudo -i
、に比較的最近追加されたものsudo
です。大雑把に言えば、sudo -i
にあるsudo -s
ようsu -
にされsu
、それはいくつかの重要な環境変数が、すべてをリセットし、ユーザーのホームディレクトリに戻りますを送信します。標準入力またはを介してそのシェルの下で実行するコマンドも指定しない場合sudo -i some-command
、そのシェルは対話型ログインシェルとして実行されるため、ユーザーのシェルスタートアップスクリプト(例.bash_profile
)が再度実行されます。
これのすべてはsudo -i
かなりより安全になりsudo -s
ます。どうして?前に誰かがあなたの環境を変更sudo -s
できると、意図しないコマンドが実行される可能性があるためです。最も明白な場合は変更しているSHELL
が、それはまた、このような介するなど、あまり直接発生する可能性がありますPAGER
あなたが言う場合はman foo
下にある間sudo -s
。
「変更できる場合PAGER
、変更できる場合PATH
、悪意のあるsudo
プログラムを代用できる場合があります」と言うかもしれませんが、だまされやすい人は/usr/bin/sudo /bin/bash
そのtrapを避けるように言うことができます。あなたはおそらくあまりにも妄想的ではないので、他のすべての影響を受けやすい環境変数のトラップも避けます。EDITOR
たとえば、VCSコマンドを実行する前に、を確認することも忘れていませんか?したがってsudo -i
。
sudo -i
作業ディレクトリもユーザーのホームディレクトリに変更されるため、実行時に使用sudo -s
していたディレクトリと同じディレクトリにとどまることがわかっている状況で使用したいcd
場合がありますsudo
。ただし、あなたがいた場所に戻っsudo -i
たりcd
戻ったりするのはまだ安全です。
sudo su -
ルートパスワードを必要とせず-
、ホームディレクトリが正しく設定されていることを確認するために、この方法を使用することを好みます。