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

Der*_*ler 3 root sudo

我正在设置一个 Vagrant 盒子,我注意到一些我觉得很奇怪的东西。

root@box:~# sudo --user=vagrant bash
bash: /root/.bashrc: Permission denied
vagrant@box:~$ export
declare -x HOME="/root"
Run Code Online (Sandbox Code Playgroud)

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

vagrant@box:~$ grep vagrant /etc/passwd
vagrant:x:1000:1000::/home/vagrant:/bin/bash
Run Code Online (Sandbox Code Playgroud)

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

vin*_*c17 7

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

设置为目标用户的主目录,如果-i-H指定,env_reset或者always_set_home设置在sudoers-s指定选项并set_home设置为sudoers

实际上在 Ubuntu 下env_reset没有影响$HOME(但见下文)。这是手册页中的错误。请参阅启动板错误 #889936

附加信息

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

有关更多信息,请参阅:

  • @OliverSalzburg 这个错误实际上已经被报告了......几年前!我已经更新了我的答案。它目前似乎是文档中的一个错误,该行为被认为是正确的。 (2认同)