静态制品是一个目录,而不是一个可执行文件。只记录源码提交或只记录首页校验和会留下缺口:缺失的图片、陈旧的别名或变化的下载可能悄悄存活下来。一份发布清单应枚举每个常规文件。
生成稳定的列表
从制品根目录运行命令,使路径保持相对。在固定区域设置下按路径排序:
cd public
find . -type f -exec sha256sum {} + | LC_ALL=C sort -k2 > ../release.sha256
清单是关于制品的证据,因此把它放在被测量目录之外,除非清单本身有意作为发布的一部分。
传输后验证
在目标端,逐个文件验证:
cd /srv/www/site.new
sha256sum -c /path/to/release.sha256
这能捕获变化的字节与缺失的路径。它不会报告意外的多余文件,因此也要比较目标端的文件列表:
find . -type f | LC_ALL=C sort > destination.files
awk '{print $2}' /path/to/release.sha256 | LC_ALL=C sort > expected.files
diff -u expected.files destination.files
为发布记录增加聚合摘要
对清单自身做哈希,为日志与部署记录生成一个短标识:
sha256sum release.sha256
聚合摘要只有在清单生成规则固定时才有意义:相对路径形式、排序区域、哈希算法,以及是否包含生成的元数据,都属于流程的一部分。
不要把完整性等同于真实性
SHA-256 证明两个字节序列一致。如果攻击者既能替换制品也能替换清单,那么这种检查不能确立是谁产生的它们。制品签名与可信分发是独立的控制手段。
来源
- GNU Coreutils: sha2 utilities,校验和生成与检查,已核验 2026-08-23。
- sha256sum(1),命令行为与输出格式,已核验 2026-08-23。