【问题标题】:Why using curl | sudo sh is not advised?为什么使用 curl |不建议使用 sudo sh?
【发布时间】:2018-04-12 02:43:38
【问题描述】:

在阅读introduction to the Rust programming language时,我遇到了要求使用以下命令的安装方法

curl -sf -L https://static.rust-lang.org/rustup.sh | sudo sh

请注意,这不是最受信任的应用程序安装方式。任何人都可以向我提供有关此命令如何危险的详细信息,是否有任何方法可以保护自己免受其影响?

【问题讨论】:

  • curl 转到 Internet 上不受信任的站点并返回文本。您将该文本通过管道传输到本地机器上具有 root 访问权限的 shell。因此,您不信任的人能够在您的机器上运行任意代码。我希望,安全隐患相当明显。
  • 我可以用目标目录运行 sh 命令,这样就不需要 sudo。
  • 我强烈建议将输出转储到文件中并检查它。

标签: curl sudo


【解决方案1】:

因为您正在授予对正在执行的任何脚本的 root 访问权限。它可以做各种各样令人讨厌的事情。

如果 Rust 网站曾经被入侵,并且该脚本获得了一个小片段,它会静默安装恶意软件,如果不先检查脚本,您将不会知道。

【讨论】:

  • 没错。卷曲 | sh 模式可能很难防御——即使您没有授予它 root 访问权限,您的用户帐户的内容也很有价值。如果您可以使用检查完整性而不仅仅是传输 (HTTPS) 的工具,那就更好了。 spin.atomicobject.com/2016/12/12/security-spectrum-curl-sh/…
  • 假设您使用 HTTPS:您只需要信任该域。这与您每次手动下载安装程序时一样安全。即几乎每次 Windows 或 OS X 用户安装软件时。
【解决方案2】:

正如丹尼尔所说,还有其他几个原因:

  • 如果脚本是通过 HTTP 而不是 HTTPS 提供给您的,那么中间人攻击可能由一些邪恶的第三者执行。使用 HTTPS,您至少有信心从网站按原样下载脚本
  • 如果连接在中途关闭,则可能会执行部分命令,这些命令并非旨在(并且可能存在危险)。 (见第一个链接)
  • 您可能还认为在浏览器中打开脚本以检查它是否是恶意的会降低风险。不幸的是,它不会,因为网站所有者可能会为浏览器用户代理显示不同的内容(参见第二个链接)

那么如何适当地降低风险:

理想情况下:

在生产服务器上进行更改时使用此方法

curl -sf -L https://static.rust-lang.org/rustup.sh -o rustup.sh
less rustup.sh
chmod +x rustup.sh
sudo ./rustup.sh

明显更好,但并不完美(但只有一条线):

您可以在开发机器/测试服务器上使用这种方法

su -c "curl https://static.rust-lang.org/rustup.sh -o rustup.sh && chmod +x rustup.sh && ./rustup.sh"

参考资料:

【讨论】:

  • 您可以通过将整个内容放入函数体中并在最后一行执行该函数来证明您的脚本不会被部分执行。如果您知道脚本是这样定义的,那么它与下载然后执行某些安装程序一样安全。
猜你喜欢
  • 1970-01-01
  • 2013-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-03
  • 2013-08-19
相关资源
最近更新 更多