【问题标题】:what exactly env command do? [duplicate]env 命令到底是做什么的? [复制]
【发布时间】:2014-11-20 17:03:11
【问题描述】:

我最近遇到了 shellshock 错误,这是 bash shell 中的错误。不知何故,它使用env 命令创建包含函数的环境变量。

$ env x='() { :;}; echo vulnerable' bash -c "echo this is a test"

这些函数会在生成新的 bash shell 时运行。我在很多地方阅读并得到了与我刚刚写的相同的解释。但我仍然无法弄清楚上述命令及其参数的工作原理。 谁能解释一下?

【问题讨论】:

  • @ralph 考虑到围绕“shellshock”的宣传和恐慌,您应该假设已经就该主题进行了讨论。
  • @JakeGould:我通过互联网阅读了帖子和讨论,找不到详尽的解释
  • man env?这只是触发错误的一种方式;了解env 的工作原理并不能解释漏洞利用本身的工作原理。
  • 可以说,更好的副本是Exactly what does env do in Bash?

标签: bash shell shellshock-bash-bug


【解决方案1】:

env 设置一个或多个环境变量,然后将其余参数作为命令运行。

它与以下语法没有太大区别:

x='() { :;}; echo vulnerable' bash -c "echo this is a test"

env 可以做的一件事(尽管在上面的例子中没有使用该功能)是创建一个干净的环境;如果env 的第一个选项是单个-(或-i),则在执行显式分配和运行命令之前清理环境。

【讨论】:

  • 这是使用 env 和不使用它的唯一区别吗(即能够从空白环境开始)?
  • @jeremy:通常,是的。 env 经常用于 shebang 行 (#!/bin/env ...),因为它会在 PATH 中搜索可执行文件,但这仅在不搜索 PATH 的地方才重要。
  • 我应该补充一点,没有在 shebang 行中搜索 PATH 是有充分理由的,恕我直言,“解决方法”不是一个好主意。但如果范围在这里,那就是出路了。
猜你喜欢
  • 2018-03-08
  • 1970-01-01
  • 1970-01-01
  • 2020-07-16
  • 1970-01-01
  • 1970-01-01
  • 2012-12-24
  • 2015-08-10
  • 2018-04-19
相关资源
最近更新 更多