How do Ubuntu and Debian manage $HOME for users with sudo privileges?
Clash Royale CLAN TAG#URR8PPP
up vote
37
down vote
favorite
I have a bash script myhome.sh
containing only one line:
echo $HOME
The script's owner is a user:
$ ls -l myhome.sh
-rw-rw-r-- 1 user user <date> <time> myhome.sh
In Ubuntu 16.04 and 17.10 I get:
$ echo $HOME
/home/user
$ sudo echo $HOME
/home/user
$ bash myhome.sh
/home/user
$ sudo bash myhome.sh
/home/user
In Debian Buster/Testing I get:
$ echo $HOME
/home/user
$ sudo echo $HOME
/home/user
$ bash myhome.sh
/home/user
# WHY ?
$ sudo bash myhome.sh
/root
I don't understand why inside the script in Debian, if it's executed with sudo, I always get $HOME=/root
while in Ubuntu I get $HOME=/home/user
. Does anyone know what have the Ubuntu developers changed?
bash debian ubuntu sudo home
add a comment |Â
up vote
37
down vote
favorite
I have a bash script myhome.sh
containing only one line:
echo $HOME
The script's owner is a user:
$ ls -l myhome.sh
-rw-rw-r-- 1 user user <date> <time> myhome.sh
In Ubuntu 16.04 and 17.10 I get:
$ echo $HOME
/home/user
$ sudo echo $HOME
/home/user
$ bash myhome.sh
/home/user
$ sudo bash myhome.sh
/home/user
In Debian Buster/Testing I get:
$ echo $HOME
/home/user
$ sudo echo $HOME
/home/user
$ bash myhome.sh
/home/user
# WHY ?
$ sudo bash myhome.sh
/root
I don't understand why inside the script in Debian, if it's executed with sudo, I always get $HOME=/root
while in Ubuntu I get $HOME=/home/user
. Does anyone know what have the Ubuntu developers changed?
bash debian ubuntu sudo home
add a comment |Â
up vote
37
down vote
favorite
up vote
37
down vote
favorite
I have a bash script myhome.sh
containing only one line:
echo $HOME
The script's owner is a user:
$ ls -l myhome.sh
-rw-rw-r-- 1 user user <date> <time> myhome.sh
In Ubuntu 16.04 and 17.10 I get:
$ echo $HOME
/home/user
$ sudo echo $HOME
/home/user
$ bash myhome.sh
/home/user
$ sudo bash myhome.sh
/home/user
In Debian Buster/Testing I get:
$ echo $HOME
/home/user
$ sudo echo $HOME
/home/user
$ bash myhome.sh
/home/user
# WHY ?
$ sudo bash myhome.sh
/root
I don't understand why inside the script in Debian, if it's executed with sudo, I always get $HOME=/root
while in Ubuntu I get $HOME=/home/user
. Does anyone know what have the Ubuntu developers changed?
bash debian ubuntu sudo home
I have a bash script myhome.sh
containing only one line:
echo $HOME
The script's owner is a user:
$ ls -l myhome.sh
-rw-rw-r-- 1 user user <date> <time> myhome.sh
In Ubuntu 16.04 and 17.10 I get:
$ echo $HOME
/home/user
$ sudo echo $HOME
/home/user
$ bash myhome.sh
/home/user
$ sudo bash myhome.sh
/home/user
In Debian Buster/Testing I get:
$ echo $HOME
/home/user
$ sudo echo $HOME
/home/user
$ bash myhome.sh
/home/user
# WHY ?
$ sudo bash myhome.sh
/root
I don't understand why inside the script in Debian, if it's executed with sudo, I always get $HOME=/root
while in Ubuntu I get $HOME=/home/user
. Does anyone know what have the Ubuntu developers changed?
bash debian ubuntu sudo home
edited Apr 19 at 3:42
muru
33.3k576140
33.3k576140
asked Apr 18 at 17:38
check-emee
418614
418614
add a comment |Â
add a comment |Â
1 Answer
1
active
oldest
votes
up vote
67
down vote
accepted
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.
Ubuntu decided to patch their version of sudo
to keep the previous behavior:
https://bugs.launchpad.net/ubuntu/+source/sudo/+bug/760140
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 /etc/sudoers
.
This bug at Ubuntu tracker has some more rationale on not setting $HOME in sudo:
https://bugs.launchpad.net/ubuntu/+source/sudo/+bug/1373495
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 always_set_home
:
https://unix.stackexchange.com/a/91572/281844
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
command.
So this:
$ 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'
/root
Or get a full root shell and see the environment variable there:
$ sudo -s
# echo $HOME
/root
add a comment |Â
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
67
down vote
accepted
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.
Ubuntu decided to patch their version of sudo
to keep the previous behavior:
https://bugs.launchpad.net/ubuntu/+source/sudo/+bug/760140
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 /etc/sudoers
.
This bug at Ubuntu tracker has some more rationale on not setting $HOME in sudo:
https://bugs.launchpad.net/ubuntu/+source/sudo/+bug/1373495
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 always_set_home
:
https://unix.stackexchange.com/a/91572/281844
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
command.
So this:
$ 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'
/root
Or get a full root shell and see the environment variable there:
$ sudo -s
# echo $HOME
/root
add a comment |Â
up vote
67
down vote
accepted
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.
Ubuntu decided to patch their version of sudo
to keep the previous behavior:
https://bugs.launchpad.net/ubuntu/+source/sudo/+bug/760140
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 /etc/sudoers
.
This bug at Ubuntu tracker has some more rationale on not setting $HOME in sudo:
https://bugs.launchpad.net/ubuntu/+source/sudo/+bug/1373495
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 always_set_home
:
https://unix.stackexchange.com/a/91572/281844
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
command.
So this:
$ 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'
/root
Or get a full root shell and see the environment variable there:
$ sudo -s
# echo $HOME
/root
add a comment |Â
up vote
67
down vote
accepted
up vote
67
down vote
accepted
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.
Ubuntu decided to patch their version of sudo
to keep the previous behavior:
https://bugs.launchpad.net/ubuntu/+source/sudo/+bug/760140
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 /etc/sudoers
.
This bug at Ubuntu tracker has some more rationale on not setting $HOME in sudo:
https://bugs.launchpad.net/ubuntu/+source/sudo/+bug/1373495
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 always_set_home
:
https://unix.stackexchange.com/a/91572/281844
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
command.
So this:
$ 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'
/root
Or get a full root shell and see the environment variable there:
$ sudo -s
# echo $HOME
/root
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.
Ubuntu decided to patch their version of sudo
to keep the previous behavior:
https://bugs.launchpad.net/ubuntu/+source/sudo/+bug/760140
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 /etc/sudoers
.
This bug at Ubuntu tracker has some more rationale on not setting $HOME in sudo:
https://bugs.launchpad.net/ubuntu/+source/sudo/+bug/1373495
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 always_set_home
:
https://unix.stackexchange.com/a/91572/281844
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
command.
So this:
$ 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'
/root
Or get a full root shell and see the environment variable there:
$ sudo -s
# echo $HOME
/root
edited Apr 18 at 20:58
answered Apr 18 at 17:51
Filipe Brandenburger
3,451621
3,451621
add a comment |Â
add a comment |Â
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f438564%2fhow-do-ubuntu-and-debian-manage-home-for-users-with-sudo-privileges%23new-answer', 'question_page');
);
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password