Criptografa o arquivo tar.gz ao criar

22

Eu tenho um script que cria um backup noturno de vários diretórios.

Ele é criado usando tar -czf e o caminho do arquivo de destino tar.gz está em um diretório de rede montado. O arquivo resultante tem cerca de 1,2 GB de tamanho.

A velocidade da rede é razoavelmente rápida (a cópia da unidade de rede para o local ocorre em ~ 28MB / seg).

Agora, quero usar a criptografia de chave pública para criptografar o arquivo tar.gz antes de transferi-lo para a unidade de rede e gostaria de saber qual é a melhor maneira de fazer isso.

Devo criar o arquivo localmente primeiro, criptografá-lo e copiá-lo? Ou existe uma maneira de "transmitir" a saída de tar através de um processo de criptografia e gravar os resultados diretamente na unidade de rede?

    
por Joel L 16.01.2012 / 13:20

4 respostas

10

O processo a seguir criptografa o arquivo no disco local primeiro e pode ser enviado pela rede (ou armazenado, no entanto, necessário)

Primeiro, gere chaves públicas e privadas (feitas apenas uma vez):

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

Em seguida, a cada backup:

  1. Gere uma longa senha aleatória, salve no arquivo

    • echo -n "Tl4R6dnvWXiDeXr1LtpCNkyLG1" > key.txt
  2. criptografar arquivo com a senha

    • openssl enc -aes-256-cbc -pass file:key.txt < UNENCRYPTED_FILE > encrypted.dat
  3. criptografar senha com chave pública

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

Em seguida, salve encrypted.dat AND enc.key.txt onde desejar.

Para descriptografar:

  1. Descriptografar senha criptografada com chave privada

    • openssl rsautl -decrypt -inkey key.pem < enc.key.txt > key.txt
  2. Descriptografar arquivo

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

Isso é muito mais longo que o Anwser de Florian, mas eu decidi usá-lo para entender melhor o processo, e não depender de variáveis de configuração GPG dependentes do servidor, etc. Eu também não consegui encontrar nenhuma documentação GPG útil.

    
por Joel L 17.01.2012 / 11:48
26

Pacote your_dir em um arquivo criptografado your_archive.tgz.gpg (criptografia simétrica):

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

Descompacte:

gpg -d your_archive.tgz.gpg | tar xz

Veja os documentos do GPG sobre como usar criptografia assimétrica em vez de simétrica.

    
por Florian Diesch 16.01.2012 / 14:28
3

Eu faço isso com criptografia de chave assimétrica. Isso significa que eu tenho uma chave pública (que posso compartilhar com qualquer pessoa que eu gostaria de enviar pacotes criptografados) que me permite criptografar o pacote. Eu também tenho uma chave privada (que eu não compartilho) que me permite descriptografar o pacote.

Meus comandos para criptografar o diretório de trabalho atual: o -e para criptografar, o -r para especificar um "destinatário" ou a chave a ser usada, o -o para especificar o arquivo de saída.

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

E para descriptografar o diretório de trabalho atual:

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

Ou para descriptografar um arquivo tgz padrão para descompactar mais tarde:

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

Claro, isso só funciona se eu já tiver gerado um par de chaves público-privado e instalado com gpg. No meu caso, usei o guia da Digital Ocean em . O ABCD1234 no comando de criptografia refere-se a uma das chaves públicas instaladas no meu sistema. Este guia também aborda como compartilhar sua chave pública e instalar chaves públicas de outras pessoas para enviar e receber arquivos criptografados.

    
por mightypile 26.09.2016 / 13:44
0

O GnuPG é o que eu escolhi usar para este processo e porque você declarou que a descriptografia vai aonde opaco (eu concordo nesta instância de uso) eu também trabalhei nesse lado do problema também. Verifique os logs de construção Travis-CI dos projetos para os recursos que atualmente funcionam como planejados e os travis.yml arquivo para seguir junto com a saída dos logs. Basicamente, você precisará de três scripts deste projeto; o script keygen, o script auxiliar de descriptografia e o script de listener de pipe nomeado. O script keygen & amp; O script auxiliar de decriptografia deve ser usado no dispositivo que irá pré-formatar a descriptografia e o script de listener de pipe nomeado deve estar na criptografia de pré-processamento do dispositivo.

O script de listener de canal nomeado de criptografia aceita cadeias, caminhos de arquivo ou caminhos de diretório, uma vez configurado e gera resultados criptografados de maneira previsível.

Abaixo estão exemplos de comandos que podem ser colocados em seu script de backup noturno para criptografia e para compressão de diretórios + criptografia

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

Para descriptografar, você deve verificar como os scripts de compilação .travis-ci/script_decrypt.sh & amp; .travis-ci/test_search_script_decrypt.sh para como as strings anexadas de dados criptografados são recuperadas e como os arquivos / diretórios em massa são restaurados.

Claro que com esse experimental é melhor não usar pares de chave primária (por que o script keygen foi escrito) e ele não deve ser usado em dados importantes até que você esteja confiante em como restaurá-lo de forma legível. / p>     
por S0AndS0 29.11.2016 / 01:08