전체 디렉토리 트리를 재귀 적으로 파쇄하려면 어떻게해야합니까?


47

Linux 'shred'유틸리티로 파쇄하려는 디렉토리 트리가 있습니다. 불행히도 파쇄에는 -R재귀 파쇄 옵션 이 없습니다 .

전체 디렉토리 트리를 재귀 적으로 파쇄하려면 어떻게해야합니까?

답변:


45

find명령을 사용하여 shred재귀 적 으로 실행 하십시오 .

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

-depth 옵션없이 작동합니까? 최신 저널링 파일 시스템에서 작동합니까?
사용자가 알 수 없음

@userunknown 아니오, 최신 저널링 파일 시스템에서는 조각이 작동하지 않습니다. 보다 정확한 정보는를 참조하십시오 man shred.
FanaticD

또한이 방법은 filenames을 지우려고 시도하지 않으므로 이와 같이 저장된 모든 데이터는 확실히 남습니다 ( srm@Cookie의 답변에서 적어도이 문제를 해결하려고 시도합니다).
ntninja

-exec shred {} +파쇄는 여러 개의 인수를 허용하므로 더 빨리 만드는 데 사용하십시오 .
수밋

28

파쇄 조심!

파쇄 맨 페이지에서 :

주의 : 파쇄는 파일 시스템이 데이터를 덮어 씁니다라는 매우 중요한 가정에 의존합니다. 이것은 전통적인 방식으로 수행되지만 많은 현대 파일 시스템 디자인은이 가정을 만족시키지 않습니다. 다음은 파쇄가 유효하지 않거나 모든 파일 시스템 모드에서 유효하지 않을 수있는 파일 시스템의 예입니다.

  • AIX 및 Solaris (및 JFS, ReiserFS, XFS, Ext3 등)와 함께 제공되는 것과 같은 로그 구조 또는 저널 파일 시스템

  • RAID 기반 파일 시스템과 같이 일부 쓰기에 실패하더라도 중복 데이터를 작성하고 계속 수행하는 파일 시스템

  • Network Appliance의 NFS 서버와 같은 스냅 샷을 작성하는 파일 시스템

  • NFS 버전 3 클라이언트와 같은 임시 위치에 캐시하는 파일 시스템

  • 압축 파일 시스템

ext3 파일 시스템의 경우, 위의 면책 조항은 data = journal 모드에서만 적용됩니다 (따라서 메타 데이터뿐 아니라 파일 데이터를 저널링합니다). data = ordered (기본값) 및 data = writeback 모드 모두에서 파쇄가 정상적으로 작동합니다. mount 매뉴얼 페이지 (man mount)에 설명 된대로 / etc / fstab 파일의 특정 파일 시스템에 대한 마운트 옵션에 data = something 옵션을 추가하여 Ext3 저널링 모드를 변경할 수 있습니다.

또한 파일 시스템 백업 및 원격 미러에는 제거 할 수없는 파일의 사본이 포함되어 있으며 나중에 파쇄 된 파일을 복구 할 수 있습니다.

솔루션 : 암호화 된 파일 시스템을 사용하고 파일을 삭제하십시오.


파쇄에 대한 포인터의 경우 +1, 비슷한 경우가있었습니다. NetApp의 NFS에서는 작동하지 않았습니다. NetApp은 WAFL을 사용하며 메타 저널링을 포함한 COW (Copy-On-Write)를 사용합니다. 또한 최신 Solaris의 ZFS는 파쇄가 발생하는 또 다른 경우입니다.
Nikhil Mulley

6
이것은 나쁜 해결책입니다. 암호화 된 파일 시스템은 잠겨 있고 마운트 해제되지 않은 경우에만 안전합니다. OS가 시작되고 실행되는 즉시 데이터가 제공됩니다.
oleks

3
@oleks : shred데이터 암호화 사용 및 데이터 암호화는 오프라인 저장 장치에서 데이터를 읽지 못하도록합니다 (도난 또는 경찰 생각). 파일 시스템이 마운트되면 우리는 어느 경우 에나 좋은 유닉스 권한으로 돌아가고 데이터 보호는 OS 보안과 적절한 시스템 관리의 작업이됩니다. 선행 파일 시스템 암호화는 전략적으로 사용하는 것보다 미사용 데이터를 보호하는 데있어 결코 나쁘지 않습니다shred !
ntninja

12

대신 보안 삭제를 사용하십시오.

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

끝난. 보안 삭제는 파쇄보다 훨씬 많은 편집증이며 3 대신 38 패스를 사용합니다. 빠른 단일 패스를 수행하려면

srm -rfll pathname

fll은 덜 무작위적인 데이터 생성기를 제공하며 단일 패스 만 제공합니다.


unix.stackexchange.com/a/27075/18886에 언급 된 문제를 해결합니까 ?
Ian Dunn

어떻게 할 수 있습니까? 아니오
쿠키

이 방법은 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쉘 스크립트에 추가 한 디렉토리를 제거하지 않기 때문에 추가 할뿐입니다 (여기서 $ 1은 / path / to / your / file에서 {}확장에서 전달 된 파일입니다 find... -exec)
JoelAZ

4
파쇄는 각 패스 후에 이미 fsync (2)를 수행합니다. 다음 단계를 수행하기 전에 파일 변경 사항이 디스크에 도달하도록해야하기 때문입니다.
Ángel

무엇 않습니다 depth여기합니까? 또한 후행 백 슬래시에 대해 확신
geneorama

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

공감했지만 제임스가 1 분 동안 당신을 이겼습니다.
Steve V.

-depth 옵션없이 작동합니까? 최신 저널링 파일 시스템에서 작동합니까?
사용자가 알 수 없음

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

[dirname] 디렉토리에서 파일에 대한 깊이 우선 검색을 수행 한 다음 shred -n1각 파일 에서 명령 을 실행 합니다. 파일 및 / 또는 디렉토리를 제거 할 때는 -depth이 경우에 꼭 필요한 것은 아니지만 기본값으로 추가 하는 것이 좋습니다. 와 명령의 종류를 실행하는 경우 rm -rf대신 shred, -depth디렉토리의 내용 (따라서 오류를 일으키는) 삭제하려고 시도하기 전에 디렉토리가 삭제되지 않도록하기 위해 필요합니다.


3
shred -N 1기본값은 3 번 파쇄되므로 뱀 오일이므로을 사용해야합니다 . 한 번이면 충분하거나 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는 - shred복사 -에 - 쓰기 파일 시스템 (ZFS, BTRFS, 등)에, 심지어 저널링 파일 시스템에 문제가 있습니다. "암호화 된 파일 시스템"이외의 다른 방법으로이 문제를 처리 할 수있는 "최상의"방법은 없지만 실제로 이것이 얼마나 효과적인지 잘 모르겠습니다.
얻을 수있는 가장 가까운 것은 파쇄 작업 후 드라이브의 모든 빈 공간을 임의의 데이터로 덮어 쓰는 것입니다 (0이 아니라 항상 신뢰할 수있는 것 같지는 않습니다). 또한 SSD는 TRIM과 같은 다른 고려 사항이있을 수도 있습니다.

나는 여기에 들어 가지 않을 것입니다. 다른 질문에 대한 답변 (예 :이 질문에 대한 사용자 알 수없는 답변)과 인터넷을 통해 이러한 주제를 다루는 많은 토론이 있으므로 보안 수준이 필요한 경우 검색하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.