在 Linux 系統安裝軟體、部署應用、傳輸敏感資料時,確保文件「所見即所得、未被竄改」是資安基石。本文詳細講解主流校驗算法原理、命令實操、自動化腳本與最佳實踐,助你建立可信的軟體供應鏈驗證流程。
| 算法 | 輸出長度 | 安全性現狀 | 適用場景 | Linux 命令 |
|---|---|---|---|---|
| MD5 | 128-bit (32 hex) | ⚠️ 已破解(碰撞攻擊),禁止用於安全驗證 | 非安全場景快速比對(如備份一致性、非關鍵文件去重) | md5sum |
| SHA-1 | 160-bit (40 hex) | ⚠️ 已理論破解,棄用於新簽名 | 兼容舊系統、Git 物件標識(非安全用途) | sha1sum |
| SHA-256 | 256-bit (64 hex) | ✅ 當前推薦標準,無已知可行碰撞攻擊 | 通用文件完整性驗證、軟體發布校驗 | sha256sum |
| SHA-512 | 512-bit (128 hex) | ✅ 更高安全邊際 | 高安全需求、長期存證 | sha512sum |
| GPG/PGP | 非對稱簽名 | ✅ 身份認證 + 完整性 + 不可否認性 | 軟體官方發布、敏感文件傳輸、法律效力場景 | gpg --verify |
# 生成校驗碼並保存
sha256sum your-file.tar.gz > your-file.tar.gz.sha256
# 輸出範例
# a1b2c3d4... your-file.tar.gz
# 驗證文件完整性(需有 .sha256 檔案)
sha256sum -c your-file.tar.gz.sha256
# 成功輸出:your-file.tar.gz: OK
# 失敗輸出:your-file.tar.gz: FAILED
# sha256sum: WARNING: 1 computed checksum did NOT match
# 生成清單
sha256sum file1.iso file2.img file3.tar.gz > manifest.sha256
# 一鍵驗證全部
sha256sum -c manifest.sha256 --quiet # 僅顯示失敗項
sha256sum -c manifest.sha256 --strict # 嚴格模式,格式錯誤也報錯
# 1. 導入發布方公鑰 (例: Ubuntu)
gpg --keyserver keyserver.ubuntu.com --recv-keys 0x46181433FBB75451
# 2. 下載文件、簽名檔 (.asc/.sig) 和校驗碼檔
wget https://releases.ubuntu.com/22.04/ubuntu-22.04.3-live-server-amd64.iso
wget https://releases.ubuntu.com/22.04/ubuntu-22.04.3-live-server-amd64.iso.asc
wget https://releases.ubuntu.com/22.04/SHA256SUMS
wget https://releases.ubuntu.com/22.04/SHA256SUMS.gpg
# 3. 驗證校驗碼檔簽名 (確保 SHA256SUMS 未被竄改)
gpg --verify SHA256SUMS.gpg SHA256SUMS
# 輸出含 "Good signature from ..." 即信任
# 4. 核對 ISO 與 SHA256SUMS
sha256sum -c SHA256SUMS 2>&1 | grep ubuntu-22.04.3-live-server-amd64.iso
# 或直接驗證 ISO 簽名 (若發布方提供 .iso.asc)
gpg --verify ubuntu-22.04.3-live-server-amd64.iso.asc ubuntu-22.04.3-live-server-amd64.iso
- name: Download artifact and checksum
get_url:
url: "{{ item.url }}"
dest: "{{ item.dest }}"
checksum: "sha256:{{ item.sha256 }}"
loop:
- { url: "https://example.com/app.jar", dest: "/opt/app.jar", sha256: "a1b2..." }
- { url: "https://example.com/config.yml", dest: "/etc/app/config.yml", sha256: "c3d4..." }
#!/bin/bash
# verify_artifacts.sh
set -euo pipefail
MANIFEST="artifacts.sha256"
ARTIFACT_DIR="build/output"
echo "=== 開始驗證制品完整性 ==="
cd "$ARTIFACT_DIR"
if [[ ! -f "$MANIFEST" ]]; then
echo "❌ 缺少清單檔案: $MANIFEST" >&2
exit 1
fi
if sha256sum -c "$MANIFEST" --strict --quiet; then
echo "✅ 所有制品驗證通過"
exit 0
else
echo "❌ 制品完整性校驗失敗,禁止部署!" >&2
exit 1
fi
md5sum`/`sha1sum` 仍在輸出:僅供向後兼容,**嚴禁用於新系統安全驗證**。GPG簽名驗證清單 → 清單驗證文件。
文件完整性校驗不是可選項,是資安底線。確立 SHA-256 為基線、GPG 簽名為高值資產標準,將驗證邏輯內嵌至 CI/CD、部署腳本、Ansible Playbook 與事件響應手冊,構建「不信任、持續驗證」的零信任供應鏈防線。
Linux 禁止內核自動升級:yum 配置排除與命令行參數兩大方案
Linux 系統如何使用 QQ?Pidgin + WebQQ 協議實現 Linux 微信/QQ 互通
Ubuntu 查殺殭屍進程 (Zombie Process):ps 找出 PID/PPID → kill -HUP 父進程清理
Linux Crontab 定時任務 Shell 腳本不執行?環境變數缺失排查與修正
提升 Linux 下 Chrome 瀏覽器速度 6 招:更新、停用擴充功能、啟用快速關閉標籤等
Solaris 縮減現有檔案系統騰出空間建立新檔案系統的操作步驟