Nei*_*est 16 command-line sudo
我希望 -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 ~
Run Code Online (Sandbox Code Playgroud)
并获取目标用户的主目录列表。不是这样。这是由env_reset默认值引起的sudoers吗?
如果是这样,-H 有什么影响吗?覆盖此行为的最安全方法是什么?
如果不是 -H 的预期效果是什么?
请让我直截了当。
And*_*ini 20
$HOME并~通过得到扩展您的外壳,它们不会被解释echo。
换句话说,echo不$HOME视为论据。它实际上看到了/home/nbest。因此,以下命令正好相同(你的情况):
nbest@geo:~$ sudo -H -u tanum echo $HOME
nbest@geo:~$ sudo -H -u tanum echo /home/nbest
Run Code Online (Sandbox Code Playgroud)
无论你尝试什么 ( -H, -i, ...) 你永远不会获得想要的行为。因为$HOME被您的 shell 替换,并且您的 shell 以您的用户身份运行。sudo不会以任何方式影响您的外壳。
要解决这个“问题”(这实际上是一个功能),您可以启动一个新的子 shell:
nbest@geo:~$ sudo -H -u tanum sh -c 'echo $HOME'
Run Code Online (Sandbox Code Playgroud)
(请注意,我使用单引号来避免扩展。)这样,新 shellsh将以用户tanum运行并打印他的主目录。
另一种选择是使用~username,它可以扩展到该用户的家中,而无需使用sudo或su。尝试:
nbest@geo:~$ echo ~tanum
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12533 次 |
| 最近记录: |