24.2 部署-下载二进制文件、go get、包管理器

1. 下载二进制文件

由于二进制可执行文件提供了在特定平台上运行所需要的一切,因此开发者常常通过网络提供可下载的文件来分发基于Go语言的软件产品。

  • 软件产品的最终用户根据其使用的具体环境,选择正确的二进制文件,下载并运行它。
  • 这是一种简单而轻量级的代码分享方式,将编译好的文件上传至互联网简直易如反掌。

通过互联网分发和下载文件根本无法保证代码名副其实未被篡改。

  • 攻击者很容易将被植入恶意代码的可执行文件放到网上供用户下载,其后果可想而知。

为了证明用户所下载的文件是正确而且安全的,有两种常用的做法。

  • 将文件托管到有证书能够证明其上传者身份的HTTPS网站。
  • 为所上传文件提供校验和,这个校验和相当于文件的指纹。

校验和是通过特定的散列算法由原始数据计算得到的消息摘要。

  • 理想情况下,原始数据的任何改变,都将导致其消息摘要与之前完全不同。
  • SHA1哈希算法可产生160位消息摘要,碰撞机率低于1/1048,足以满足一般安全性要求。

软件发布者将可执行文件上传到服务器:

  • 同时公布其计算得到的校验和;
    • main.exe -> 00badd338b36e025863c2ada9749ce0912c225d5
  • 攻击者攻破服务器在文件中植入恶意代码;
  • 用户下载被篡改的文件并重新计算校验和;
    • main.exe -> 416507ad261d78bb6b518a7025e1120d7e06ed7b
  • 发现与发布者提供的校验和不一致,说明文件已被篡改,千万不要运行!

计算可执行文件的SHA1摘要:

  • Linux或macOS,执行如下命令:
    • sha1sum main
  • Windows需要安装FCIV (Microsoft File Checksum Integrity Verifier),执行如下命令:
    • fciv -sha1 main.exe
    • fciv -sha1 >> hash.txt main.exe,将运算结果重定向至文件中保存。

从互联网下载包括Go语言程序在内的任何二进制可执行文件,务必检查所提供的校验和,确认它与由下载文件计算所得校验和完全一致,方可确认其安全性,否则不要运行。

//生成可执行文件的SHA1摘要
// 执行如下命令,生成可执行文件的SHA1摘要: 
// fciv\fciv -sha1 main.exe
// 00badd338b36e025863c2ada9749ce0912c225d5 main.exe 

package main
import (
    "fmt"
    "unsafe"
)
func main() {
    var i int 
    fmt.Println(unsafe.Sizeof(i))
}

//被恶意篡改后的SHA1摘要
// 执行如下命令,生成可执行文件的SHA1摘要: 
// fciv\fciv -sha1 main.exe
// 416507ad261d78bb6b518a7025e1120d7e06ed7b main.exe
package main
import (
    "fmt"
    "unsafe"
)
func main() {
    var i int 
    fmt.Println("I am a hacker. I am going to delete everything.")
    fmt.Println(unsafe.Sizeof(i))
}

 2. go get命令

在发布代码方面,一种轻量级但有效的方式是使用go get命令:

  • 发布者将源代码分享到Github等网站
  • 用户只需一条命令即可安装它,例如:
    • go get -u github.com/golang/dep/cmd/dep
  • 依赖管理工具dep将被安装到用户系统中
    • 源代码文件含依赖被安装到
    • [GOPATH]/src/github.com/golang/dep/目录下
    • 二进制可执行文件被安装到
    • [GOPATH]/bin/目录下
  • 执行dep --help验证是否安装成功

go get尤其适合用来分享命令行工具:

  • 它与Go语言开发的工作流程紧密集成
  • 本地有源代码的副本,便于随时查阅

3. 包管理器

虽然通过互联网分享文件是一种简单而有效的分发模式,但大多操作系统都有专门用于分发代码的官方或非官方的包管理器。

  • 使用户可以一致的方式安装软件
  • 附带安全功能,如检查校验和或验证开发者数字签名

下面是一些流行的包管理器:

  • chocolatey —— windows
  • apt ——Debian、Ubuntu
  • yum —— CentOS、Red Hat、Fedora
  • pacman —— Arch Linux
  • homebrew —— macOS

如果要将开源软件发布到更大的社区,建议将其发布到包管理器中。


至此,关于go语言开发相关内容的分享就到一段落了。本专题分享内容都是基于个人自学经历整理的,希望可以帮助到大家,也欢迎大家交流、批评指正 :)

在具备go语言开发的基础上,如果大家对于区块链感兴趣,可以关注了解一下另外一个专题——“从零到一开发自己的区块链”。 

相关推荐

  1. pnpm管理

    2024-06-19 09:06:05       47 阅读
  2. 前端-管理

    2024-06-19 09:06:05       26 阅读
  3. npm管理

    2024-06-19 09:06:05       30 阅读
  4. 下载后端返回的二进制文件

    2024-06-19 09:06:05       13 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-19 09:06:05       3 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-19 09:06:05       3 阅读
  3. 在Django里面运行非项目文件

    2024-06-19 09:06:05       2 阅读
  4. Python语言-面向对象

    2024-06-19 09:06:05       2 阅读

热门阅读

  1. 配置Nginx 在服务器重启后自动启动

    2024-06-19 09:06:05       14 阅读
  2. 行为型模式-状态模式

    2024-06-19 09:06:05       32 阅读
  3. C# 判定字符串是否为数字的方法

    2024-06-19 09:06:05       17 阅读
  4. 代码随想录算法训练营刷题复习5 : 贪心算法 1/2

    2024-06-19 09:06:05       18 阅读
  5. Paddleocr数据增强调用逻辑

    2024-06-19 09:06:05       16 阅读
  6. leetcode139-Word Break

    2024-06-19 09:06:05       11 阅读
  7. Angular 2 数据显示

    2024-06-19 09:06:05       26 阅读
  8. 新手怎么使用GitLab?

    2024-06-19 09:06:05       17 阅读
  9. word常用的通配符大全

    2024-06-19 09:06:05       18 阅读