Tengo un script que crea una copia de seguridad nocturna de varios directorios.
Se crea usando tar -czf
, y la ruta del archivo tar.gz de destino está en un directorio de red montado. El archivo resultante es de aproximadamente 1,2 Gb de gran tamaño.
La velocidad de la red es razonablemente rápida (la copia de la unidad de red a la local se produce a ~ 28 MB / seg).
Ahora quiero usar el cifrado de clave pública para cifrar el archivo tar.gz antes de transferirlo a la unidad de red, y me gustaría saber cuál es la mejor manera de hacerlo.
¿Debo crear el archivo localmente primero, cifrarlo y luego copiarlo? ¿O hay una manera de "transmitir" la salida de alquitrán a través de un proceso de cifrado y escribir los resultados directamente en la unidad de red?
fuente
tar xz
en el segundo conjunto de comandos en sutar -xz
lugar?-
z
opción agregue muchoEl siguiente proceso cifra primero el archivo en el disco local, y luego puede enviarse a través de la red (o almacenarse según sea necesario)
Primero, genere claves públicas y privadas (solo una vez):
Luego, en cada copia de seguridad:
Genere una frase de contraseña aleatoria larga, guárdela en un archivo
echo -n "Tl4R6dnvWXiDeXr1LtpCNkyLG1" > key.txt
cifrar archivo con passphase
openssl enc -aes-256-cbc -pass file:key.txt < UNENCRYPTED_FILE > encrypted.dat
cifrar frase de contraseña con clave pública
openssl rsautl -encrypt -pubin -inkey key-public.pem < key.txt > enc.key.txt
Luego guarde encrypted.dat Y enc.key.txt donde lo desee.
Para descifrar:
Descifrar la frase de contraseña cifrada con clave privada
openssl rsautl -decrypt -inkey key.pem < enc.key.txt > key.txt
Descifrar archivo
openssl enc -aes-256-cbc -d -pass file:key.txt < encrypted.dat > UNENCRYPTED_FILE
Esto es mucho más largo que la respuesta de Florian, pero decidí usarlo para poder comprender mejor el proceso y no depender de las variables de configuración de GPG dependientes del servidor, etc. Tampoco pude encontrar ninguna documentación útil de GPG.
fuente
openssl rand 32 -out key.txt
Hago esto con cifrado de clave asimétrica. Eso significa que tengo una clave pública (que puedo compartir con cualquier persona que me gustaría enviarme paquetes cifrados) que me permite cifrar el paquete. También tengo una clave privada (que no comparto) que me permite descifrar el paquete.
Mis comandos para cifrar el directorio de trabajo actual: el -e para cifrar, el -r para especificar un "destinatario" o una clave para usar, el -o para especificar el archivo de salida.
Y para descifrar el directorio de trabajo actual:
O para descifrarlo en un archivo tgz estándar para desempaquetarlo más tarde:
Por supuesto, esto solo funciona si ya he generado un par de claves pública-privada y lo he instalado con gpg. En mi caso, lo hice usando la guía de Digital Ocean en https://www.digitalocean.com/community/tutorials/how-to-use-gpg-to-encrypt-and-sign-messages-on-an-ubuntu -12-04-vps . El ABCD1234 en el comando de cifrado se refiere a una de las claves públicas instaladas en mi sistema. Esta guía también cubre cómo compartir su clave pública e instalar las claves públicas de otros para enviar y recibir archivos cifrados.
fuente
GnuPG es lo que he elegido usar para este proceso y porque has declarado que los pasos de descifrado se opacan (estoy de acuerdo en esta instancia de uso) también he trabajado en ese lado del problema. Consulte los registros de compilación de Travis-CI de los proyectos para ver qué características funcionan actualmente según lo diseñado y el archivo travis.yml para seguir junto con la salida de los registros. Básicamente necesitarás tres scripts de este proyecto; el script keygen, el script auxiliar de descifrado y el script de escucha de canalización con nombre. La secuencia de comandos keygen y la secuencia de comandos auxiliar de descifrado deben usarse en el dispositivo que realizará el descifrado y la secuencia de comandos de escucha de tubería nombrada debe estar en el cifrado de preformado del dispositivo.
La secuencia de comandos de escucha de canalización con nombre de cifrado acepta cadenas, rutas de archivo o rutas de directorio una vez configuradas y genera resultados cifrados de manera predecible.
A continuación hay ejemplos de comandos que se pueden colocar en su script de copia de seguridad nocturno para el cifrado y para la compresión + cifrado de directorios
Para el descifrado, querrá comprobar cómo se crean los scripts de compilación
.travis-ci/script_decrypt.sh
y.travis-ci/test_search_script_decrypt.sh
cómo se recuperan las cadenas adjuntas de datos cifrados y cómo se restauran los archivos / directorios masivos.Por supuesto, con cosas de este tipo experimental, es mejor no usar pares de claves primarias (por eso se escribió el script keygen) y no se debe usar en datos importantes hasta que esté seguro de cómo restaurarlo en forma legible.
fuente