sudo実行時の$HOMEの扱いをどうするか
現在「Ubuntu」では、「sudo」コマンド実行時の「$HOME」環境変数は、「sudo」を実行したユーザーの「$HOME」を継承しています。「$HOME」はユーザーのホームディレクトリーのパスが設定される環境変数です。
ホームディレクトリー
例えば「ubuntu」ユーザーのホームディレクトリーは、「/home/ubuntu」です。「ubuntu」ユーザーから見れば、「~/」と同じですね。
そして「ubuntu」ユーザーが「sudo」を実行すると、「sudo」実行時の「$HOME」は「/home/ubuntu」に設定されます。
通常「sudo」は「root」でコマンドを実行する時に利用します。
「root」ユーザーのホームディレクトリーは「/root」ですが、上記の振る舞いのため「$HOME」に「/home/ubuntu」が設定され「/root」にはなりません。
他と振る舞いが異なる
この「sudo」の振る舞いは、アップストリームや他のUNIX系OS、そして「Ubuntu」自身が提供している「sudo」のドキュメントに書かれている内容とも異なります。そこで「Ubuntu」が「sudo」にあてているカスタムパッチを削除したほうが良いのか、以下で議論が行われています。
またもしカスタムパッチを削除するなら、「Ubuntu 19.10」以降での変更も提案されています。
この振る舞いに関する詳細は、以下を参照してください。
メリット
現在の振る舞いによる利便性は、設定ファイルの継承です。「sudo vim」実行時に「sudo」を実行したユーザーの設定ファイルがそのまま利用されます。
ユーザーが「vim」環境を最適化した設定ファイルを、わざわざ「/root」にコピーしなくても、いつもの「vim」環境が利用できるわけです。
また各ユーザーごとに設定ファイルを分けることができます。
デメリット
他のOSから「Ubuntu」に来た新規ユーザーは、今まで利用していたOSの「sudo」と振る舞いが異なるため、混乱するかも知れません。加えて「Ubuntu」のドキュメントにもこの振る舞いが記述されていないため、分かりにくさがあります。
またユーザーのホームディレクトリーに「root」が所有者のファイルが作成されてしまい、ユーザーからアクセスできない現象が発生する原因になります。
アップストリームでは
アップストリームでは、「$HOME」をデフォルトで「env_keep」に追加し、「Ubuntu」と同じ振る舞いにする/なる可能性について、まずその可能性はないとの回答が寄せられています。「sudo 1.7.4」より前では、「$HOME」と「$MAIL」環境変数がデフォルトで維持されていました。
しかしこの方法は、「sudo」を実行したユーザーのホームディレクトリーにある設定ファイルを使用するプログラムにセキュリティ上の懸念が広がる可能性があり、このデフォルトの振る舞いは「sudo 1.7.4」で変更されました。
かつて「sudo」は、「uid」を変更すること以上のことをしていました。
しかし最近の「sudo」は、「sudo」によって切り替えられたユーザーとほぼ同じ環境でコマンドの実行を試みます。
これにより他のプログラムが実行時に想定する環境により近い環境になり、安全性の向上に繋がっています。
これらを踏まえデフォルトで「$HOME」を継承しない振る舞いが勧められています。
「Ubuntu 19.10」以降、「sudo」の振る舞いが変わる可能性がありますね。