Both Debian and Ubuntu ship an
/etc/sudoers file that contains
Defaults env_reset, which resets environment variables.
However, the behavior of
env_reset was changed from not touching
$HOME to resetting it to the home of the target user.
In releases up to 19.04, Ubuntu had patched their version of
sudo to keep the previous behavior (of not changing
This was undone for 19.10, and starting since, Ubuntu does what upstream
sudo and all other Linux distributions do, and changes
$HOME to that of the target user. See this Q&A on askubuntu.com for all the details: How does sudo handle $HOME differently since 19.10?. The reversal was not done for earlier releases, so 18.04 LTS still has the Ubuntu-specific behaviour.
The following is the old text of this answer, and applies to Ubuntu releases up to 19.04, including 18.04 LTS.
In Ubuntu, in order to reset the $HOME environment variable to the target user, one has to set either
Defaults always_set_home or
Defaults set_home (in which case only
sudo -s will get HOME updated) in their
This bug at Ubuntu tracker has some more rationale on not setting $HOME in sudo:
See comment #4:
If HOME is removed, then e.g. vim, bash, etc., will use /root/.vimrc,
/root/.bashrc, etc rather than the user's ~/.vimrc, ~/.bashrc, etc.
While it's a bad idea to run X clients via sudo, they too would likely
look in the wrong locations for configuration files, and there's a
chance that X11 clients may not even be able to connect to the X11
server if they are aimed at the wrong .Xauthority file.
It's a conscious decision by Ubuntu developers.
This answer has more details on the sudoers options such as
There's a second issue in your question, which is the
sudo echo $HOME which still displays the user's home even in Debian.
That happens because the shell is expanding
$HOME before running the
$ sudo echo $HOME
Is first expanded by the shell into:
$ sudo echo /home/user
And then sudo executes
echo /home/user as root...
This should demonstrate the difference too:
$ sudo bash -c 'echo $HOME'
Or get a full root shell and see the environment variable there:
$ sudo -s
# echo $HOME