Linuxを使っていて、複数のユーザがアクセスするようなサーバの場合だと、パスワード等が書かれているファイルを個別に削除したいこともあるだろう。

この場合、rmコマンドだとディスク上のインデックスだけを削除するため、ディスクリカバリツールなどで復旧される可能性がある。 それを防ぐためには、対象のファイルがリカバリツールから復旧できないようにファイルのデータを完全に削除する必要がある。

Linuxでは、対象のデータを完全に削除するツールがいくつか存在している。 なお、どれもそうだがジャーナリングファイルシステム(ext3/ext4含む)を使用している場合、データジャーナリングが有効になっていると、これらのコマンドを実行してもデータが復旧できてしまうので注意。

1. shred

CentOSやUbuntuであればバンドルでインストールされているコマンド。 基本はこのコマンドを使えばいいだろう。 ファイルを指定してコマンドを実行することで、ファイルをランダムな内容で何度も上書き(デフォルトでは3回)して完全に消去する。

shred ファイルPATH
shred -n N ファイルPATH # 上書き回数

2. wipe

もともとは磁気メディアからファイルを完全に消去するために開発されたツールらしい。 shredコマンドと同じようにファイルを繰り返し上書きして消去する。

インストールは簡単で、以下のコマンドで行える。

sudo apt install wipe # Debian/Ubuntu系
yum install --enablerepo=epel wipe # RHEL系(CentOS 7では非動作)

実行方法は簡単で、以下のようにPATHを指定するだけだ。

wipe 対象PATH

3. Secure-Delete(Ubuntuの場合)

Secure-Deleteパッケージを導入すると、srmやsfillなどの4つのコマンドがインストールされる。 (CentOSの場合だと、srmコマンドのみyumからインストールできる)

sudo apt install secure-delete

srm以外は今回の趣旨ではおまけのようなものだが、一応記述しておく。

3-1. srmコマンド

srmコマンドは、shredコマンドやwipeコマンドと同様に何度もデータを上書きしてファイルを削除するコマンドだ。 CentOS 7ではEpelからインストールできる。

yum install --enablerepo=epel srm

以下のように、削除するファイルやディレクトリのPATHを指定してコマンドを実行する。 (再帰的に削除する場合は-rオプションを付与する)

srm 対象PATH

3-2. sfill

sfillコマンドは、ディスクの空き領域にあるデータをすべて削除してくれるコマンドだ。 指定したPATHにランダムな内容を書き込んだファイルを作成して書き込みを行うため、ディスクへの書き込みが大量に行われるので注意。

sudo sfill /一時ファイルの書き込み先PATH

3-3. sswap

SWAPパーティション上にあるデータを安全に削除するコマンド。 事前に対象のSWAPパーティションのアンマウントが必要なので注意。

sudo sswap /dev/SWAPパーティションのPATH

3-4. sdmem

メモリ上に存在するデータを安全に削除するコマンド。

sudo sdmem -f -v

まぁ、何やかんや消しきれなかったりすることもあるので、まずHDDからのリカバリを試みられるような状況にしないほうが優先な気がしなくもないけど、ちゃんと消せるものは消しておきたいものですね。