21.6 检验软件正确性

前面提到很多升级与安装需要注意的事项,因为我们需要克服很多的程序漏洞,所以需要前往 Linux distribution 或者是某些软件开发商的网站,下载最新并且较安全的软件文件来安装才行。 好了,那么“有没有可能我们下载的文件本身就有问题?” 是可能的!因为 cracker 无所不在,很多的软件开发商已经公布过他们的网页所放置的文件曾经被窜改过! 那怎么办?连下载原版的数据都可能有问题了?难道没有办法判断文件的正确性吗?

这个时候我们就要通过每个文件独特的指纹验证数据了!因为每个文件的内容与文件大小都不相同, 所以如果一个文件被修改之后,必然会有部分的信息不一样!利用这个特性,我们可以使用 MD5/sha1 或更严密的 sha256 等指纹验证机制来判断该文件有没有被更动过!举个例子来说,在每个 CentOS 7.x 原版光盘的下载点都会有提供几个特别的文件, 你可以先到下面的链接看看:

仔细看喔,上述的 URL 里面除了有所有光盘的下载点之外,还有提供刚刚说到的 md5, sha1, sha256 等指纹验证机制喔!通过这个编码的比对, 我们就可以晓得下载的文件是否有问题。那么万一 CentOS 提供的光盘镜像文件被下载之后,让有心人士偷偷修改过,再转到 Internet 上面流传,那么你下载的这个文件偏偏不是原厂提供的,呵呵! 你能保证该文件的内容完全没有问题吗?当然不能对不对!是的,这个时候就有 md5sum, sha1sum, sha256sum 这几文件指纹的咚咚出现啦!说说他的用法吧!

21.6.1 md5sum / sha1sum / sha256sum

目前有多种机制可以计算文件的指纹码,我们选择使用较为广泛的 MD5, SHA1 或 SHA256 加密机制来处理, 例如上面链接中 CentOS 7.x 的相关指纹确认。不过 ISO文件实在太大了,下载来确认实在很浪费带宽。 所以我们拿前一个小节谈到的 NTP 软件来检查看看好了。记得我们下载的 NTP 软件版本为 4.2.8p3 这一版, 在官网上面仅有提供 md5sum 的数据而已,在下载页面的 MD5 数据为:

b98b0cbb72f6df04608e1dd5f313808b  ntp-4.2.8p3.tar.gz

如何确认我们下载的文件是正确没问题的呢?这样处理一下:

[root@study ~]# md5sum/sha1sum/sha256sum [-bct] filename
[root@study ~]# md5sum/sha1sum/sha256sum [--status|--warn] --check filename
选项与参数:
-b :使用 binary 的读档方式,默认为 Windows/DOS 文件型态的读取方式;
-c :检验文件指纹;
-t :以文字体态来读取文件指纹。

范例一:将刚刚的文件下载后,测试看看指纹码
[root@study ~]# md5sum ntp-4.2.8p3.tar.gz
b98b0cbb72f6df04608e1dd5f313808b  ntp-4.2.8p3.tar.gz
# 看!显示的编码是否与上面相同呢?赶紧测试看看!

一般而言,每个系统里面的文件内容大概都不相同,例如你的系统中的 /etc/passwd 这个登陆信息档与我的一定不一样,因为我们的使用者与密码、 Shell 及主文件夹等大概都不相同,所以由 md5sum 这个文件指纹分析程序所自行计算出来的指纹表当然就不相同啰!

好了,那么如何应用这个东西呢?基本上,你必须要在你的 Linux 系统上为你的这些重要的文件进行指纹数据库的创建 (好像在做户口调查!),将下面这些文件创建数据库:

  • /etc/passwd
  • /etc/shadow (假如你不让使用者改密码了)
  • /etc/group
  • /usr/bin/passwd
  • /sbin/rpcbind
  • /bin/login (这个也很容易被骇!)
  • /bin/ls
  • /bin/ps
  • /bin/top

这几个文件最容易被修改了!因为很多木马程序执行的时候,还是会有所谓的“执行序, PID”为了怕被 root 追查出来,所以他们都会修改这些检查调度的文件,如果你可以替这些文件创建指纹数据库 (就是使用 md5sum 检查一次,将该文件指纹记录下来,然后常常以 shell script 的方式由程序自行来检查指纹表是否不同了!),那么对于文件系统会比较安全啦!