为什么当我使用 sudo 启动 shell 时 $HOME 会被继承?

为什么当我使用 sudo 启动 shell 时 $HOME 会被继承?

我正在设置一个 Vagrant 盒子,我注意到一些奇怪的事情。

root@box:~# sudo --user=vagrant bash
bash: /root/.bashrc: Permission denied
vagrant@box:~$ export
declare -x HOME="/root"

为什么HOME设置在/root这里呢?用户 vagrant 的主目录当然不是/root

vagrant@box:~$ grep vagrant /etc/passwd
vagrant:x:1000:1000::/home/vagrant:/bin/bash

我在网上找到的所有内容都讨论了如何继承环境变量,而不是如何阻止它。 sudoers 文件包含env_reset默认值。我不知道还有什么控制这种行为。

答案1

这是一个选择。如果您不喜欢它,可以使用-i-H选项,或更改配置。 sudo(8) 手册页显示HOME

如果指定了-i或,或者在 中设置了,或者在 中指定并设置了该选项,则设置为目标用户的主目录。-Henv_resetalways_set_homesudoers-sset_homesudoers

实际上env_reset在 Ubuntu 下没有影响$HOME(但见下文)。这是手册页中的不准确之处。看启动板错误 #889936

附加信息

env_reset某些环境变量在提供时可能仍会保留。有编译时默认值,可以使用env_keep选项更改;有关更多信息,请参阅 sudoers(5) 手册页。在sudo -Vroot 下的输出中,您可以在“要保留的环境变量:”下看到这些环境变量的列表。特别是,HOME在 Ubuntu 下默认列出,但在 Debian 下不列出。

有关更多信息,请参阅:

相关内容