ルートアカウントが無効になっているマシンでルートシェルを起動するには、次のいずれかを実行できます。
-
sudo -i
:インタラクティブログインシェルを実行します(/root/.bashrc
を読み取ります および/root/.profile
) -
sudo -s
:非ログインインタラクティブシェルを実行します(/root/.bashrc
を読み取ります) )
Ubuntuの世界では、sudo su
をよく目にします。 ルートシェルを取得する方法として提案されました。 1つが実行するのに、なぜ2つの別々のコマンドを実行するのですか?私の知る限り、sudo -i
sudo su -
と同等です およびsudo -s
sudo su
と同じです 。
唯一の違いは(sudo -i
との比較)のようです 左側とsudo su -
右側):
そして、sudo -s
を比較します (左)とsudo su
(右):
主な違い(SUDO_foo
を無視する 変数とLS_COLORS
)XDG_foo
のようです sudo su
のシステム変数 バージョン。
その違いがかなりエレガントでないsudo su
を使用することを正当化する場合はありますか ? sudo su
を実行しても意味がないことを(私がよく知っているように)安全に人々に伝えることはできますか? または私は何かが足りないのですか?
承認された回答:
質問で述べたように、主な違いは環境です。
sudo su -
vs. sudo -i
sudo su -
の場合 ログインシェルなので、/etc/profile
、.profile
および.bashrc
が実行され、rootの環境を含むrootのホームディレクトリに移動します。
sudo -i
sudo su -
とほぼ同じです -i
(初期ログインのシミュレーション)オプションは、ターゲットユーザーのパスワードデータベースエントリで指定されたシェルをログインシェルとして実行します。これは、.profile
などのログイン固有のリソースファイルを意味します 、.bashrc
または.login
シェルによって読み取られ、実行されます。
sudo su
vs. sudo -s
sudo su
sudo
を呼び出します コマンドsu
。 Bashはインタラクティブな非ログインシェルと呼ばれます。したがって、bash
.bashrc
のみを実行します 。ルートに切り替えた後も、同じディレクトリにいることがわかります。
[email protected]:~$ sudo su
[email protected]:/home/user#
sudo -s
$SHELL
を読み取ります 変数とコンテンツを実行します。 $SHELL
の場合 /bin/bash
が含まれています sudo /bin/bash
を呼び出します 、つまり/bin/bash
非ログインシェルとして開始されるため、すべてのドットファイルは実行されませんが、bash
それ自体は。bashrc
を読み取ります 呼び出し元のユーザーの。あなたの環境は同じままです。あなたの家は根の家ではありません。つまり、あなたはルートですが、呼び出し元のユーザーの環境にいます。
結論
-i
sudo
にフラグが追加されました 2004年に、sudo su -
と同様の機能を提供する 、したがってsudo su -
sudo -i
のテンプレートでした そしてそれのように働くことを意味しました。環境が重要でない限り、どちらを使用してもかまいません。
追加
ここで言及しなければならない基本的なポイントは、sudo
1つのコマンドのみを実行するように設計されています より高い特権を使用して、それらの特権を元の特権にドロップします。本当に切り替えることを意図したものではありませんでした ユーザーとルートシェルを開いたままにします。時間の経過とともに、sudo
sudo
を使用する理由に人々が悩まされたため、このようなメカニズムで拡張されました すべてのコマンドの前に。
つまり、sudo
の意味 虐待されました。 sudo
ルート権限の使用を最小限に抑えるようにユーザーを促すことを目的としています。
私たちが今持っているのはsudo
ますます人気があります。これは、ほぼすべてのよく知られたLinuxディストリビューションに統合されています。別のユーザーアカウントに切り替えるための元のツールはsu
です 。古い学校の場合*nixのベテランsudo
のようなもの 不必要に思えるかもしれません。これは複雑さを増し、MicrosoftのOSファミリで知られているメカニズムに対してより可能性が高いため、*nixシステムの単純さの哲学に反しています。
私はベテランではありませんが、私の意見ではsudo
紹介された時からいつも私の側のとげでした、そして私はいつもsudo
の使用法を回避しました 、可能であれば。 sudo
を使用するのは最も気が進まない 。すべてのシステムで、rootアカウントが有効になっています。しかし、状況は変わります。おそらく、su
の時が来るでしょう。 非推奨になり、sudo
su
を置き換えます 完全に。
したがって、sudo
を使用するのが最適だと思います の内部メカニズム(-s
、-i
)su
などの古いツールに依存する代わりに 。