sudo su - root と sudo -u root -H /bin/bash には違いがありますか?

sudo su - root と sudo -u root -H /bin/bash には違いがありますか?

タイトルにあるように、次の 2 つのコマンドには違いがありますか :

sudo su - root
sudo -u root -H /bin/bash

違いがあるかどうかはわかりませんが、私は GNU/Linux を使用しています。

答え1

ルートになりたい場合、最も良い方法はsudo -i、初期ログインをシミュレートする(ルートログインに関連するすべてのパスと変数を提供する)ことです。ルートユーザーを取得せずにログインしたい場合は、.ファイル、単に使用できますsudo su(root ユーザーを指定する必要はありません)。

答え2

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/bashsudoer として実行され、環境変数 SUDO_USER、SUDO_UID、および SUDO_COMMAND はそれぞれ呼び出し元の名前/uid と bash に設定されます。

しかし、この場合、bash はログイン シェルとして実行されません。

答え3

明らかに、ルート シェルが /bin/bash でない場合は、異なる可能性があります。これは、小規模または組み込み Linux 環境の場合、またはルート ユーザーに /bin/[t]csh を優先する BSD システムの場合に可能です。また、`su -' は、ターミナルに関連するいくつかの変数を除いて、すべての環境を削除します。sudo の環境に対する動作は構成可能です (/etc/sudoers の env_reset を参照)。したがって、詳細には注意してください...

答え4

リストした 2 つのコマンドの最大の違いは、実行するとsu -シェルがログイン シェルになることです。つまり、ルートのシェルのログイン スクリプトが実行され (たとえば、bash の場合は .bash_profile)、PWD が $HOME に設定され、ユーザー環境の特定の部分が初期化されます。 sudo bashは、新しいシェルをターゲット ユーザーのシェルとして実行し、-H は 1 つの変数 $HOME をターゲット ユーザーのホーム ディレクトリに初期化します。その他の変数は設定されず、sudo ポリシーで定義されているように、一部は新しいシェルに引き継がれます。

関連情報