web-dev-qa-db-ja.com

ディレクトリツリー全体を再帰的に細断するにはどうすればよいですか?

Linuxの「shred」ユーティリティで細断処理したいディレクトリツリーがあります。残念ながら、シュレッドには-R再帰的な細断処理のオプション。

ディレクトリツリー全体を再帰的に細断するにはどうすればよいですか?

50
Steve V.

findコマンドを使用してshredを再帰的に実行します。

find <dir> -type f -exec shred {} \;
49
jamesallman

細断に注意!

シュレッドマンページから:

注意:細断処理は非常に重要な前提に依存していることに注意してください。ファイルシステムは所定の場所にあるデータを上書きするということです。これは従来の方法で行われますが、最近の多くのファイルシステム設計では、この仮定を満たしていません。以下は、シュレッドが有効でない、またはすべてのファイルシステムモードで有効であることが保証されていないファイルシステムの例です。

  • aIXおよびSolaris(およびJFS、ReiserFS、XFS、Ext3など)で提供されるものなどのログ構造化またはジャーナル化されたファイルシステム

  • rAIDベースのファイルシステムなど、一部の書き込みが失敗しても冗長データを書き込み、続行するファイルシステム

  • network ApplianceのNFSサーバーなど、スナップショットを作成するファイルシステム

  • nFSバージョン3クライアントなどの一時的な場所にキャッシュするファイルシステム

  • 圧縮ファイルシステム

Ext3ファイルシステムの場合、上記の免責事項はdata = journalモードでのみ適用され(したがって、シュレッドの効果は限定的です)、メタデータだけでなくファイルデータもジャーナルされます。 data = ordered(デフォルト)モードとdata = writebackモードの両方で、シュレッドは通常どおり機能します。マウントのマニュアルページ(man mount)に記載されているように、/ etc/fstabファイルの特定のファイルシステムのマウントオプションにdata = somethingオプションを追加することにより、ext3ジャーナリングモードを変更できます。

さらに、ファイルシステムのバックアップとリモートミラーには、削除できないファイルのコピーが含まれている場合があります。これにより、シュレッドされたファイルを後で復元できます。

ソリューション:暗号化されたファイルシステムを使用し、ファイルを削除します。

28
user unknown

代わりに安全な削除を使用してください。

Sudo apt-get install secure-delete
srm -r pathname

できました。安全な削除は、3の代わりに38パスを使用して、シュレッドよりもはるかに偏執的です。高速な単一パスを実行するには、

srm -rfll pathname

fllを使用すると、ランダム性の低いデータジェネレーターが得られ、パスは1回だけになります。

16
Cookie

この回答を、このスタックオーバーフローリンクを使用してシュレッドするための最もよく知られているオプションと組み合わせる ' CentOSでファイルを永続的かつ安全に削除する ':

find <directory> -depth -type f -exec shred -v -n 1 -z -u {} \;

編集:単一のファイルを細断するためのベストアンサーは、一部またはすべてのジャーナルファイルシステムにバッファ。

可能であれば、findコマンドは、実行するファイルに対してシェルスクリプトを呼び出す必要があります。

shred -v -n 1 /path/to/your/file #overwriting with random data
sync #forcing a sync of the buffers to the disk
shred -v -n 0 -z -u /path/to/your/file #overwriting with zeroes and remove the file

各ファイルに。

11
im3r3k
find /your/directory -exec shred {} \;
5
refp
find [dirname] -depth -type f -exec shred -n1 {} \;

これは、ディレクトリ[dirname]内のファイルの縦型検索を実行してから、各ファイルに対してshred -n1コマンドを実行します。ファイルまたはディレクトリ、あるいはその両方を削除する場合は、-depthをデフォルトとして追加することをお勧めします。 shredの代わりにrm -rfを使用してこの種のコマンドを実行する場合、ディレクトリのコンテンツを削除しようとする前にディレクトリが削除されないようにするために-depthが必要です(そのためエラーが発生します) )。

4
Alexander

私が見つけた最も徹底的なshredメソッドには、ディレクトリの削除も含まれますが、findにスクリプトを呼び出してshredを持たせることです。

  • ファイルを上書きする
  • 同期する
  • 次に削除します
  • 最後に、rmを呼び出してディレクトリ名を削除します。

このメソッドは、スペースを含むファイル名も適切に処理します。

まず-shredスクリプト(私はdirShredder.shと名付け、/rootディレクトリに保存しました:

shred -v -n 1 "$1" #overwriting with random data
sync #forcing a sync of the buffers to the disk
shred -v -n 0 -z -u "$1" #overwriting with zeroes and remove the file
rm -rvf "$1" # call rm to remove the directories

次に、次のようにスクリプトを呼び出します。

find /volume1/pathToShred/ -mindepth 1 -depth -exec /root/dirShredder.sh "{}" \;

必ずkillit.shファイルの実行可能ファイル(chmod +x)にマークを付け、もちろん、細断処理す​​るディレクトリのパスを更新します。他の場所に保存する場合は、dirShredder.shに更新します。

NOTA BENE-shredには、コピーオンライトファイルシステム(ZFS、BTRFSなど)およびジャーナルファイルシステムでも問題があります。 「暗号化されたファイルシステム」以外に私が見つけた、これに対処するための実際に受け入れられた「最善の」方法はありませんが、これが事後的にどれほど効果的かはわかりません。
取得できると思われる最も近いのは、シュレッダー処理後のランダムなデータでドライブのすべての空のスペースを上書きすることです(ゼロではなく、これは常に信頼できるとは限らないようです)。また、SSDには他の考慮事項もあります(トリム。)

ここでは詳しく説明しません。他のStackの回答(たとえば、この質問では@user unknownの回答)があり、これらのトピックをカバーする「ネット全体」でたくさんの議論が行われているため、そのレベルのセキュリティが必要な場合は検索してください。

0
JoelAZ