ルートアカウントが無効になっているマシンでルートシェルを起動するには、次のいずれかを実行します。
Sudo -i
:インタラクティブログインシェルを実行します(/root/.bashrc
および/root/.profile
を読み取ります)Sudo -s
:ログイン以外のインタラクティブシェルを実行します(/root/.bashrc
を読み取ります)Ubuntuの世界では、ルートシェルを取得する方法としてSudo su
の提案がよく見られます。なぜ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 -
対Sudo -i
Sudo su -
の場合、これはログインシェルであるため、/etc/profile
、.profile
、および.bashrc
が実行され、ルートの環境のあるルートのホームディレクトリに移動します。
Sudo -i
はSudo su -
とほぼ同じです。-i
(初期ログインをシミュレート)オプションは、ターゲットユーザーのパスワードデータベースエントリで指定されたシェルをログインシェルとして実行します。つまり、.profile
、.bashrc
、.login
などのログイン固有のリソースファイルがシェルによって読み取られ、実行されます。
Sudo su
対Sudo -s
Sudo su
は、コマンドSudo
でsu
を呼び出します。 Bashはインタラクティブな非ログインシェルと呼ばれます。したがって、bash
は.bashrc
のみを実行します。 rootに切り替えた後も、同じディレクトリにいることがわかります。
user@Host:~$ Sudo su
root@Host:/home/user#
Sudo -s
は$Shell
変数を読み取り、コンテンツを実行します。 $Shell
に/bin/bash
が含まれている場合、Sudo /bin/bash
が呼び出されます。つまり、/bin/bash
は非ログインシェルとして起動されるため、すべてのドットファイルは実行されませんが、bash
自体は読み取ります呼び出し元ユーザーの.bashrc
。環境は変わりません。あなたの家は根の家にはなりません。つまり、あなたはrootですが、呼び出し元のユーザーの環境にいます。
-i
フラグは、_ 2004 でSudo
に追加され、Sudo su -
と同様の機能を提供するため、Sudo su -
はSudo -i
のテンプレートであり、そのように動作するように。環境が重要でない限り、どちらを使用してもかまいません。
ここで言及しなければならない基本的なポイントは、Sudo
がより高い特権で1つのコマンドのみを実行し、それらの特権を元のコマンドにドロップするように設計されていることです。ユーザーを本当にswitchし、ルートシェルを開いたままにすることを意図したものではありません。時間の経過とともに、Sudo
はそのようなメカニズムで拡張されました。なぜなら、すべてのコマンドの前でSudo
を使用する理由に人々は悩まされていたからです。
したがって、Sudo
の意味が悪用されました。 Sudo
は、root権限の使用を最小限に抑えるようユーザーに促すことを目的としています。
現在、Sudo
の人気が高まっています。よく知られているほぼすべてのLinuxディストリビューションに統合されています。別のユーザーアカウントに切り替える元のツールはsu
です。古い学校* nixのベテランの場合、Sudo
のようなものは不要に思えるかもしれません。これにより、Microsoftのosファミリでわかっているメカニズムが複雑になり、動作しやすくなるため、* nixシステムの単純さの哲学に反します。
私は本当にベテランではありませんが、私の意見では、Sudo
はいつも私の側にとげがありました。導入されたときから、可能であれば、Sudo
の使用方法を常に回避していました。 Sudo
を使用するのが最も嫌です。私のすべてのシステムで、rootアカウントが有効になっています。しかし、状況は変化します。おそらくsu
が廃止され、Sudo
がsu
に完全に置き換わる時が来るでしょう。
したがって、Sudo
などの古いツールに依存するのではなく、su
の内部メカニズム(-s
、-i
)を使用するのが最善だと思います。
質問に直接回答するには:いいえ、これを行う正当な理由はありません。また、Sudo suは、1つで十分な場合に2つのログエントリを生成します。
多くの人がこれを行っているのを見てきました。なぜSudo -s
を実行しないのかと尋ねると、答えは、Sudoへの-s
フラグについて知らないということです。指摘したら切り替えます。
ただし、Sudo -s
とSudo -i
のリストに、Sudo -sE
の代わりとなるオプションsu -m
をもう1つ追加したいと思います。 Sudo -sE
は、ホームディレクトリを含む環境を保持します。ホームディレクトリが安全でない場合(NFS上)、これにはリスクがあります。しかし、多くの人がルートを使用する環境では、ルート.bashrc
ファイルの内容に同意する必要がなくなります。私の.bashrc
にはrootの多くの特殊化が含まれているため、rootとまったく同じ環境を取得することはできませんが、少なくとも希望する環境を取得できます。