【Linux】md5sum/sha1sumコマンドでファイルのハッシュ値を計算・検証する

目次

概要

ファイルの「ハッシュ値(メッセージダイジェスト)」を計算し、ファイルが正しく転送されたか、あるいは改ざんされていないかを確認するためのコマンドです。

ISOイメージのダウンロード後の破損チェックや、バックアップデータの整合性確認で頻繁に使用されます。

なお、MD5とSHA1は現在セキュリティ的な脆弱性が指摘されているため、機密情報の署名など高度なセキュリティ用途には sha256sum などのより強固なアルゴリズムが推奨されますが、単なるファイル破損チェックには依然として広く利用されています。

仕様(引数・オプション)

構文

md5sum [オプション] [ファイル名]
sha1sum [オプション] [ファイル名]

主な引数・オプション

md5sumsha1sum のオプションは共通です。

オプション説明
-c / --check指定したファイルからMD5/SHA1合計を読み込み、ファイルを照合(チェック)します。
--quiet検証に成功した(OK)ファイルについては何も表示せず、失敗した場合のみ表示します。
--status何も出力しません。終了ステータス($?)のみで結果を返します(スクリプト向け)。
--strictチェックサム行のフォーマットが不正な場合に、非ゼロの終了ステータスを返します。
-w / --warnチェックサム行のフォーマットが不正な場合に警告を表示します。

基本の使い方

ファイルのハッシュ値を出力します。この値はファイルの内容が1ビットでも変われば全く異なる文字列になります。

コマンド

# ISOイメージのMD5ハッシュを表示
md5sum CentOS-7-x86_64-DVD.iso

# テキストファイルのSHA1ハッシュを表示
sha1sum readme.txt

実行結果

「ハッシュ値」と「ファイル名」が対になって出力されます。

88edc60b556943147814b62768532550  CentOS-7-x86_64-DVD.iso
da39a3ee5e6b4b0d3255bfef95601890afd80709  readme.txt

実践コマンド

ファイルの正当性を検証する(チェックサムファイルの作成と確認)

ハッシュ値をファイルに保存し、後日そのファイルを使って「中身が変わっていないか」を検証する基本的な流れです。

# 1. ハッシュ値をファイルに保存する
sha1sum test_data.txt > checksum.sha1

# (ここでファイルの内容を確認または変更する)

# 2. 保存したハッシュ値を使って検証する (-c)
sha1sum -c checksum.sha1
test_data.txt: OK

※ ファイルが改ざんされている場合は FAILED と表示されます。

ダウンロードしたISOイメージの整合性をチェックする

Linuxのディストリビューションなどをダウンロードした際、公式サイトで配布されているチェックサムファイルと照合して、ダウンロードミスがないかを確認します。

# 1. ファイルとチェックサム一覧(md5sum.txt)をダウンロード
wget http://mirror.example.com/centos/7/isos/x86_64/CentOS-7-x86_64-DVD.iso
wget http://mirror.example.com/centos/7/isos/x86_64/md5sum.txt

# 2. ダウンロードしたファイルに対応する行をgrepで抜き出し、検証コマンドに渡す
grep "CentOS-7-x86_64-DVD.iso" md5sum.txt | md5sum -c -
CentOS-7-x86_64-DVD.iso: OK

md5sum -c - の最後のハイフンは「標準入力から受け取る」という意味です。

終了ステータスで検証結果を判定する(スクリプト向け)

--status オプションを使うと、画面には何も出力されませんが、コマンドの終了ステータス($?)で成功・失敗を判定できます。シェルスクリプトでの自動化に便利です。

# 検証実行(成功ならステータス0、失敗なら1)
md5sum --status -c checksum.md5

# 直前のコマンドの結果を表示
echo $?

実行例(正常時と異常時)

# 正常な場合
md5sum --status -c checksum.md5; echo $?
# 出力: 0

# ファイルを改ざんしてから再チェック
echo "malicious data" >> target_file.txt
md5sum --status -c checksum.md5; echo $?
# 出力: 1

カスタムポイント

  • 複数ファイルの検証: md5sum *.iso > list.md5 のように複数のファイルのハッシュをまとめてリスト化し、md5sum -c list.md5 で一括チェックできます。
  • SHA256の利用: コマンド名は違いますが、使い方は sha256sum も全く同じです。現在はこちらが推奨される傾向にあります。

注意点

  1. セキュリティ強度:MD5およびSHA1は、異なるファイルが同じハッシュ値を持つ「衝突(コリジョン)」を意図的に作り出せることが証明されています。パスワードの保存や電子署名などのセキュリティ用途では使用せず、あくまで「ダウンロードエラーの検知」程度に留めてください。
  2. ファイルパスの問題:チェックサムファイルにはファイル名(パス)が含まれています。検証を実行する際は、ファイルが置かれているディレクトリ構造が、ハッシュ作成時と一致している(または相対パスが正しい)必要があります。
  3. 改行コード:Windowsで作成されたチェックサムファイル(CRLF)をLinuxで読み込むと、フォーマットエラーになることがあります。その場合は dos2unix などで変換してください。

応用

ファイル名データベースと比較して変更されたファイルを特定する

find コマンドで全ファイルのハッシュリストを作成し、後日それと比較することで、どのファイルが書き換えられたかを検知する簡易IDS(侵入検知システム)的な使い方です。

# 基準となるハッシュリストを作成
find /var/www/html -type f -exec md5sum {} + > website_snapshot.md5

# --- 時間経過後 ---

# 変更があったファイルのみを表示(--quietでOKなものは隠す)
md5sum --quiet -c website_snapshot.md5
/var/www/html/index.php: FAILED
/var/www/html/config.php: FAILED

まとめ

md5sum/sha1sumコマンドは、ファイルの「指紋」を確認するための基本ツールです。ISOイメージのような巨大なファイルをダウンロードした直後や、重要なデータを転送した後には、必ずハッシュチェックを行う習慣をつけることで、データ破損によるトラブルを未然に防ぐことができます。より高い信頼性が必要な場合は sha256sum を使用してください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次