myhome.sh
1行だけを含む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=/root
Debianスクリプトで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_home
sudo -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 $HOME
Debian でもユーザーのホームページが表示されます。
これは、シェルが拡張されるために発生します。$HOME
今後sudo
コマンドを実行してください。
だからこれ:
$ sudo echo $HOME
まず、シェルによって次のように拡張されました。
$ sudo echo /home/user
次に、echo /home/user
rootとしてsudoを実行します。
これも違いを示しています。
$ sudo bash -c 'echo $HOME'
/root
または、完全なルートシェルをインポートして、そこで環境変数を確認します。
$ sudo -s
# echo $HOME
/root