下载开源软件、同步备份、安全团队例行巡检,都绕不开一个问题:
文件到底还是不是原来的文件。
哈希校验就是给文件打一个 “指纹”,内容只要变一个字节,指纹就完全变样。
Linux 自带的 sha256sum 就能干这件事,不用装任何额外工具。
基本用法:单文件指纹
sha256sum nginx-1.26.2.tar.gz输出类似:
a3f2b1c4... nginx-1.26.2.tar.gz前面是 64 位十六进制哈希,后面是文件名。
把它和官方发布的 sha256 值比对,一致就说明下载过程没有被篡改、没有损坏。
校验文件:批量验证
文件多的时候,先把所有指纹存进一个清单:
sha256sum *.tar.gz > SHA256SUMS之后想验证,一条命令:
sha256sum -c SHA256SUMS每一行会输出 OK 或 FAILED。
只要出现 FAILED,说明对应文件被动过或损坏,需要重新获取。
这个清单文件可以随发布包一起分发,对方拿到后自行校验,实现 “完整性可验证”。
目录基线:轻量巡检方案
生产服务器上不允许变更的目录,比如 /etc/nginx 下的配置,可以建一份基线:
find /etc/nginx -type f -exec sha256sum {} + > /root/nginx-baseline.txt基线存好后,定期重跑同样的命令并对比:
sha256sum -c /root/nginx-baseline.txt配置一旦被改动,立刻显示 FAILED。
再配合 crontab 定时执行、输出重定向到日志,就是一套最轻量的完整性监控,不需要引入任何重量级审计系统。
三个容易踩的坑
第一,校验文件里记录的是相对路径时,必须在对应目录下执行 -c,否则提示找不到文件。
第二,文件名带空格时,sha256sum 输出会用反斜杠转义,脚本循环里用 while read 处理,不要用 for 遍历。
第三,哈希只校验内容,不校验权限、属主和修改时间;
要防 “合法登录后的越权修改”,把 stat 信息一起记进基线:
find /etc/nginx -type f -printf "%p %m %u:%g\n" > /root/nginx-meta.txt哈希校验成本极低,却是安全审计里性价比最高的一道防线。
从 “相信文件没变” 到 “可证明文件没变”,只差这一个命令。