タイトルが言うように、これらの2つのコマンドには違いがありますか?
Sudo su - root
Sudo -u root -H /bin/bash
それが違いを生むなら、私はGNU/Linuxを使っています。
Rootになりたい場合は、Sudo -i
が最善の方法です。これは、初期ログインをシミュレートします(rootログインに関連付けられたすべてのパスと変数を提供します)。 rootユーザーを取得せずにログインしたい場合。filesを使用すると、Sudo su
を使用できます(rootユーザーを指定する必要はありません)。
su - # causes the user to run a login Shell aka bash --login
# the same as if the user had logged in as the root from the login Prompt
Sudo su -
はSudo su - root
と同じで、ルートが冗長であることを指定します。
Sudo -u root -H /bin/bash
も-u root
は冗長です。Sudo
はデフォルトでrootとして実行されますが、-H /bin/bash
はsudoerとして実行され、env vars Sudo_USER、Sudo_UIDおよびSudo_COMMANDは呼び出し元の名前/ uidとbashです。
ただし、この場合、bashはログインシェルとして実行されません。
ルートシェルが/ bin/bashでない場合、明らかに異なる可能性があります。これは、小さなLinux環境または組み込みLinux環境で可能です。または、従来のBSDシステムでは、ルートユーザーに/ bin/[t] cshを使用します。また、 `su-'は、端末に関連するいくつかの変数を除くすべての環境を削除します。環境でのSudoの動作は構成可能です(/ etc/sudoersのenv_resetを参照)。だから、細心の注意を払ってください...
リストした2つのコマンドの最大の違いは、su -
は、シェルをログインシェルにします。つまり、ルートのシェルのログインスクリプトが実行され(bashの場合、たとえば.bash_profile)、PWDが$ HOMEに設定され、ユーザー環境の特定の部分が初期化されます。 Sudo bash
は、ターゲットユーザーのシェルとして新しいシェルを実行するだけで、-Hは1つの変数$ HOMEをターゲットユーザーのホームディレクトリに初期化するだけです。他の変数は設定されず、Sudoポリシーで定義されているように、一部は新しいシェルに引き継がれます。