🗑️
[AWS EC2] shredで完全にファイル削除してみた(Red Hat 9 + HDD編)
結論
以下のコマンドを使うことで、指定したディレクトリ以下のファイルを完全削除できます。
また、日本語・空白・改行などを含む特殊なファイル名にも対応できます。
コマンド
find 削除対象のディレクトリ名(中身のファイル名を検索) -type f -print0 | xargs -0 shred -u -v -z -n 3
ファイル指定の例
find ~/shred-test/ -type f -print0 | xargs -0 shred -u -v -z -n 3
-
find
検索-
-type f
ファイル名を検索 -
-print0
NULL文字区切りで出力(空白・日本語・改行を含むファイル名に対応)
-
-
xargs
スペース・改行で区切る-
-0
区切り文字をNULL文字に設定
-
-
shred
-
-u
上書き後にファイルを削除 -
-v
詳細表示(処理中のファイル名など表示) -
-z
最後に0で上書き(ファイルの中身をゼロに) -
-n 3
ランダムなデータで3回上書き(合計4回上書き:最後に-z
で0を上書きするため)
-
shredの動作確認
環境
EC2で動作を確認しています。
EC2 の立ち上げ方法がわからない方は、私が書いたこちらの記事も参考にしてみてください👇
EC2インスタンス作成からVSCodeリモート接続まで(Amazon Linux 2 編)
- OSイメージ:Red Hat Enterprise Linux 9
- ストレージ設定:マグネティック(標準に変更)
HDDを使用するためにEBS(マグネティックボリューム)を選択します。
削除のテスト
ファイル作成と中身を確認します。
-
echo "秘密のメッセージ123" > secret.txt
secret.txtを作成して、"秘密のメッセージ123"を追記して保存します。 -
cat secret.txt
正しく作成できたか確認します。 -
xxd -b secret.txt
フィルの中身のバイナリを確認します。
xxd
とはバイナリファイルを人間が読める形式(主に16進数や2進数)に変換して表示してくれるツール
-b
バイナリ(2進数)形式で表示するオプション
ターミナル
[ec2-user@ <IPアドレス> ~]$ echo "秘密のメッセージ123" > secret.txt
[ec2-user@ <IPアドレス> ~]$ cat secret.txt
秘密のメッセージ123
[ec2-user@ <IPアドレス> ~]$ xxd -b secret.txt
以下に実行結果の画像を示します。
shred
で削除して再度中身を確認
以下のコマンド削除を行います。
コマンド
shred -v -n 3 -z ファイル名
ターミナル
[ec2-user@ <IPアドレス> ~]$ shred -v -n 3 -z secret.txt
shred: secret.txt: pass 1/4 (random)...
shred: secret.txt: pass 2/4 (random)...
shred: secret.txt: pass 3/4 (random)...
shred: secret.txt: pass 4/4 (000000)...
[ec2-user@ <IPアドレス> ~]$ xxd -b secret.txt
以下に実行結果の画像を示します。
参考リンク:ファイル・ディスクの中身を完全消去(京都大学)
結果
shred コマンドを実行したことで、ファイルの中身が完全に破壊されていることがわかりました。
以下のポイントが確認できました:
- 文字列 "秘密のメッセージ123" は削除後、バイナリ上に一切残っていない
- 上書きは
-n 3
(ランダム3回)+-z
(ゼロ上書き1回)の合計4回実行されている -
xxd -b
の結果から、意味のある2進数列がノイズやゼロに置き換わっている
特にHDD(マグネティックボリューム)を使うことで、shred の上書き効果が物理的にも有効であることが確認できました。
Discussion