我希望 -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
,它会扩展到该用户的主页,而无需使用sudo
或su
。尝试:
nbest@geo:~$ echo ~tanum
答案2
请尝试:
sudo -H -u tanum bash -c 'echo $HOME'