ルートアカウントが無効になっているマシンでルートシェルを起動するには、次のいずれかを実行できます。
-
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などの古いツールに依存する代わりに 。