我正在设置一个 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
默认值。我不知道还有什么可以控制这种行为。
这是一个选择。如果不喜欢,可以使用-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 -V
root 下的输出中,您可以在“要保留的环境变量:”下看到这些环境变量的列表。特别是,HOME
在 Ubuntu 下默认列出,但不在 Debian 下列出。
有关更多信息,请参阅:
Launchpad 错误 #760140关于HOME
Debian 和 Ubuntu 中的编译时默认值。