ファイルを安全に削除する

手持ちのPCを中古品として処分するときやリース機材のPCを返却するとき、装備されているHDDの内容をどのようにして削除すればよいだろうか。

消えないファイル

これまで使用してきたファイルをあとかたもなく削除しようとするのであれば、通常通りの削除操作をしたりフォーマットしたりするだけでは不十分である。このことは次のような実験をすれば簡単に確認することができる。

	# dd if=/dev/zero of=./image bs=1k count=1024
	1024+0 records in
	1024+0 records out
	1048576 bytes transferred in 0.043895 seconds (23888268 bytes/sec)
	# mke2fs -F ./image
		(省略)
	# mount -o loop ./image /mnt
	# echo foo bar baz > /mnt/test
	# sync
	# ls /mnt
	lost+found  test
	# strings ./image
	`;h 
	lost+found
	test
	foo bar baz
	#

まず0で埋めつくされたファイルimageを作り、そのファイルにext2のファイルシステムを構築する。ファイルシステムができたら/mntにマウントし、内容が「foo bar baz」であるテスト用のファイル/mnt/testを作成する。この時点でファイルimageに含まれる文字列を抽出すると、たしかに「foo bar baz」が記録されていることを確認できる。

	# rm /mnt/test
	# sync
	# ls /mnt
	lost+found
	# strings ./image
	`;h 
	lost+found
	test
	foo bar baz
	#

次にテスト用のファイル/mnt/testを削除する。lsコマンドを使ってファイルが確かに削除されたことを確認した上で、再びファイルimageから文字列を抽出してみる。するとテスト用のファイルの内容であった「foo bar baz」が消えておらず、まだ残っていることが分かるはずだ。

	# umount /mnt
	# mke2fs -F ./image
		(省略)
	# strings ./image
	_MYMB
	lost+found
	foo bar baz
	# dd if=/dev/zero of=./image bs=1k count=1024
	1024+0 records in
	1024+0 records out
	1048576 bytes transferred in 0.042848 seconds (24472016 bytes/sec)
	# strings ./image
	#

さらにファイルシステムをアンマウントし、ファイルシステムを作り直してみても「foo bar baz」が生き残り続けていることも確認できた。「foo bar baz」が消えたのはファイルimageを0で埋め直したときであった。

ファイルを安全に削除する

ファイルをあとかたなく削除するためには、ファイルの削除に先立ってファイル全体を意味のないデータでいったん上書きし、その上でファイルの削除をする必要がある。また、上書きの際にはランダムなデータを複数回書き込んだほうがよいなど、いくつかのポイントがあるとされている。こうした作業は各種コマンドを組み合わせて実行することも可能ではあるが、安全なファイル削除に特化した専用ツールも存在するので、それらを活用するとよいだろう。

GNU core utilitiesに含まれているsharedやwipeはそうしたツールである。これらのツールを使えば個々のファイルやファイルシステム全体を安全に削除することが可能だ。使用方法はいずれも簡単で引数に削除したいファイルのパスを指定すればよい(その他オプションについてはマニュアルページを参照)。

	$ shred -u image
	$ wipe image
	Okay to WIPE 1 regular file ? (Yes/No) Yes
	Operation finished.                                                           
	1 file wiped and 0 special files ignored in 0 directories, 0 symlinks
	removed but not followed, 0 errors occured.

実行例のようにshredでは-uオプションを指定しない限りファイルの削除は行われない(内容の破壊作業は行われる)。これは/dev/hda2などといったファイルシステム全体を対象としてコマンドが実行されることを想定しているためということだ。またwipeでは(-fオプションを指定しない限り)ファイルを削除してもよいかどうかの確認があり、Yesで答えることによってはじめて実際の削除が行われる。

前述したようにファイルの削除を行っただけでは、使用していたファイルの内容の全部または一部がファイルシステムに残ったままになってしまうことはよくある。したがって、システムを運用している間はともかくとして、システムの廃棄、返却、貸し出しなどの際には十分に注意しなくてはならない。