如今大多数安装脚本都具有以下特定模式:
curl -fsSL <url> | sh --- and usually run as root
有些网站甚至可能有关于以 root 身份运行此程序并检查错误的免责声明。但是,这不是很安全,您依赖 CA 基础设施和 https 来提供安全性。为什么网站要这样做,除了通过 https 进行传输之外,还可以将它们作为签名版本 - 不可否认性和文件完整性不是更好吗?大多数管理员下载此后会做什么。
答案1
我不知道大多数管理员在那之后会做什么,但我可以告诉你在执行类似操作之前我会做什么:我为我打算使用的发行版寻找一个包,如果我找不到满足我要求的包,任何一个
- 我将创建一个新的沙箱,在其中安装软件并检查安装和软件的功能,或者
- 如果层次结构中更高层的人告诉我,我将创建一个新的沙箱并将其安装在那里,或者
- 我不安装它。
但那是我,我真的不在乎这个软件包有没有签名。我的威胁模型包括软件开发人员,特别是如果我可以确定没有分销商看过该软件。
但应该放弃这种卷曲安装模式。
是的。应该。但事实并非如此,我可以理解提供这种安装方式的软件开发人员,因为为所有相关的 Linux 发行版和三四个 BSD 创建软件包很糟糕。现在的情况比 15 年前还要糟糕。
答案2
通常curl URL(script) | sh
会下载并执行 shell 脚本(安装脚本),它是一个自动脚本容易地安装一个程序,它将执行一些任务,例如:检查依赖关系、创建/删除目录、询问 root 密码、添加存储库、将适当的程序版本下载到您的 Linux 发行版...
执行安装脚本之前的最佳实践。
- 下载脚本(命令的第一部分)
curl url(script)
- 使用文本编辑器检查脚本的内容(或
cat
,less
...) - 执行安装脚本
sudo bash script
,sudo sh script
...
这是安装 node.js 的 bash 脚本示例:curl -sL https://deb.nodesource.com/setup_9.x
其中包含使用说明。
执行安装脚本后的最佳实践。
执行安装脚本后,程序将安装在您的系统上。如果安装脚本不包含更新程序的方法(通过包管理器自动应用更新的存储库、cron 作业...),最好查阅维护者的网页。