sudoでsuのようにルートシェルを使う方法

ルート権限でコマンドを実行する時、「sudo」を使うのが一般的ですよね。本サイトでも、以下のように「sudo」を使ったコマンド実行例を多く載せています。

sudo apt install -y lv

でも、root権限で複数のコマンドを実行する時など、毎回sudoを頭につけるのが面倒なこともあるでしょう。そんな時は、rootユーザー権限で動作する「ルートシェル」が使いたくなります。

FedoraやCentOSといったRedHat系のLinuxなら、rootユーザーのパスワードを知っていれば「su」コマンドでルートシェルを使うことができます。しかし、複数人が管理しているサーバーなどで、rootユーザーのパスワードを教えてもらっていなければ、suでルートシェルを使うことはできません。また、UbuntuやLinux Mintはデフォルトでrootユーザーのパスワードは無効化されています。

そこで、sudoでルートシェルを実行するオプションを覚えておきましょう。
sudo -s

sudo -i
の2通りがあります。

sudo -s」は、sudoを実行したユーザーのシェルがroot権限で起動します。通常、実行時のカレントディレクトリは、sudoを実行したディレクトリになります。

$ pwd
/home/lintaro
$ sudo -s
[sudo] lintaro のパスワード: 
# pwd
/home/lintaro

sudo -i」は、rootユーザーのログインシェルが実行されます。通常、実行時のカレントディレクトリは、rootユーザーのホームディレクトリ(通常は/root)となります。

$ pwd
/home/lintaro
$ sudo -i
[sudo] lintaro のパスワード: 
# pwd
/root

細かい動作はディストリビューションによって異なります。たとえば、Ubuntuの場合、「sudo -s」を実行すると環境変数HOMEは「sudoを実行したユーザーのホームディレクトリ」となり、「sudoを実行したユーザーのホームディレクトリにある.bashrc」を読み込んでルートシェルが起動します。そのため、sudoを実行したユーザーの.bashrcに記載した関数やaliasの設定がルートシェルでも使えます。一方、FedoraやCentOSで「sudo -s」を実行すると、環境変数HOMEに「/root」が設定され、「/root/.bashrc」が読み込まれます。そのため、sudoを実行したユーザーの.bashrcに追加した関数などをルートシェルで使うことはできません。

なお、ユーザー名を指定して「sudo -u ユーザー名 -s」や「sudo -u ユーザー名 -i」と実行することもできます。この場合、rootユーザーではなく指定したユーザーで実行されたシェルを使うことができます。