su ティーン sudo -s ティーン sudo -i ティーン sudo bash

su ティーン sudo -s ティーン sudo -i ティーン sudo bash

次のコマンドの違いは何ですか?

su
sudo -s
sudo -i
sudo bash

suルートパスワードを知る必要があり、ファイルsudoに存在する必要があることを知っていますが、一度実行するとどのような違いがありますか?sudoers

susudo -s私のホームディレクトリは/root私が実行して以来、私の間に違いがあることを知っていますが、私のsuホームディレクトリはまだ/home/myname後ですsudo -s。しかし、私はこれが私が見過ごしている根本的な違いの症状にすぎないと思います。

答え1

suあなたと~になる他のユーザー - デフォルトはrootですが、他のユーザーにすることもできます。と言うとsu -、ユーザーの環境もそのユーザーのログイン環境に置き換えられます。システムは、他のsuユーザーがログインしたときに行った操作に基づいて、他のユーザーに何をしているのかを判断できません。

状況は非常に異なりますsudo

  • 実行するコマンドsudo 実装するターゲットユーザーとして(デフォルトはルートですが変更可能です)-u、実行するコマンドを記録し、後で責任を割り当てることができるようにユーザー名でタグ付けします。 :)

  • sudoとても柔軟です。たとえば、特定のユーザーまたはユーザーグループが実行できるコマンドを制限できます。それで、suそれは全部または専務です。

    この機能は通常、役割を定義するために使用されます。たとえば、実行が許可されるdump「バックアップ」グループを定義でき、tar各グループにはシステムディスクを正しくバックアップするためにrootアクセス権が必要です。

    ここでこれを言及する理由は、誰かに能力や能力をsudo付与せずに特権を付与できるという意味だからです。彼らは仕事をするために必要な権限しか持っていませんが、システム全体を実行することができます。しかし、この点には注意が必要です。たとえば、誰かに話す権限を与えると、その人はその言葉を無視して同じ権限を持つことができます。sudo -ssudo bashsusudo vivisudo -s

  • ルートパスワードではなくsudoerパスワードを使用するため、sudo複数のsudoer間の権限を分離します。

    suこれは、ルートパスワードが変更された場合にsu使用するためにパスワードを知る必要があるすべての人に知らせる必要がある管理上の問題を解決します。sudosudoerのパスワードを独立して変更できるようにします。実際、システムのrootユーザーアカウントをパスワードでロックすると、sudoすべてのシステム管理タスクが通過しますsudo。信頼性の高いsudoerを持つ大規模な組織では、システム管理者の1人が去ったときにルートパスワードを変更して展開する必要はありません。残りの管理者に渡します。

sudo bashとの主な違いは次のとおりsudo -sです。

  1. -s~より短いbash

  2. デフォルトのシェルで実行しsudo -s some-commandますが、スーパーユーザー権限で実行できます。some-command基本的にはの略語ですsudo $SHELL -c some-command

  3. コマンドをシェルの標準入力に渡すことができますsudo -s < my-shell-script。たとえば、と一緒に使用できます。トレドックsudo繰り返し入力を避けるために、単一の呼び出しに複数のコマンドを送信しますsudo

  4. これらの追加のコマンド引数がなくても他のシェルで実行できるため、sudo -sまだ異なります。まず、環境変数を見てから設定されていない場合は、ユーザーのログインシェル設定(通常は。sudo bashbashSHELL/etc/passwd

実行中のシェルはsudo -s現在のユーザーエクスペリエンスを継承します。本当に欲しいものがログイン後に得られるようなきれいな環境であれば、欲しいものは次のとおりsudo -iですsudo。おおまかに言えば、sudo -iこれは次のようになりますsudo -ssu -いくつsuかの主要な環境変数を除くすべての変数をリセットし、元の状態に戻ります。ユーザーのホームディレクトリ。標準入力またはコマンドを介してそのシェルで実行するようにコマンドを指定しないと、そのシェルはsudo -i some-command対話型ログインシェルとして実行されるため、ユーザーのシェル起動スクリプト(たとえば.bash_profile)が再実行される可能性があります。

これらはすべてsudo -isudo -sなぜ?誰かが以前に環境を変更できた場合、sudo -s予期しないコマンドが実行される可能性があるためです。最も明確なケースは修正ですが、while under then passと言う場合のようSHELLに、それほど直接的ではないかもしれません。PAGERman foosudo -s

「修正できれば、修正してPAGER邪悪PATHsudoプログラムを置き換えることができます。」と言うこともできますが、編集証がひどい人は/usr/bin/sudo /bin/bashこの罠を避けるべきだと主張することができます。あなたはあまりにも編集証的であり、すべての落とし穴を避けることはできません。その他しかし、環境変数の影響を受けやすい。EDITORたとえば、コマンドを実行する前に確認することを覚えていましたか?VCS注文する?したがってsudo -i、。

sudo -i作業ディレクトリもユーザーのホームディレクトリに変更されるため、実行しているディレクトリと同じディレクトリにsudo -s滞在したい場合は、このディレクトリを引き続き使用できます。ただし、元の場所を行き来することは依然として安全です。cdsudosudo -icd

時々見ることができるこれらすべてのもう一つの変形sudo susudo -s。また、sudo su -機能面でも非常に似ていますsudo -isudoとは競合するコマンドなので、このように対にsuするのが少し奇妙なので、代わりにフラグを使用することをお勧めしますsudo

答え2

からUbuntuフォーラム投稿私はしばらく前にこれをしました。

次の実験を検討してください。

applic@ion:~% sudo su
[sudo] password for applic:
root@ion:/home/applic# env > /tmp/sudo_su_env
root@ion:/home/applic# exit
exit
applic@ion:~% sudo -s
applic .bashrc read...
root@ion:~% env >/tmp/sudo_s

私が見つけた違いは次のとおりです。

そしてsudo -s

HOME=/home/applic
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
reads $USER's ~/.bashrc

そしてsudo su

HOME=/root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
reads /etc/environment
reads /root/.bashrc

違いを参照してください$HOME。ルートになって$HOME一般ユーザーのホームディレクトリを設定すると、問題が発生する可能性があります。たとえば、グラフィカルアプリケーションを実行している場合は、一般ユーザーのアプリケーションを~/.Xauthorityrootで上書きできます。これにより、後でcronを介して特定のグラフィックアプリケーションを実行できないなど、一般的なユーザーの問題が発生する可能性があります。

結論として:

                                     corrupted by user's 
        HOME=/root  uses root's PATH     env vars
sudo -i     Y       Y[2]                 N
sudo -s     N       Y[2]                 Y
sudo bash   N       Y[2]                 Y
sudo su     Y       N[1]                 Y
  1. PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games 以下が原因で発生する可能性があります。/etc/environment
  2. PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin

最も重要なのは、sudo -i環境に汚染されていないルートシェルが必要な場合に正しいコマンドを実行することです。

答え3

suS魔女あなた順序またはS代替あなたser)を使用すると、ユーザーを切り替えることができます。suデフォルトでは、ターゲットユーザーの権限で別のシェルインスタンスを起動します。デフォルトでは、ユーザーをユーザーに切り替えますroot。特定のユーザーを切り替えるには、次のようにユーザーを転送する必要があります。

$ su bob  # switches to bob (requires bob's password)

su -環境変数がルートにリセットされ、su環境変数が以前のユーザーであることを示します。

たとえば、ルートのホームディレクトリを使用したり、su -.oldを使用している場合は、ユーザーのホームディレクトリですsu

Sudo(S上層あなたセレする)は、ユーザーが他のユーザー(デフォルトではスーパーユーザー)のセキュリティ権限でプログラムを実行できるようにするコマンドラインユーティリティですroot/etc/sudoers特定のタスクを実行する権限を持つユーザーを一覧表示する構成ファイルを使用します。

sudoは読むべきです/ˈsuːduː/。文法sudo commandS魔女あなたセルヘするこのコマンド。

  • susudo -irootアカウントのログインと同じでシミュレーションします。作業ディレクトリは、/rootルートディレクトリ.profileなどを読み込みます。プロンプトが $ から # に変更され、root アクセス権があることを示します。

  • sudo -s シェルは root で始まりますが、作業ディレクトリは変更しません。

  • sudo bashbash実行するコマンドはどこにありますかsudo?このコマンドは bashスーパーユーザーとして実行されます。

  • 誰かがするすべてのことを記録するために使用しますsudo
  • 使用すると、sudoユーザーはルートパスワードを知る必要がなくなります。
  • これにより、sudo実行できるコマンドを制限できます。

関連情報