DebianとUbuntuの両方/etc/sudoers
はDefaults 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 $HOME
Debianでもユーザーの自宅を表示するものです。
これは、コマンドを実行する$HOME
前にシェルが展開しているために発生しsudo
ます。
したがって、この:
$ sudo echo $HOME
シェルによって最初に展開されます:
$ sudo echo /home/user
そして、sudoはecho /home/user
rootとして実行されます...
これも違いを示すはずです:
$ sudo bash -c 'echo $HOME'
/root
または、完全なルートシェルを取得して、そこで環境変数を確認します。
$ sudo -s
# echo $HOME
/root