为什么我使用 sudo 后 $HOME 不会改变?

为什么我使用 sudo 后 $HOME 不会改变?

我希望 -H 选项能给我提供目标用户的环境。

nbest@geo:~$ sudo -H -u tanum echo $HOME
/首页/nbest
nbest@geo:~$ sudo -u tanum echo $HOME
/首页/nbest
nbest@geo:~$ sudo -i -u tanum echo $HOME
/首页/nbest
nbest@geo:~$ sudo -H -i -u tanum echo $HOME
/首页/nbest

由此我可以说:

sudo -u tanum ls ~

并获取目标用户的主目录列表。事实并非如此。这是由env_reset中的默认值引起的吗sudoers

如果是的话 -H 有什么作用吗?覆盖此行为的最安全方法是什么?

如果不是,那么 -H 的预期效果是什么?

请纠正我。

答案1

$HOME~扩展为你的shell,它们不被解释echo

换句话说,echo它不认为$HOME是参数。它实际上认为是/home/nbest。因此以下命令是确切地相同(就你的情况而言):

nbest@geo:~$ sudo -H -u tanum echo $HOME
nbest@geo:~$ sudo -H -u tanum echo /home/nbest

无论您尝试什么(-H-i、 ...),您都无法获得想要的行为。因为$HOME被您的 shell 替换,并且您的 shell 以您的用户身份运行。sudo不会以任何方式影响您的 shell。


为了解决这个“问题”(实际上是一个功能),您可以启动一个新的子 shell:

nbest@geo:~$ sudo -H -u tanum sh -c 'echo $HOME'

(请注意,我使用单引号来避免扩展。)这样,新的 shellsh将以用户身份运行塔努姆并打印他的主目录。


另一种方法是使用~username,它会扩展到该用户的主页,而无需使用sudosu。尝试:

nbest@geo:~$ echo ~tanum

答案2

请尝试:

sudo -H -u tanum bash -c 'echo $HOME'

相关内容