如果使用sudo,为什么$ HOME不更改?

尼尔·贝斯特

我希望-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_resetin中默认值引起的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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么使用curl | 不建议使用sudo sh吗?

来自分类Dev

为什么在使用sudo启动shell时会继承$ HOME?

来自分类Dev

如何在Ubuntu中将sudo设置为不更改$ HOME以及如何禁用此行为?

来自分类Dev

为什么在使用AJAX时不更改$ _SESSION变量(PHP)?

来自分类Dev

为什么不能使用sudo更改服务器的主机名?

来自分类Dev

如果我更改angularjs中的视图,为什么我的Twitter小部件不呈现?

来自分类Dev

如果其中没有任何内容,为什么Javascript不更改div的背景颜色?

来自分类Dev

Python - 如果我不更改内部的值,为什么会更新循环内部的备份变量?

来自分类Dev

为什么plm不更改方法?(右)

来自分类Dev

.vimrc为什么不更改vimtutor的外观?

来自分类Dev

猫为什么不更改访问时间?

来自分类Dev

为什么不更改标签的颜色?

来自分类Dev

如果不推荐使用UIAlertView,为什么它在iOS 8中可以使用?

来自分类Dev

为什么“ sudo ls〜”显示/ home / username而不是/ root的内容?

来自分类Dev

在JavaScript中,如果“字符串是对象”,那么为什么不也使用数字呢?

来自分类Dev

如果函数未明确使用“ ret”,为什么不返回任何值

来自分类Dev

如果在声明变量之前使用变量,为什么不抛出ReferenceError?

来自分类Dev

如果函数未明确使用“ ret”,为什么不返回任何值

来自分类Dev

为什么不更改数据时会更改数据?

来自分类Dev

为什么“ sudo -u root echo'whoami`”不返回root?

来自分类Dev

为什么不运行“ sudo shutdown now”关闭?

来自分类Dev

为什么不'sudo sh'源profile.d脚本

来自分类Dev

如果更改密码时旧密码不匹配,应该使用什么状态代码?

来自分类Dev

文件'/ etc / sudoers':如果我在sudo组中,为什么需要使用sudo命令?

来自分类Dev

如果它的并行表达式为什么不匹配,为什么不匹配呢?

来自分类Dev

如果使用引用的目的是更改原始变量的值,为什么要使用按常量引用传递?[C ++]

来自分类Dev

为什么在WPF中坚持使用TextBox Border Color而不更改?

来自分类Dev

使用方法更改label.visibility-为什么不隐藏?

来自分类Dev

Vue更改文档不鼓励使用的数据的方法-但是为什么呢?

Related 相关文章

  1. 1

    为什么使用curl | 不建议使用sudo sh吗?

  2. 2

    为什么在使用sudo启动shell时会继承$ HOME?

  3. 3

    如何在Ubuntu中将sudo设置为不更改$ HOME以及如何禁用此行为?

  4. 4

    为什么在使用AJAX时不更改$ _SESSION变量(PHP)?

  5. 5

    为什么不能使用sudo更改服务器的主机名?

  6. 6

    如果我更改angularjs中的视图,为什么我的Twitter小部件不呈现?

  7. 7

    如果其中没有任何内容,为什么Javascript不更改div的背景颜色?

  8. 8

    Python - 如果我不更改内部的值,为什么会更新循环内部的备份变量?

  9. 9

    为什么plm不更改方法?(右)

  10. 10

    .vimrc为什么不更改vimtutor的外观?

  11. 11

    猫为什么不更改访问时间?

  12. 12

    为什么不更改标签的颜色?

  13. 13

    如果不推荐使用UIAlertView,为什么它在iOS 8中可以使用?

  14. 14

    为什么“ sudo ls〜”显示/ home / username而不是/ root的内容?

  15. 15

    在JavaScript中,如果“字符串是对象”,那么为什么不也使用数字呢?

  16. 16

    如果函数未明确使用“ ret”,为什么不返回任何值

  17. 17

    如果在声明变量之前使用变量,为什么不抛出ReferenceError?

  18. 18

    如果函数未明确使用“ ret”,为什么不返回任何值

  19. 19

    为什么不更改数据时会更改数据?

  20. 20

    为什么“ sudo -u root echo'whoami`”不返回root?

  21. 21

    为什么不运行“ sudo shutdown now”关闭?

  22. 22

    为什么不'sudo sh'源profile.d脚本

  23. 23

    如果更改密码时旧密码不匹配,应该使用什么状态代码?

  24. 24

    文件'/ etc / sudoers':如果我在sudo组中,为什么需要使用sudo命令?

  25. 25

    如果它的并行表达式为什么不匹配,为什么不匹配呢?

  26. 26

    如果使用引用的目的是更改原始变量的值,为什么要使用按常量引用传递?[C ++]

  27. 27

    为什么在WPF中坚持使用TextBox Border Color而不更改?

  28. 28

    使用方法更改label.visibility-为什么不隐藏?

  29. 29

    Vue更改文档不鼓励使用的数据的方法-但是为什么呢?

热门标签

归档