합리적인 시간 내에 git 저장소를 정확하게 삭제하고 싶습니다.
하지만 그렇게 하려면 시간이 꽤 걸립니다. 여기에 5MiB 미만의 폴더가 있는 작은 테스트 저장소가 있습니다 .git
.
$ du -ac ~/tmp/.git | tail -1
4772 total
$ find ~/tmp/.git -type f | wc -l
991
기본 옵션을 사용하면 shred
시간이 꽤 걸립니다. 다음 명령에서는 --force
권한을 변경하고 --zero
스매싱 후 0으로 덮어쓰곤 했습니다 . 기본 파쇄 방법은 임의의 데이터( -n3
)로 3회 덮어쓰는 것입니다.
나중에 이 파일도 삭제하고 싶습니다. man shred
에 따르면 --remove=wipesync
(기본적으로 --remove
사용되는 경우) 디렉토리에서만 작동하지만 파일에서만 작동하더라도 속도가 느려지는 것 같습니다. 비교하세요(git 저장소를 다시 초기화할 때마다):
$ time find ~/tmp/.git -type f | xargs shred --force --zero --remove=wipesync
real 8m18.626s
user 0m0.097s
sys 0m1.113s
$ time find ~/tmp/.git -type f | xargs shred --force --zero --remove=wipe
real 0m45.224s
user 0m0.057s
sys 0m0.473s
$ time find ~/tmp/.git -type f | xargs shred --force --zero -n1 --remove=wipe
real 0m33.605s
user 0m0.030s
sys 0m0.110s
더 좋은 방법이 있나요?
편집하다:예, 암호화가 핵심입니다. 지금은 그냥 사용하고 있어요 -n0
.
time find ~/tmp/.git -type f | xargs shred --force --zero -n0 --remove=wipe
real 0m32.907s
user 0m0.020s
sys 0m0.333s
64개 평행선 사용 shreds
:
time find ~/tmp/.git -type f | parallel -j64 shred --force --zero -n0 --remove=wipe
real 0m3.257s
user 0m1.067s
sys 0m1.043s
답변1
잊어버리세요 shred
. 쓸데없는 일을 하면서 많은 시간을 소비하고 본질을 놓치게 됩니다.
shred
20~30년 전의 디스크 기술과 고가의 실험실 장비를 사용하면 (적어도 이론상으로는) 덮어쓴 데이터를 복구하는 것이 가능하기 때문에 무작위 데이터로 여러 번 덮어써서 파일을 삭제합니다("Gutterman 삭제"). 최신 디스크 기술에서는 더 이상 그렇지 않습니다. 0으로 한 번 덮어쓰는 것도 좋지만 다중 무작위 패스 아이디어는 더 이상 사용되지 않는 후에도 지속됩니다. 바라보다https://security.stackexchange.com/questions/10464/why-is-writing-zeros-or-random-data-over-a-hard-drive-multiple-times-better-th
반면에 민감한 정보 지우기는 지우 shred
라고 지시받은 파일의 데이터만 지우기 때문에 완전히 실패합니다. 이전에 삭제된 파일에 저장된 모든 데이터는 파일 시스템을 통하지 않고 디스크에 직접 액세스하여 복구할 수 있습니다. Git 트리의 데이터는 재구성하기 쉽지 않을 수 있지만 이는 실제 위협입니다.
일부 데이터를 빠르게 지우려면 데이터를 암호화하세요. 당신은 그것을 사용할 수 있습니다암호화된 파일 시스템(홈 디렉토리 암호화) 또는환경 파일 시스템(디렉토리 트리 암호화) 또는DM 비밀번호(전체 파티션 암호화) 또는 기타 방법. 데이터를 지우려면 키를 지우면 됩니다.
당신은 또한 볼 수 있습니다디렉터리나 파일이 실제로 삭제되었는지 어떻게 확인할 수 있나요?
답변2
불필요한 다중 보도를 피하십시오 shred
. 예를 들어, 그것을 사용하는 데 다른 것은 필요하지 않습니다 shred -n 1
.
보안 파일 삭제(일반적으로)의 문제점은 git
편집, 복제, 분기 전환 등을 할 때마다 새 파일(또는 파일 세트)이 다른 물리적 위치에 생성된다는 것입니다. 결과적으로 알 수 없는 수의 복사본이 파일 시스템의 여유 공간으로 누출됩니다.
파일 시스템조차도 이러한 복사본이 어디에 있는지 모르기 때문에 어떤 도구나 방법을 사용하더라도 직접 덮어쓸 수는 없습니다. 대신 사용 가능한 전체 공간(파일 시스템에서 허용하지 않을 수 있음) 또는 전체 장치를 포괄해야 합니다.
전체 디스크를 덮어쓰는 데는 시간이 오래 걸리므로(특히 보관하려는 프로세스에서 파일을 앞뒤로 복사해야 하는 경우) 문제는 보안과 속도가 얼마나 중요한지입니다.
가장 빠른 방법은 아마도 직접 사용하는 것입니다 rm
. 물론 이것은 아무것도 다루지 않습니다.
그러나 이미 SSD를 사용하고 있는 경우 discard
설치 옵션을 통해 fstrim
여유 공간의 대부분을 빠르게 포기할 수 있으며, 손실된 공간을 복구할 뚜렷한 방법이 없습니다.
이는 실용성을 유지하면서 가정용으로 사용하기에 충분한 보안 수준이어야 합니다. 더 강력한 보안이 필요한 경우 암호화를 사용하세요.
shred -n 1
대량의 (의사) 무작위 데이터를 빠르게 쓸 수 있으므로 전체 디스크를 덮어쓰는 데 적합합니다. SSD의 경우에도 디스크 속도를 활용할 수 있을 만큼 빠릅니다. 따라서 0에 비해 단점이 없습니다.
0의 단점은 저장소가 실제로 쓰기보다는 사용 가능 또는 압축됨으로 표시하기로 결정할 수 있다는 것입니다. 스토리지 솔루션을 더 이상 실제로 제어할 수 없을 때 고려해야 할 사항입니다(블랙박스 또는 가상화된 환경으로 간주될 만큼 충분히 발전했기 때문).
답변3
shred
Git 저장소에 작은 파일이 너무 많아서 삭제하고 기존 데이터를 덮어쓰려면 시간이 오래 걸릴 것 같아요. 다른 작업을 수행하고 tmpfs
데이터를 RAM에 저장하는 것이 좋습니다 . 그런 다음 작업이 끝나면 저장된 데이터에 대해 걱정하지 않고 제거하면 됩니다.어딘가에물리적 저장소에 있습니다.
bash $ mkdir $REPO_NAME
bash $ sudo mount -o uid=$YOUR_USERNAME,gid=$YOUR_GROUP_NAME,size=100m \
> -t tmpfs tmpfs $REPO_NAME
bash $ git clone git://$GIT_SERVER/$REPO_PATH/${REPO_NAME}.git
완료되면:
bash $ sudo umount $REPO_NAME
bash $ rmdir $REPO_NAME
재부팅 및 정전 후에도 유지되는 또 다른 옵션은 파일 시스템이 연결된 디스크 이미지 파일을 생성하는 것입니다. 완료되면 shred
파일을 제출하세요. shred
저장소에 있는 모든 작은 파일을 작업하는 것보다 시간이 덜 걸립니다 . 두 개의 쉘 스크립트로 저장할 수 있습니다. (실제 저장소에서 작동하도록 하려면 편집해야 합니다.)
노트:우리는 사용하고 있습니다레이셀프스lost+found
ext 파일 시스템처럼 디렉토리를 자동으로 생성 하지 않기 때문입니다 . 당신은 그것을 사용할 수 있습니다BTFS또는 적합하다고 생각되는 다른 파일 시스템이지만 이를 생성하거나 마운트하는 구문이 정확히 동일하지 않을 수 있습니다.
저장소.sh 생성
#!/bin/bash
truncate --size 100M $IMAGE_FILE
/sbin/mkfs.reiserfs -fq $IMAGE_FILE
sudo mount -t reiserfs -o loop $IMAGE_FILE $REPO_NAME
chown $YOUR_USERNAME:$YOUR_GROUP_NAME $REPO_NAME
git clone git://$GIT_SERVER/$REPO_PATH/${REPO_NAME}.git
shred_repo.sh
#!/bin/bash
sudo umount $REPO_NAME
rmdir $REPO_NAME
shred $IMAGE_FILE