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


47

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

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

回答:


45

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

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

-depthオプションなしでも機能しますか?最新のジャーナリングファイルシステムで動作しますか?
ユーザー不明

@userunknownいいえ、shredは最新のジャーナリングファイルシステムでは機能しません。より正確な情報については、を参照してくださいman shred
-FanaticD

また、このメソッドはfilenamesを消去しようとしないことにも注意してください。したがって、このように保存されたデータは必ず残されます(srm@Cookieの回答からは、少なくともこの問題を軽減しようとします)。
ntninja

-exec shred {} +シュレッドは複数の引数を受け入れるため、高速化するために使用します。
Sumit

28

細断に注意してください!

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

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

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

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

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

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

  • 圧縮ファイルシステム

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

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

解決策:暗号化されたファイルシステムを使用し、ファイルを削除するだけです。


細断処理のポインタに+1を使用した場合、同様のケースが発生しました。NetAppのNFSでは機能しませんでした。NetAppはWAFLを使用し、メタジャーナリングを含むコピーオンライトを使用するため、その権利があります。また、最新のSolarisのZFSには、断片化が起こる別のケースがあります。
ニキルマレー

6
これは悪い解決策です。暗号化されたファイルシステムは、ロックされている(マウントされていない)限り安全です。OSが起動して実行されるとすぐに、データはすぐに利用できます。
15

3
@oleks:shredデータ暗号化の使用とデータ暗号化の両方により、(適切に)削除されたファイルだけでなく、すべてのファイルを保護するという利点があるデータ暗号化により、オフラインストレージデバイスからのデータの読み取りが防止されます(盗難または警察を考えてください)。ファイルシステムがマウントされると、いずれの場合も適切なUNIX権限に戻り、データ保護はOSセキュリティと適切なシステム管理のタスクになります。アップフロントファイルシステムの暗号化は、確かに悪くないの戦略的な使い方よりも、安静時のデータの保護にshred
ntninja

12

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

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

できた 安全な削除は、3回ではなく38回のパスを使用して、シュレッドよりもずっと妄想的です。高速なシングルパスを実行するには、

srm -rfll pathname

fllは、ランダム性の低いデータジェネレーターを取得し、パスを1つだけにします。


unix.stackexchange.com/a/27075/18886に記載されている問題は解決しますか?
イアン・ダン

どうして?いいえ
クッキー

この方法には、findファイル名を切り捨ててリンク解除する前にファイル名を変更することで、保存されているファイル名も消去しようとする提案ベースの方法よりも追加の利点があることに注意してください。
ntninja

@ntninjaの検索ベースのメソッドはシュレッドを使用し、シュレッドはファイルの削除を完了する前にファイル名を変更します。同じメリットがありますか?
tuxayo

11

この答えを、このスタックオーバーフローリンク ' 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

各ファイルに。


多くの答えを読んで調査した後、私はこの答えが最も徹底的であることがわかりました。rm -rvf $1{}find... -exec
shred

4
shredは、各パスの後に既にfsync(2)を実行しています。なぜなら、次のパスの前にファイルの変更を強制的にディスクに到達させる必要があるからです。
アンヘル

depthここで何をしますか?後続のバックスラッシュについても不明な点
geneorama

5
find /your/directory -exec shred {} \;

賛成ですが、ジェームズは受け入れて1分あなたを打ちました。
スティーブV.

-depthオプションなしでも機能しますか?最新のジャーナリングファイルシステムで動作しますか?
ユーザー不明

3
find [dirname] -depth -type f -exec shred -n1 {} \;

これにより、ディレクトリ[dirname]内のファイルの深さ優先検索が実行さshred -n1れ、各ファイルでコマンドが実行されます。ファイルやディレクトリを削除する-depth場合、この場合は厳密に必要ではありませんが、デフォルトとして追加するのは良い習慣です。コマンドのこの種を実行している場合はrm -rf代わりにshred-depthディレクトリの内容が(したがって、エラーを引き起こす)を削除しようとする前に、ディレクトリが削除されていないことを保証するために必要とされます。


3
を使用する必要がshred -N 1あります。デフォルトでは、3回細断されるのはヘビ油です。1回で十分であるか、30回は機能しません。
ユーザー不明

簡単なコマンドを答えとして提供することは、質問に答える最良の方法ではありません。ラインが何をしているのか、それを使用する際に考えられる制限について、簡単な説明を追加することをお勧めします。
n0pe

0

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- shredCopy-on-Writeファイルシステム(ZFS、BTRFSなど)およびジャーナリングファイルシステムにも問題があります。「暗号化されたファイルシステム」以外に見つけた、これに対処するための実際に受け入れられた「最良の」方法はありませんが、これが事後的にどれほど効果的かはわかりません。
あなたが得ることができると思われる最も近い方法は、シュレッディング操作の後にランダムなデータでドライブのすべての空のスペースを上書きすることです(ゼロではなく、これは常に信頼できるとは限りません)。また、SSDにも他の考慮事項があります(TRIMなど)

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.