我希望-H选项可以为我提供目标用户的环境。
nbest @ geo:〜$ sudo -H -u tanum echo $ HOME / home / nbest nbest @ geo:〜$ sudo -u tanum echo $ HOME / home / nbest nbest @ geo:〜$ sudo -i -u tanum echo $ HOME / home / nbest nbest @ geo:〜$ sudo -H -i -u tanum echo $ HOME / home / nbest
这可以让我说:
sudo -u tanum ls ~
并获取目标用户的主目录列表。事实并非如此。这是由env_reset
in中的默认值引起的sudoers
吗?
如果是这样,-H有什么作用吗?覆盖此行为的最安全方法是什么?
如果不是,-H的预期作用是什么?
请让我挺直。
$HOME
并~
通过得到扩展您的外壳,它们不会被解释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:
nbest@geo:~$ sudo -H -u tanum sh -c 'echo $HOME'
(请注意,我使用单引号来避免扩展。)这样,新的shellsh
将以用户tanum的身份运行并打印其主目录。
另一种替代方法是使用~username
,无需使用sudo
或即可将其扩展到该用户的家中su
。尝试:
nbest@geo:~$ echo ~tanum
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句