为什么 sudo -E 不保留我的 $HOME 环境变量?

为什么 sudo -E 不保留我的 $HOME 环境变量?

echo $HOME在我的 Red Hat 机器上,当我使用普通用户帐户运行命令时,我得到/home/snrub.当我运行命令sudo vim foo.txt并在 vim 中输入时echo $HOME,我会/root返回。我希望它返回/home/snrub,以便它能够解析我很酷的 Vim 插件,即使当我使用 sudo 编辑文件时也是如此。根据 sudo 手册页,-E-H选项应该可以工作,但是如果我运行sudo -E vim foo.txtsudo -H vim foo.txt或 ,sudo -EH vim foo.txt它们仍然不会解析我的 home .vimrc 文件并/root在我输入时返回echo $HOME

我还尝试将以下行添加到 sudoers 文件中,然后保存:

Defaults   env_keep += "HOME"

还是行不通。如果我运行sudo vim foo.txt然后在 Vim 中输入echo $HOME它仍然显示/root.同样(为了验证这不是 Vim 严格的问题),如果我键入sudo emacs foo.txt并按 Enter,然后键入 Alt-X,键入getenv并按 Enter,然后键入HOME并按 Enter,它仍然会返回/root。我该如何让它返回/home/snrub

答案1

作为安全预防措施,在默认情况下启用的选项sudo下重置环境变量列表(TERM、PATH、HOME、MAIL、SHELL、LOGNAME、USER、USERNAME 和 SUDO_*) 。env_reset为了将 HOME 从您的用户帐户转移到sudo环境中,您必须:

  • 在 sudo 规则上使用 SETENV 标签以及-E选项,或者

  • 特别取消设置该env_reset选项。

另外请确保该选项always_set_home处于关闭状态(默认情况下)。

请参阅sudoers 手册页了解所有细节和互动。

相关内容