Ubuntu和Debian如何为具有sudo特权的用户管理$ HOME?


39

我有一个myhome.sh仅包含一行的bash脚本:

echo $HOME

脚本的所有者是用户:

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

Ubuntu 16.04和17.10中,我得到了:

$ echo $HOME
/home/user

$ sudo echo $HOME
/home/user

$ bash myhome.sh
/home/user

$ sudo bash myhome.sh
/home/user

Debian Buster / Testing中,我得到:

$ echo $HOME
/home/user

$ sudo echo $HOME
/home/user

$ bash myhome.sh
/home/user

# WHY ?
$ sudo bash myhome.sh
/root

我不明白为什么在Debian的脚本中,如果用sudo执行,我总是$HOME=/root在Ubuntu中得到,我得到了$HOME=/home/user。有人知道Ubuntu开发人员有何改变吗?

Answers:


68

Debian和Ubuntu都附带了一个/etc/sudoers包含的文件,该文件会Defaults env_reset重置环境变量。

但是,的行为env_reset从不触摸$ HOME 更改为将其重置为目标用户的住所。

Ubuntu决定修补其版本sudo以保持以前的行为:https : //bugs.launchpad.net/ubuntu/+source/sudo/+bug/760140

在Ubuntu中,为了将$ HOME环境变量重置为目标用户,必须在Defaults always_set_homeDefaults set_home中设置或(在这种情况下,sudo -s将仅更新HOME)/etc/sudoers

Ubuntu跟踪器上的此错误在不设置sudo中设置$ HOME方面具有更多原理:https : //bugs.launchpad.net/ubuntu/+source/sudo/+bug/1373495

参见评论4:

如果删除了HOME,则vim,bash等将使用/root/.vimrc、/root/.bashrc等,而不是用户的〜/ .vimrc,〜/ .bashrc等。要通过sudo运行X客户端,它们也可能会在错误的位置查找配置文件,并且如果X11客户端针对的是错误的.Xauthority文件,则它们甚至可能无法连接到X11服务器。

这是Ubuntu开发人员的明智决定。

此答案具有有关sudoers选项的更多详细信息,例如always_set_homehttps : //unix.stackexchange.com/a/91572/281844


您的问题中还有第二个问题,sudo echo $HOME即使在Debian中,该问题仍然显示用户的住所。

发生这种情况是因为shell $HOME 运行sudo命令之前正在扩展。

所以这:

$ sudo echo $HOME

首先由shell扩展为:

$ sudo echo /home/user

然后sudo echo /home/user以root身份执行...

这也应显示差异:

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

或获得完整的root shell并在此处查看环境变量:

$ sudo -s
# echo $HOME
/root
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.