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

Why using curl | sudo sh is not advised?

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

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

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

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

如果 Rust 站点曾经遭到破坏并且该脚本得到一个小片段来静默安装恶意软件,如果不先检查脚本,您将不会知道。

正如丹尼尔所说,再加上一些其他原因:

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

那么如何正确降低风险:

理想情况下:

Use this approach when making changes on production server

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

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

You can use this approach on dev machine / test server

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

参考文献: