Comment Ubuntu et Debian gèrent-ils $ HOME pour les utilisateurs disposant de privilèges sudo?

38

J'ai un script bash myhome.shcontenant une seule ligne:

echo $HOME

Le propriétaire du script est un utilisateur:

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

Dans Ubuntu 16.04 et 17.10, je reçois:

$ echo $HOME
/home/user

$ sudo echo $HOME
/home/user

$ bash myhome.sh
/home/user

$ sudo bash myhome.sh
/home/user

Dans Debian Buster / Testing, je reçois:

$ echo $HOME
/home/user

$ sudo echo $HOME
/home/user

$ bash myhome.sh
/home/user

# WHY ?
$ sudo bash myhome.sh
/root

Je ne comprends pas pourquoi, dans le script de Debian, s'il est exécuté avec sudo, je reçois toujours $HOME=/rootlorsque je suis sous Ubuntu $HOME=/home/user. Est-ce que quelqu'un sait ce que les développeurs Ubuntu ont changé?

ceccoemi
la source

Réponses:

67

Debian et Ubuntu livrent tous deux un /etc/sudoersfichier contenant Defaults env_reset, qui réinitialise les variables d’environnement.

Cependant, le env_resetfait de ne pas toucher $ HOME a été modifié pour le réinitialiser à la maison de l'utilisateur cible.

Ubuntu a décidé de corriger leur version de sudopour conserver le comportement précédent: https://bugs.launchpad.net/ubuntu/+source/sudo/+bug/760140

Sous Ubuntu, pour réinitialiser la variable d’environnement $ HOME sur l’utilisateur cible, il est nécessaire de définir soit, Defaults always_set_homesoit Defaults set_home( ou, dans ce cas, seul sudo -sHOME sera actualisé) dans leur /etc/sudoers.

Ce bogue chez Ubuntu Tracker a plus de raisons de ne pas définir $ HOME dans sudo: https://bugs.launchpad.net/ubuntu/+source/sudo/+bug/1373495

Voir le commentaire n ° 4:

Si HOME est supprimé, par exemple, vim, bash, etc., utiliseront /root/.vimrc, /root/.bashrc, etc. plutôt que ~ / .vimrc, ~ / .bashrc, etc. de l'utilisateur bien que ce soit une mauvaise idée pour exécuter des clients X via sudo, ils rechercheraient probablement également les mauvais fichiers de configuration dans les mauvais emplacements. Il est également possible que les clients X11 ne puissent même pas se connecter au serveur X11 s'ils visent le mauvais fichier .Xauthority.

C'est une décision consciente des développeurs Ubuntu.

Cette réponse contient plus de détails sur les options de sudoers telles que always_set_home: https://unix.stackexchange.com/a/91572/281844


Votre question comporte un deuxième problème, à savoir celui sudo echo $HOMEqui affiche toujours le domicile de l'utilisateur même dans Debian.

Cela se produit parce que le shell se développe $HOME avant d' exécuter la sudocommande.

Donc ça:

$ sudo echo $HOME

Est d'abord développé par la coquille dans:

$ sudo echo /home/user

Et puis sudo s'exécute en echo /home/usertant que root ...

Cela devrait aussi démontrer la différence:

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

Ou obtenez un shell racine complet et voyez la variable d'environnement ici:

$ sudo -s
# echo $HOME
/root
filbranden
la source