2026年8月16日
2026年8月16日
Linuxでファイルの完全削除(shred)を行う方法
はじめに
サーバーを廃棄・返却する前に機密データを安全に消去したい・rmコマンドで削除したファイルが復元できてしまうことを知らなかった・shredコマンドの使い方がわからない・SSDではshredが効果がないと聞いたが正しい消去方法を知りたいといった問題の解決方法を解説します。
症状・原因
rmコマンドはファイルシステムのエントリを削除するだけで、データはディスクに残る- 個人情報・秘密鍵・パスワードファイルを削除したが復元ツールで取り出せてしまう
- SSDのウェアレベリングにより
shredが一部のブロックに書き込めない - ジャーナリングファイルシステム(ext4)では
shredでも完全消去できない場合がある
解決手順
ステップ1:shred コマンドの基本を理解する
# ✅ shred のインストール確認(通常はプリインストール済み)
which shred
# → /usr/bin/shred
# ✅ shred の基本的な使い方
shred -u secret.txt
# -u: 上書き後にファイルを削除
# ✅ 上書き回数を指定(デフォルトは3回)
shred -n 7 -u sensitive.txt
# -n 7: 7回ランダムデータで上書き
# ✅ 進捗を表示しながら削除
shred -v -n 3 -u private_key.pem
# → shred: private_key.pem: pass 1/4 (random)...
# → shred: private_key.pem: pass 2/4 (random)...
# → shred: private_key.pem: pass 4/4 (000000)...
# → shred: private_key.pem: removing
# ✅ ゼロで上書きしてから削除(パターンを隠す)
shred -z -u database_backup.sql
# -z: 最後にゼロで上書き(ランダムデータの痕跡を隠す)
ステップ2:ディレクトリ全体を安全に削除する
# ✅ ディレクトリ内の全ファイルを shred で削除
find /path/to/sensitive-dir/ -type f -exec shred -v -u {} \;
# ✅ その後ディレクトリを削除
rm -rf /path/to/sensitive-dir/
# ✅ スクリプト化して安全に実行
#!/bin/bash
TARGETDIR="/var/backups/sensitive"
if [ -d "$TARGETDIR" ]; then
echo "Securely deleting: $TARGETDIR"
find "$TARGETDIR" -type f | while read -r file; do
shred -v -z -u "$file"
echo "Deleted: $file"
done
rm -rf "$TARGETDIR"
echo "Complete."
fi
# ✅ WordPress の wp-config.php を安全に削除(サーバー廃棄時)
shred -z -u /var/www/html/wp-config.php
shred -z -u /var/www/html/.env
ステップ3:SSD の安全な消去方法
# ✅ SSD では shred は効果が限定的
# ウェアレベリングにより同じブロックへの書き込みが保証されない
# ✅ ATA Secure Erase(SSD に有効)
# hdparm でセキュア消去
sudo hdparm -I /dev/sda | grep "supported"
# → Security level maximum: not supported ← サポートなし
# → Security level maximum: supported ← サポートあり
# ✅ NVMe SSD のフォーマット
sudo nvme format /dev/nvme0n1 --ses=2 --force
# --ses=2: ユーザーデータの暗号消去
# ✅ cryptsetup での暗号化 + 鍵破棄
# 暗号化されたディスクは鍵を破棄すれば復元不可能
sudo cryptsetup luksErase /dev/sdb
# → すべてのLUKSキースロットを消去
# ✅ LUKS 暗号化ボリュームのマスターキーを消去
sudo cryptsetup luksRemoveKey /dev/sdb
ステップ4:ディスク全体を消去する
# ✅ ディスク全体をランダムデータで上書き(HDD に有効)
sudo shred -v -n 1 -z /dev/sdb
# 警告: 数時間かかる(1TB で約2-4時間)
# ✅ dd でゼロ書き込み(高速・低セキュリティ)
sudo dd if=/dev/zero of=/dev/sdb bs=4M status=progress
# ✅ ランダムデータで上書き(より安全)
sudo dd if=/dev/urandom of=/dev/sdb bs=4M status=progress
# ✅ wipe コマンド(より多くのパターン対応)
sudo apt install wipe
sudo wipe -kq /dev/sdb
# ✅ DBAN(Darik's Boot and Nuke)
# CD/USBから起動してGUIで消去(廃棄前の最終手段)
ステップ5:WordPress サーバー廃棄前のデータ消去チェックリスト
# ✅ WordPressデータを完全消去するスクリプト
#!/bin/bash
echo "=== WordPress Server Decommission ==="
# 1. データベースを削除
mysql -u root -p -e "DROP DATABASE wordpress;"
# 2. wp-config.php(DB認証情報)を安全に削除
shred -z -u /var/www/html/wp-config.php
# 3. アップロードファイルを削除
find /var/www/html/wp-content/uploads/ -type f -exec shred -u {} \;
# 4. ログファイルを削除
shred -z -u /var/log/nginx/access.log
shred -z -u /var/log/nginx/error.log
shred -z -u /var/log/apache2/access.log 2>/dev/null
# 5. SSH 秘密鍵を削除
shred -z -u ~/.ssh/id_rsa
shred -z -u ~/.ssh/authorized_keys
# 6. 環境変数ファイルを削除
find /var/www/ -name ".env" -exec shred -z -u {} \;
echo "=== Secure deletion complete ==="
# ✅ 削除後の確認
ls /var/www/html/wp-config.php 2>&1
# → ls: cannot access '/var/www/html/wp-config.php': No such file or directory
注意事項
- SSDには
shredコマンドの効果が限定的です。SSDはウェアレベリングにより書き込み先ブロックを分散させるため、同じファイルが複数のブロックに残る可能性があります。SSDの廃棄には「ATA Secure Erase」または「NVMe Format」を使ってください shred -u /dev/sdaのようなデバイスへの直接指定は取り消せません。実行前に対象デバイスをlsblkで必ず確認してください
まとめ
Linuxでの安全なファイル削除は①shred -z -uでファイルを上書き後削除・-n 7で上書き回数指定・-vで進捗表示、②find -type f -exec shred -u {} \;でディレクトリ全体を削除・スクリプト化で安全実行、③SSDではhdparmのATA Secure EraseまたはNVMeフォーマット・LUKSの鍵破棄で暗号化ボリュームを無効化、④HDD全体消去はshred -n 1 -z /dev/sdbまたはddでゼロ書き込み・DBリオゼロ書き込み、⑤サーバー廃棄前にwp-config.php・DB・ログ・SSH鍵を順番に完全消去の手順で対応します。