UbuntuとDebianはsudo権限を持つユーザーの$ HOMEをどのように管理しますか?

UbuntuとDebianはsudo権限を持つユーザーの$ HOMEをどのように管理しますか?

myhome.sh1行だけを含むbashスクリプトがあります。

echo $HOME

このスクリプトの所有者は次のユーザーです。

$ ls -l myhome.sh
-rw-rw-r-- 1 user user <date> <time> myhome.sh

存在するUbuntu 16.04と17.10私は得る:

$ echo $HOME
/home/user

$ sudo echo $HOME
/home/user

$ bash myhome.sh
/home/user

$ sudo bash myhome.sh
/home/user

存在するDebian バスター/テスト私は得る:

$ echo $HOME
/home/user

$ sudo echo $HOME
/home/user

$ bash myhome.sh
/home/user

# WHY ?
$ sudo bash myhome.sh
/root

$HOME=/rootDebianスクリプトでsudoとして実行すると、常にUbuntuに入る理由を理解できません$HOME=/home/user。 Ubuntu開発者が何を変更したのかを知っている人はいますか?

ベストアンサー1

DebianとUbuntuの両方に環境変数をリセットする/etc/sudoersファイルが含まれています。Defaults env_reset

しかし、の動作はenv_reset次のように変更されました。いいえ$HOMEターゲットユーザーの自宅にリセットするにはクリックしてください。

19.04より前のバージョンでは、Ubuntuは以前のsudo動作を維持するためにバージョンをパッチしました(変更されていません$HOME)。 https://bugs.launchpad.net/ubuntu/+source/sudo/+bug/760140

これは19.10で削除され、その後Ubuntuはsudoアップストリームおよび他のすべてのLinuxディストリビューションが実行するアクションを実行し、ターゲット$HOMEユーザーを変更します。詳細については、askubuntu.comのQ&Aをご覧ください。19.10以降、sudoは$ HOMEをどのように異なる方法で処理しますか?。以前のバージョンは元に戻されなかったため、18.04 LTSにはまだUbuntu関連の動作があります。


以下は、18.04 LTSを含むUbuntu 19.04より前のバージョンに適用されるこの回答の前のテキストです。

Ubuntuで$ HOME環境変数をターゲットユーザーにリセットするには、その変数をDefaults always_set_home.Defaults set_homesudo -s/etc/sudoers

Ubuntuトラッカーのこのバグには、sudoで$ HOMEを設定しないでくださいいくつかの理由があります。 https://bugs.launchpad.net/ubuntu/+source/sudo/+bug/1373495

コメント#4を参照してください。

HOMEが削除されると、vim、bashなどは、ユーザーの~/.vimrc、~/.bashrcなどの代わりに/root/.vimrc、/root/.bashrcなどを使用します。 sudoを介してXクライアントを実行するのは悪い考えですが、間違った場所で設定ファイルを見つけることができ、X11クライアントが間違った.Xauthorityファイルをターゲットにしている場合、X11サーバーに接続できない可能性があります。

これはUbuntu開発者の意識的な決定です。

この回答にはsudoersオプションの詳細がありますalways_set_home。たとえば、次のようになります。https://unix.stackexchange.com/a/91572/281844


あなたの質問には2番目の問題があります。sudo echo $HOMEDebian でもユーザーのホームページが表示されます。

これは、シェルが拡張されるために発生します。$HOME 今後sudoコマンドを実行してください。

だからこれ:

$ sudo echo $HOME

まず、シェルによって次のように拡張されました。

$ sudo echo /home/user

次に、echo /home/userrootとしてsudoを実行します。

これも違いを示しています。

$ sudo bash -c 'echo $HOME'
/root

または、完全なルートシェルをインポートして、そこで環境変数を確認します。

$ sudo -s
# echo $HOME
/root

おすすめ記事