Sia Debian che Ubuntu forniscono un /etc/sudoers
file che contiene Defaults env_reset
, che ripristina le variabili di ambiente.
Tuttavia, il comportamento di è env_reset
stato modificato dal non toccare $ HOME al ripristino alla home dell'utente di destinazione.
Ubuntu ha deciso di correggere la versione di sudo
per mantenere il comportamento precedente:
https://bugs.launchpad.net/ubuntu/+source/sudo/+bug/760140
In Ubuntu, per ripristinare la variabile di ambiente $ HOME per l'utente di destinazione, è necessario impostare uno Defaults always_set_home
o Defaults set_home
(nel qual caso sudo -s
verrà aggiornato solo HOME) nel loro /etc/sudoers
.
Questo bug nel tracker di Ubuntu ha qualche logica in più nel non impostare $ HOME in sudo:
https://bugs.launchpad.net/ubuntu/+source/sudo/+bug/1373495
Vedi commento n. 4:
Se HOME viene rimosso, ad esempio vim, bash, ecc., Utilizzerà /root/.vimrc, /root/.bashrc, ecc. Anziché l'utente ~ / .vimrc, ~ / .bashrc, ecc. Mentre è una cattiva idea per eseguire i client X tramite sudo, probabilmente anche loro cercherebbero i file di configurazione in posizioni errate, e c'è la possibilità che i client X11 non siano nemmeno in grado di connettersi al server X11 se sono mirati al file .Xauthority sbagliato.
È una decisione consapevole da parte degli sviluppatori Ubuntu.
Questa risposta contiene maggiori dettagli sulle opzioni dei sudoers come always_set_home
:
https://unix.stackexchange.com/a/91572/281844
C'è un secondo problema nella tua domanda, che è quello sudo echo $HOME
che mostra ancora la casa dell'utente anche in Debian.
Ciò accade perché la shell si sta espandendo $HOME
prima di eseguire il sudo
comando.
Così questo:
$ sudo echo $HOME
Viene prima espanso dalla shell in:
$ sudo echo /home/user
E poi sudo viene eseguito echo /home/user
come root ...
Ciò dovrebbe dimostrare anche la differenza:
$ sudo bash -c 'echo $HOME'
/root
Oppure ottieni una shell radice completa e vedi lì la variabile d'ambiente:
$ sudo -s
# echo $HOME
/root