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

avi*_*dey 10 curl sudo

在我阅读Rust编程语言介绍时,我遇到了安装方法,要求使用以下命令

curl -sf -L https://static.rust-lang.org/rustup.sh | sudo sh
Run Code Online (Sandbox Code Playgroud)

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

Dan*_*ath 10

因为您正在为正在执行的任何脚本提供root访问权限.它可以做各种令人讨厌的事情.

如果Rust站点遭到破坏,并且该脚本会以静默方式安装恶意软件,那么您将不知道,如果不先检查脚本.

  • 假设您使用HTTPS:您只需要信任域.每次手动下载安装程序时,这都是安全的.即几乎每次Windows或OS X用户都安装了软件. (3认同)

Pio*_*ski 7

正如丹尼尔说的还有更多原因:

  • 如果脚本是通过HTTP而不是HTTPS提供给你的,那么Man In The Middle攻击可以由一些邪恶的第三方执行.使用HTTPS至少可以放心,脚本将从网站下载
  • 如果连接在流中间关闭,则可能会执行部分命令,这些命令不是(并且可能是危险的).(见第1个链接)
  • 您可能还认为在浏览器中打开脚本来检查它是否不是邪恶会降低风险.不幸的是它不会,因为网站所有者可能会为浏览器用户代理显示不同的内容(请参阅第2个链接)

如何正确降低风险呢:

理想的情况是:

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

curl -sf -L https://static.rust-lang.org/rustup.sh -o rustup.sh
less rustup.sh
chmod +x rustup.sh
sudo ./rustup.sh
Run Code Online (Sandbox Code Playgroud)

显着更好,但不完美(但是单线):

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

su -c "curl https://static.rust-lang.org/rustup.sh -o rustup.sh && chmod +x rustup.sh && ./rustup.sh"
Run Code Online (Sandbox Code Playgroud)

参考文献:

  • 您可以通过将整个内容放入函数体中并在最后一行执行该函数来证明您的脚本不会部分执行。如果你知道一个脚本是这样定义的,它就像下载然后执行一些安装程序一样安全。 (2认同)