Linux / コマンド / shred - ファイルデータの上書き

shredは、ファイルやデバイスのデータ領域を複数のパターンで上書きして、既存の内容を認識しにくくするコマンドです。しかし、SSDのウェアレベリング(書き込みを記憶領域に分散する仕組み)、ファイルシステムのスナップショット、変更時に別の領域へ保存するコピーオンライト方式、バックアップやRAIDのため、すべてのコピーの完全な削除を保証するツールではありません。

この記事では、基本的な使用方法とオプションだけでなく、shredが効果を期待できる条件、効果が制限される保存環境、より適した廃棄方法について説明します。

shredコマンドとは?

shredは、指定したファイルやブロックデバイスに繰り返しデータを書き込みます。基本的には上書きした後ファイル名は削除せず、削除まで試みるには-uが必要です。ファイルデータが同じ物理的位置に継続的に記録されることを前提としているため、現代のストレージデバイスやファイルシステムでは、元の痕跡が他の場所に残ることがあります。

基本的な文法

shred [オプション] ファイル ...

ファイル名やパスに空白がある場合は引用符で囲み、ハイフンで始まる名前は可能であれば--の後に指定します。サポートされるオプションはディストリビューションとGNU Coreutilsのバージョンによって異なる場合があるため、shred --helpとman shredで現在のシステムの説明を確認してください。

shredの基本的な使い方

ファイルの上書き

基本的な実行では、ファイル内容を何度も上書きしますが、ファイルエントリは残ります。テスト用ファイルでまず動作を確認してください。

shred secret.txt

上書き後にファイルを削除する

-uは上書き後にファイルを削除します。削除結果がすべての保存層で消えたという意味ではありません。

shred -u secret.txt

進行状況を確認する

大きなファイルやデバイスを処理する際に、-vで進行情報を見ることができます。

shred -v -n 3 disk-image.raw

完了メッセージと実際の削除保証を区別する

shredはオプションに応じて進行状況を表示しますが、エラーなしに終了したとしても物理的なストレージのすべてのコピーが消えたことを保証するものではありません。以下は自作のテストファイルのみを対象とします。

printf 'demo\n' > disposable-demo.txt
shred -u disposable-demo.txt
test ! -e disposable-demo.txt
echo $?

例示出力 0はファイル名が消えたことを確認するだけです。SSD、スナップショット、ジャーナリングファイルシステム、バックアップに残るデータは別途考慮する必要があります。

主なオプション

オプション 説明
-n N, --iterations=N データを上書きする回数を指定します。既定は3回です。
-u, --remove 上書き後にファイルを削除します。
-z, --zero 指定した回数に加え、最後に0で上書きするパスを1回追加します。
-v, --verbose 進捗状況を出力します。
-s SIZE 指定したバイト数だけ上書きします。
-x, --exact ファイルを全体のブロック境界まで拡張しません。
-f, --force 必要に応じて権限を変更して書き込みを試みます。
--random-source=FILE ランダムバイトの供給元を指定します。

長いオプションは意味を把握しやすく、スクリプトの確認にも役立ちます。ただし、移植性が重要なスクリプトでは対象システムがその GNU 拡張オプションをサポートしているかをまず確認してください。

実践的活用例

通常ファイルを指定した回数で上書きする

上書き回数が増えると時間がかかります。現代の保存環境では、回数を増やすよりも、ストレージ層の特性と暗号化の有無を把握することの方が重要です。

shred -v -n 1 -z -u confidential.bin

ブロックデバイス処理前に識別する

デバイスパスを間違えると、他のディスク全体が破壊される可能性があります。マウントを解除し、lsblk、サイズ、モデルとの関係を複数の方法で確認する必要があります。

lsblk -o NAME,SIZE,MODEL,SERIAL,FSTYPE,MOUNTPOINTS
findmnt

暗号化ベースの廃棄を検討する

最初からディスク全体を暗号化していた場合、信頼できるキーの廃棄はデータアクセスを防ぐ重要な手段となる可能性があります。ただし、平文の別コピーや復旧キー・キーのバックアップが残っていないことなど、方式ごとの条件を満たす必要があります。以下の cryptsetup status は既存のマッピングの状態を表示するだけで、キーを破棄するコマンドではありません。組織のポリシーとデバイス製造業者のセキュア消去機能、物理廃棄の要件を合わせて確認してください。

cryptsetup status encrypted-volume

shredと関連コマンドの比較

コマンド・方法 主な役割 適した状況
rm ファイル名の削除とスペースの返却 rmによる通常のファイル削除
shred 同じ場所への繰り返し書き込み試行 条件に合う記憶媒体の限定的上書き
装置セキュリティ削除 装置ファームウェアレベルでの削除・キー廃棄 対応するSSD・NVMeで、機器の仕様と廃棄ポリシーに沿って処理する場合
物理破壊 媒体自体を復元不可能な状態に処理 規定上、高い保証レベルが必要な廃棄

使用する際の注意点

上書きは同じinodeを共有する別のハードリンクから見える内容にも影響します。練習にはまだ存在しない専用ファイル名を使い、他のデータへのリンクや同期対象ではないことを確認してください。ジャーナリングについては、ファイルのデータ自体をジャーナルに書く設定かどうかで条件が異なります。ファイルシステム名だけで安全性を判断せず、動作が不明なら同じ場所への上書きで消せると仮定しないでください。

SSDでは同じセルに上書きすると保証できない

ウェアレベリングと予備ブロックのため、論理アドレスに再度書き込んでも元のデータがあった物理セルがすぐに上書きされないことがあります。

ファイルシステムのコピーが残ることがあります

ジャーナル、スナップショット、コピーオンライト、RAID、リモート同期およびバックアップには、別のコピーが存在することがあります。個々のファイルを上書きするだけではすべてを削除できません。

デバイスパスの間違いは致命的です

ブロックデバイスで実行すると、ファイルシステム全体を失う可能性があります。マウント状態とデバイスIDを確認し、復元するデータがないか独立して検証してください。

FAQ

shred -uを使うとファイルを完全に復元できませんか?

保証できません。ストレージデバイス、ファイルシステム、スナップショットおよびバックアップ構造によっては、別のコピーや以前の物理ブロックが残ることがあります。

SSDファイルにもshredを使っていいですか?

SSDのウェアレベリングのため、個別ファイルの上書きの効果を信頼するのは難しいです。全ディスク暗号化やメーカー・標準に基づくセキュア消去手順を検討してください。

-zオプションはセキュリティを高めますか?

指定した上書き回数に加えて最後に0で上書きするオプションであり、他の層のコピーを削除したり、完全削除を保証するものではありません。

一般的なファイル削除にはrmとshredのどちらが良いですか?

機密データの残存リスクを別途扱わない一般削除にはrmが適しています。shredは、保存環境と脅威モデルを理解した場合のみ使用してください。

参考資料