git 저장소를 합리적으로 빠르게 분쇄하는 방법은 무엇입니까?

git 저장소를 합리적으로 빠르게 분쇄하는 방법은 무엇입니까?

합리적인 시간 내에 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. 쓸데없는 일을 하면서 많은 시간을 소비하고 본질을 놓치게 됩니다.

shred20~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

shredGit 저장소에 작은 파일이 너무 많아서 삭제하고 기존 데이터를 덮어쓰려면 시간이 오래 걸릴 것 같아요. 다른 작업을 수행하고 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+foundext 파일 시스템처럼 디렉토리를 자동으로 생성 하지 않기 때문입니다 . 당신은 그것을 사용할 수 있습니다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

관련 정보