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初期ログインをシミュレートすることです(ルートログインに関連するすべてのパスと変数を提供)。 rootユーザーなしでログインする場合文書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また、デフォルトではrootとして実行されますが、 sudoerで-u root実行される冗長環境変数SUDO_USER、SUDO_UID、およびSUDO_COMMANDは、それぞれ呼び出し元名/ uidおよびbashに設定されます。 sudo-H /bin/bash

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

答え3

明らかに、ルートシェルが/bin/bashでない場合は異なる場合があります。これは、マイクロまたは組み込みLinux環境で、またはrootユーザーが/ bin / [t] cshを好む既存のBSDシステムで可能です。また、「su -」は、一部の端末関連変数を除くすべての環境を削除します。環境では、sudoの動作は設定可能です(/ etc / sudoersのenv_resetを参照)。だから細かい部分まで注意深く見てください...

答え4

リストされている2つのコマンドの主な違いは、実行するとシェルがsu -ログインシェルになることです。これは、ルートシェルのログインスクリプトが実行され(例:bashの場合は.bash_profile)、PWDが$ HOMEに設定され、環境の一部が初期化されることを意味します。 sudo bashターゲットユーザーのシェルで新しいシェルを実行すると、-Hは$ HOME変数をターゲットユーザーのホームディレクトリに初期化します。他の変数は設定されておらず、一部の変数はsudoポリシーで定義されているように新しいシェルに転送されます。

関連情報