次のコマンドの違いは何ですか?
su
sudo -s
sudo -i
sudo bash
su
ルートパスワードを知る必要があり、ファイルsudo
に存在する必要があることを知っていますが、一度実行するとどのような違いがありますか?sudoers
su
sudo -s
私のホームディレクトリは/root
私が実行して以来、私の間に違いがあることを知っていますが、私のsu
ホームディレクトリはまだ/home/myname
後ですsudo -s
。しかし、私はこれが私が見過ごしている根本的な違いの症状にすぎないと思います。
答え1
su
あなたと~になる他のユーザー - デフォルトはrootですが、他のユーザーにすることもできます。と言うとsu -
、ユーザーの環境もそのユーザーのログイン環境に置き換えられます。システムは、他のsu
ユーザーがログインしたときに行った操作に基づいて、他のユーザーに何をしているのかを判断できません。
状況は非常に異なりますsudo
。
実行するコマンド
sudo
実装するターゲットユーザーとして(デフォルトはルートですが変更可能です)-u
、実行するコマンドを記録し、後で責任を割り当てることができるようにユーザー名でタグ付けします。 :)sudo
とても柔軟です。たとえば、特定のユーザーまたはユーザーグループが実行できるコマンドを制限できます。それで、su
それは全部または専務です。この機能は通常、役割を定義するために使用されます。たとえば、実行が許可される
dump
「バックアップ」グループを定義でき、tar
各グループにはシステムディスクを正しくバックアップするためにrootアクセス権が必要です。ここでこれを言及する理由は、誰かに能力や能力を
sudo
付与せずに特権を付与できるという意味だからです。彼らは仕事をするために必要な権限しか持っていませんが、システム全体を実行することができます。しかし、この点には注意が必要です。たとえば、誰かに話す権限を与えると、その人はその言葉を無視して同じ権限を持つことができます。sudo -s
sudo bash
su
sudo vi
vi
sudo -s
ルートパスワードではなくsudoerパスワードを使用するため、
sudo
複数のsudoer間の権限を分離します。su
これは、ルートパスワードが変更された場合にsu
使用するためにパスワードを知る必要があるすべての人に知らせる必要がある管理上の問題を解決します。sudo
sudoerのパスワードを独立して変更できるようにします。実際、システムのrootユーザーアカウントをパスワードでロックすると、sudo
すべてのシステム管理タスクが通過しますsudo
。信頼性の高いsudoerを持つ大規模な組織では、システム管理者の1人が去ったときにルートパスワードを変更して展開する必要はありません。残りの管理者に渡します。
sudo bash
との主な違いは次のとおりsudo -s
です。
-s
~より短いbash
デフォルトのシェルで実行し
sudo -s some-command
ますが、スーパーユーザー権限で実行できます。some-command
基本的にはの略語ですsudo $SHELL -c some-command
。コマンドをシェルの標準入力に渡すことができます
sudo -s < my-shell-script
。たとえば、と一緒に使用できます。トレドックsudo
繰り返し入力を避けるために、単一の呼び出しに複数のコマンドを送信します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
予期しないコマンドが実行される可能性があるためです。最も明確なケースは修正ですが、while under then passと言う場合のようSHELL
に、それほど直接的ではないかもしれません。PAGER
man foo
sudo -s
「修正できれば、修正してPAGER
邪悪PATH
なsudo
プログラムを置き換えることができます。」と言うこともできますが、編集証がひどい人は/usr/bin/sudo /bin/bash
この罠を避けるべきだと主張することができます。あなたはあまりにも編集証的であり、すべての落とし穴を避けることはできません。その他しかし、環境変数の影響を受けやすい。EDITOR
たとえば、コマンドを実行する前に確認することを覚えていましたか?VCS注文する?したがってsudo -i
、。
sudo -i
作業ディレクトリもユーザーのホームディレクトリに変更されるため、実行しているディレクトリと同じディレクトリにsudo -s
滞在したい場合は、このディレクトリを引き続き使用できます。ただし、元の場所を行き来することは依然として安全です。cd
sudo
sudo -i
cd
時々見ることができるこれらすべてのもう一つの変形sudo su
はsudo -s
。また、sudo su -
機能面でも非常に似ていますsudo -i
。sudo
とは競合するコマンドなので、このように対に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
一般ユーザーのホームディレクトリを設定すると、問題が発生する可能性があります。たとえば、グラフィカルアプリケーションを実行している場合は、一般ユーザーのアプリケーションを~/.Xauthority
rootで上書きできます。これにより、後で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
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
以下が原因で発生する可能性があります。/etc/environment
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
最も重要なのは、sudo -i
環境に汚染されていないルートシェルが必要な場合に正しいコマンドを実行することです。
答え3
su
(S魔女あなた順序または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 command
はS魔女あなたセルヘするこのコマンド。
su
sudo -i
rootアカウントのログインと同じでシミュレーションします。作業ディレクトリは、/root
ルートディレクトリ.profile
などを読み込みます。プロンプトが $ から # に変更され、root アクセス権があることを示します。sudo -s
シェルは root で始まりますが、作業ディレクトリは変更しません。sudo bash
bash
実行するコマンドはどこにありますかsudo
?このコマンドはbash
スーパーユーザーとして実行されます。- 誰かがするすべてのことを記録するために使用します
sudo
。 - 使用すると、
sudo
ユーザーはルートパスワードを知る必要がなくなります。 - これにより、
sudo
実行できるコマンドを制限できます。