In che modo Ubuntu e Debian gestiscono $ HOME per gli utenti con privilegi sudo?


38

Ho uno script bash myhome.shcontenente solo una riga:

echo $HOME

Il proprietario dello script è un utente:

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

In Ubuntu 16.04 e 17.10 ottengo:

$ echo $HOME
/home/user

$ sudo echo $HOME
/home/user

$ bash myhome.sh
/home/user

$ sudo bash myhome.sh
/home/user

In Debian Buster / Test ottengo:

$ echo $HOME
/home/user

$ sudo echo $HOME
/home/user

$ bash myhome.sh
/home/user

# WHY ?
$ sudo bash myhome.sh
/root

Non capisco perché all'interno dello script in Debian, se viene eseguito con sudo, ottengo sempre $HOME=/rootmentre mi trovo su Ubuntu $HOME=/home/user. Qualcuno sa cosa sono cambiati gli sviluppatori di Ubuntu?

Risposte:


67

Sia Debian che Ubuntu forniscono un /etc/sudoersfile che contiene Defaults env_reset, che ripristina le variabili di ambiente.

Tuttavia, il comportamento di è env_resetstato modificato dal non toccare $ HOME al ripristino alla home dell'utente di destinazione.

Ubuntu ha deciso di correggere la versione di sudoper 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_homeo Defaults set_home(nel qual caso sudo -sverrà 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 $HOMEche mostra ancora la casa dell'utente anche in Debian.

Ciò accade perché la shell si sta espandendo $HOME prima di eseguire il sudocomando.

Così questo:

$ sudo echo $HOME

Viene prima espanso dalla shell in:

$ sudo echo /home/user

E poi sudo viene eseguito echo /home/usercome 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.