작성시 tar.gz 파일 암호화


33

여러 디렉토리의 야간 백업을 작성하는 스크립트가 있습니다.

를 사용하여 작성 tar -czf되며 대상 tar.gz 파일 경로는 마운트 된 네트워크 디렉토리에 있습니다. 결과 파일은 약 1.2Gb입니다.

네트워크 속도가 상당히 빠릅니다 (네트워크 드라이브에서 로컬로 복사하는 작업은 ~ 28MB / 초).

이제 tar.gz 파일을 네트워크 드라이브로 전송하기 전에 공개 키 암호화를 사용하여 tar.gz 파일을 암호화하고이를 수행하는 가장 좋은 방법을 알고 싶습니다.

먼저 로컬로 파일을 작성하고 암호화 한 다음 복사해야합니까? 아니면 암호화 프로세스를 통해 tar 출력을 "스트리밍"하고 결과를 네트워크 드라이브에 직접 쓰는 방법이 있습니까?

답변:


34

포장 your_dir암호화 된 아카이브 your_archive.tgz.gpg(대칭 암호화) :

tar -cz your_dir | gpg -c -o your_archive.tgz.gpg

포장을 풉니 다 :

gpg -d your_archive.tgz.gpg | tar xz

대칭 암호화 대신 비대칭을 사용하는 방법에 대해서는 GPG 문서를 참조하십시오.


2
GPG를 사용하면 사용자 홈 소유자에게 키가 생성되고 암호를 묻는 메시지가 나타납니다. 기본적으로이 과정은 내 취향에 비해 불투명 한 것 같습니다…
Joel L

해야 tar xz명령의 두 번째 세트에있을 tar -xz대신?
Kenny Evitt

1
@KennyEvitt : 당신은 함께 또는없이 사용할 수 있습니다-
플로리안 Diesch

이것은 gpg-zip으로 암호화 된 파일에도 적용됩니다!
Trefex

2
gpg는 이미 파일을 압축합니다. z옵션이 많이 추가 되지 않는다고 생각합니다
feklee

12

다음 프로세스는 먼저 로컬 디스크의 파일을 암호화 한 다음 네트워크를 통해 전송하거나 필요한 경우 저장합니다.


먼저 공개 및 개인 키를 생성하십시오 (한 번만 수행).

openssl genrsa -out key.pem 2048
openssl rsa -in key.pem -out key-public.pem -outform PEM -pubout

그런 다음 각 백업에서 :

  1. 긴 임의의 암호를 생성하고 파일로 저장

    • echo -n "Tl4R6dnvWXiDeXr1LtpCNkyLG1" > key.txt
  2. 암호로 파일 암호화

    • openssl enc -aes-256-cbc -pass file:key.txt < UNENCRYPTED_FILE > encrypted.dat
  3. 공개 키를 사용하여 암호문 암호화

    • openssl rsautl -encrypt -pubin -inkey key-public.pem < key.txt > enc.key.txt

그런 다음 원하는 곳에 encrypted.dat 및 enc.key.txt를 저장하십시오.


해독하려면

  1. 개인 키로 암호화 된 암호문 해독

    • openssl rsautl -decrypt -inkey key.pem < enc.key.txt > key.txt
  2. 파일 해독

    • openssl enc -aes-256-cbc -d -pass file:key.txt < encrypted.dat > UNENCRYPTED_FILE

이것은 Florian의 답변보다 훨씬 길지만 프로세스를 더 잘 이해하고 서버 종속 GPG 구성 변수 등에 의존하지 않기 위해 사용하기로 결정했습니다. 또한 유용한 GPG 설명서를 찾을 수 없었습니다.


1
랜덤 패스 프레이즈는 openssl을 사용하여 쉽게 만들 수 있습니다 openssl rand 32 -out key.txt
Wolfgang

@Wolfgang — 실제로 파이썬 스크립트 (백업 프로세스를 실행하는)에서 통과 단계를 생성하고 있지만 팁을 주셔서 감사합니다!
Joel L

2
참고 : 당신은 OpenSSL을 사용하여 파일을 암호화하지해야하는 이유 : stackoverflow.com/questions/28247821/...
다니엘 힐러를

이 파일 'enc.key.txt'는 정확히 무엇입니까? 서버 파일을 백업하는 프로세스를보고 있는데 서버에 저장되지 않은 키만 사용하여 암호를 해독 할 수 있기를 원합니다.
Alex Stewart

6

비대칭 키 암호화 로이 작업을 수행합니다. 즉, 패키지를 암호화 할 수있는 공개 키 (암호화 패키지를 보내려는 사람과 공유 할 수 있음)가 있음을 의미합니다. 또한 패키지를 해독 할 수있는 개인 키 (공유하지 않음)가 있습니다.

현재 작업 디렉토리를 암호화하는 명령 : -e는 암호화하고 -r은 "받는 사람"또는 사용할 키를 지정하고 -o는 출력 파일을 지정합니다.

$ tar -cvz . | gpg -e -r ABCD1234 -o backup.tgz.gpg

그리고 현재 작업 디렉토리로 해독하려면 :

$ gpg -d backup.tgz.gpg | tar -xz

또는 나중에 포장을 풀기 위해 표준 tgz 파일로 해독하려면

$ gpg -o backup.tgz -d backup.tgz.gpg

물론 이것은 이미 공개-개인 키 쌍을 생성하고 gpg로 설치 한 경우에만 작동합니다. 제 경우에는 https://www.digitalocean.com/community/tutorials/how-to-use-gpg-to-encrypt-and-sign-messages-on-an-ubuntu 의 Digital Ocean 가이드를 사용하여 그렇게했습니다. -12-04-vps . 암호화 명령의 ABCD1234는 시스템에 설치된 공개 키 중 하나를 나타냅니다. 이 가이드는 공개 키를 공유하고 다른 사람의 공개 키를 설치하여 암호화 된 파일을 보내고받는 방법도 설명합니다.


0

GnuPG는이 프로세스에 사용하기로 선택한 것입니다. 암호화 단계 (이 사용 인스턴스에 동의합니다)에서 해독 단계를 언급했기 때문에 문제의 측면에서도 작업했습니다. 프로젝트의 Travis-CI 빌드 로그에서 현재 설계된 기능으로 작동하는 기능과 travis.yml 파일에서 로그 출력을 확인하십시오. 기본적으로이 프로젝트에는 세 개의 스크립트가 필요합니다. keygen 스크립트, 암호 해독 도우미 스크립트 및 명명 된 파이프 리스너 스크립트 keygen 스크립트 및 암호 해독 도우미 스크립트는 암호 해독을 수행 할 장치에서 사용해야하고 명명 된 파이프 리스너 스크립트는 암호화를 수행하는 장치에 있어야합니다.

암호화 된 명명 된 파이프 리스너 스크립트는 일단 설정되면 문자열, 파일 경로 또는 디렉토리 경로를 허용하고 예측 가능한 방식으로 암호화 된 결과를 출력합니다.

다음은 암호화 및 디렉토리 압축 + 암호화를 위해 야간 백업 스크립트에 배치 할 수있는 명령 예입니다.

echo "some messages text" > /path/to/named.pipe
## Message text is ASCII armor encrypted and appended to specified file when script was stated
echo "${HOME}/Documents" > /path/to/named.pipe
## Directories are compressed with tar and encrypted with output to time stamped file in bulk output directory
echo "${HOME}/.bash_history"  > /path/to/named.pipe

암호 해독을 위해 빌드 스크립트 .travis-ci/script_decrypt.sh.travis-ci/test_search_script_decrypt.sh추가 된 암호화 된 데이터 문자열을 복구하는 방법 및 대량 파일 / 디렉토리를 복원하는 방법을 확인해야합니다.

물론이 실험을 통해 기본 키 구문 (keygen 스크립트가 작성된 이유)을 사용하지 않는 것이 가장 좋으며 읽을 수있는 형식으로 복원하는 방법에 확신이 생길 때까지 중요한 데이터에 사용해서는 안됩니다.

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