sudo su -そしてsudo -i

sudo su -そしてsudo -i

ルートアカウントが無効になっているシステムでルートシェルを起動するには、次のいずれかのコマンドを実行できます。

  • sudo -i:対話型ログインシェルの実行(読み取り/root/.bashrc/root/.profile
  • sudo -s:非ログインインタラクティブシェルの実行(読み取り/root/.bashrc

sudo suUbuntuの世界では、これがルートシェルを取得する方法として提案されていることをよく見ています。 1つのコマンドで十分な場合に2つの別々のコマンドを実行するのはなぜですか?私が知っている限り、sudo -iそれは同等でsudo su -同じsudo -sですsudo su

唯一の違いは次のとおりです(sudo -i左とsudo su -右の比較)。

「sudo -i」と「sudo su -」を比較するmeldスクリーンショット

sudo -s(左)と(右)の比較sudo su

「sudo -s」と「sudo su」を比較するmeldスクリーンショット

SUDO_foo変数とを無視する主な違いは、バージョンのシステム変数LS_COLORSのようです。XDG_foosudo su

ややエレガントでないケースを使うべき違いはありますかsudo su?人々に走ることがまったく意味がないか、sudo su何かを逃していると安全に言うことができますか?

答え1

質問で述べたように、最大​​の違いは環境です。

sudo su -そしてsudo -i

sudo su -ログインシェルの場合を実行すると、ルート/etc/profileのホームディレクトリにあり、ルート環境を持つことになります。.profile.bashrc

sudo -isudo su -(初期ログインシミュレーション)オプションとほぼ同じで、ターゲット-iユーザーのパスワードデータベースエントリで指定されたシェルをログインシェルとして実行します。これは、ログイン固有のリソースファイル(たとえば.profile.bashrcまたは).loginがシェルから読み取られ実行されることを意味します。

sudo suそしてsudo -s

sudo susudoコマンドとして呼び出されますsu。 Bashはインタラクティブな非ログシェルとして知られています。したがってbash、を実行する.bashrcと、ルートに切り替えた後も同じディレクトリにまだ存在することがわかります。

user@host:~$ sudo su
root@host:/home/user#

sudo -s$SHELL変数を読み、内容を実行します。$SHELL含まれている場合が/bin/bash呼び出されますsudo /bin/bash。つまり、/bin/bash非ログインシェルで始まるので、ドットファイルは実行されませんが、bash独自に読み込まれます。bashrcユーザーに電話をかけます。あなたの環境は変わりません。あなたの家はルートの家ではありません。したがって、あなたはrootですが、呼び出しユーザーのコンテキストにあります。

結論として

フラグが次に-i追加されました。sudo2004年sudo su -はテンプレートsudo su -と同様の機能を提供し、テンプレートとsudo -i同じように機能するようになっています。環境が重要ではない場合、どのようなものを使用するかは重要ではないと思います。

次へ追加

ここで言及すべき基本は、sudo実行専用に設計されていることです。コマンドより高い権限を持ち、その権限を元の権限に戻してください。それは決して現実になるつもりではなかった。変化ユーザーを選択し、ルートシェルを開いたままにします。このメカニズムは時間の経過とともに拡張されました。sudoなぜすべてのコマンドの前にこのメカニズムが使用されるのかについて人々が迷惑をかけたからです。sudo

だから、その言葉の意味が間違ってsudo使われました。sudoユーザーがroot権限の使用を最小限に抑えるようにするように設計されています。

私たちが今持っていることはますます普及しsudoています。ほとんどすべてのよく知られているLinuxディストリビューションに統合されています。別のユーザーアカウントに切り替えるための元のツールはですsu。古い*nixベテランにとっては、そのようなものはsudo不要に見えるかもしれません。これは複雑さを増し、Microsoftオペレーティングシステムのファミリで知られているメカニズムと同様に機能するため、* nixシステムの単純さのアイデアに反します。

sudo私はベテランではありませんが、紹介されて以来私の脇腹にとげになったようで、sudo可能であれば使い方を常に迂回しています。私は少なくともそれを使いたいですsudo。私のすべてのシステムでrootアカウントが有効になっています。ただし、状況は変わり、いつかは廃止され、完全に置き換えsuられるsudo可能性があります。su

そのため、古いツールに頼るのではなく、sudo内部メカニズム(-s、)を使用する方が良いと思います。-isu

答え2

あなたの質問に直接答えるには:いいえ、そうする理由はありません。また、sudo su は、1 つのログエントリで十分な場合に 2 つのログエントリを生成します。

私は多くの人がこれを行うのを見て、なぜそれを実行しないのか尋ねたとき、sudo -s答えは彼らがsudoのフラグを知らず、一般的-sに私が指摘した後に切り替えるということです。

しかし、あなたとsudo -sリストに代わるsudo -iオプションをもう1つ追加したいと思います。ホームディレクトリを含む環境を保存します。ホームディレクトリが安全でない場合(NFSでは)、これは危険です。ただし、多くの人がルートを使用している環境では、ルートファイルの内容に同意する必要はありません。鉱山にはルートの専門化がたくさん含まれているので、ルートとまったく同じ環境を得ることはできませんが、少なくとも私が望む環境は得られます。sudo -sEsu -msudo -sE.bashrc.bashrc

関連情報