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


39

私は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のバスター/テスト Iを得ます:

$ echo $HOME
/home/user

$ sudo echo $HOME
/home/user

$ bash myhome.sh
/home/user

# WHY ?
$ sudo bash myhome.sh
/root

Debianのスクリプト内でsudoを使用して実行した場合$HOME=/root、Ubuntuでは常に取得されるのはなぜかわかりません$HOME=/home/user。Ubuntu開発者が何を変えたか知っている人はいますか?

回答:


68

DebianとUbuntuの両方/etc/sudoersDefaults env_reset、環境変数をリセットするを含むファイルを出荷します。

ただし、$ HOMEに触れないことenv_resetから、ターゲットユーザーのホームにリセットするように動作が変更されました。

Ubuntuはsudo、以前の動作を維持するためにバージョンをパッチすることにしました:https : //bugs.launchpad.net/ubuntu/+source/sudo/+bug/760140

Ubuntuでは、$ HOME環境変数をターゲットユーザーにリセットするには、のいずれかを設定するDefaults always_set_home必要がありますDefaults set_home(この場合sudo -s、HOME のみが更新されます)/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クライアントを実行するには、構成ファイルの間違った場所を探す可能性が高く、間違った.Xauthorityファイルを対象にしている場合、X11クライアントがX11サーバーに接続できない可能性があります。

Ubuntu開発者による意識的な決定です。

この回答には、httpsalways_set_home://unix.stackexchange.com/a/91572/281844などのsudoersオプションに関する詳細が含まれています


あなたの質問には2つ目の問題があります。これは、sudo echo $HOMEDebianでもユーザーの自宅を表示するものです。

これは、コマンドを実行する$HOME 前にシェルが展開しているために発生しsudoます。

したがって、この:

$ sudo echo $HOME

シェルによって最初に展開されます:

$ sudo echo /home/user

そして、sudoはecho /home/userrootとして実行されます...

これも違いを示すはずです:

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

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

$ sudo -s
# echo $HOME
/root
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.