Chiffrer le fichier tar.gz lors de la création


33

J'ai un script qui crée une sauvegarde nocturne de plusieurs répertoires.

Il est créé à l'aide de tar -czfet le chemin du fichier tar.gz de destination se trouve sur un répertoire réseau monté. Le fichier résultant est d'environ 1,2 Go de grande taille.

La vitesse du réseau est relativement rapide (la copie du lecteur réseau vers le local se produit à environ 28 Mo / s).

Maintenant, je souhaite utiliser le chiffrement à clé publique pour chiffrer le fichier tar.gz avant de le transférer sur le lecteur réseau. J'aimerais également savoir quel est le meilleur moyen de le faire.

Dois-je d'abord créer le fichier localement, le chiffrer puis le copier? Ou existe-t-il un moyen de "diffuser" la sortie de tar via un processus de cryptage et d'écrire les résultats directement sur le lecteur réseau?

Réponses:


34

Pack your_dirdans une archive cryptée your_archive.tgz.gpg(cryptage symétrique):

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

Déballez le:

gpg -d your_archive.tgz.gpg | tar xz

Consultez la documentation de GPG pour savoir comment utiliser le chiffrement asymétrique au lieu du chiffrement symétrique.


2
L'utilisation de GPG semble créer des clés dans le propriétaire de l'utilisateur et demander une phrase secrète. En gros, le processus semble être trop opaque à mon goût…
Joel L

Est-ce que tar xzdans le deuxième ensemble de commandes devrait être à la tar -xzplace?
Kenny Evitt

1
@KennyEvitt: Vous pouvez l'utiliser avec ou sans-
Florian Diesch -

Cela fonctionne aussi pour les fichiers cryptés avec gpg-zip!
Trefex

2
gpg compresse déjà les fichiers, ne pensez pas que cette zoption ajoute beaucoup
feklee

12

Le processus suivant chiffre d’abord le fichier sur le disque local et peut ensuite être envoyé sur le réseau (ou stocké selon les besoins)


Commencez par générer des clés publiques et privées (une seule fois):

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

Ensuite, à chaque sauvegarde:

  1. Générer une phrase de passe longue et aléatoire, enregistrer dans un fichier

    • echo -n "Tl4R6dnvWXiDeXr1LtpCNkyLG1" > key.txt
  2. crypter le fichier avec passephase

    • openssl enc -aes-256-cbc -pass file:key.txt < UNENCRYPTED_FILE > encrypted.dat
  3. chiffrer la phrase secrète avec la clé publique

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

Enregistrez ensuite encrypted.dat AND enc.key.txt où vous le souhaitez.


Décrypter:

  1. Déchiffrer la phrase secrète chiffrée avec une clé privée

    • openssl rsautl -decrypt -inkey key.pem < enc.key.txt > key.txt
  2. Déchiffrer le fichier

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

C'est beaucoup plus long que la réponse de Florian, mais j'ai décidé de l'utiliser pour mieux comprendre le processus, sans dépendre de variables de configuration GPG dépendantes du serveur, etc. Je n'ai pas trouvé non plus de documentation GPG utile.


1
Une phrase secrète aléatoire peut également être créée facilement avec openssl, comme ça openssl rand 32 -out key.txt
Wolfgang

@Wolfgang - Je suis en train de générer le mot de passe d'un script python (qui exécute le processus de sauvegarde), mais merci pour le conseil!
Joel L

2
FYI: Pourquoi ne devriez-vous pas chiffrer vos fichiers avec openssl: stackoverflow.com/questions/28247821/…
Daniel Hiller le

En quoi consiste exactement ce fichier 'enc.key.txt'? Je suis en train de regarder un processus qui sauvegarde mes fichiers de serveur et je veux seulement pouvoir déchiffrer en utilisant une clé non stockée sur le serveur.
Alex Stewart

6

Je le fais avec un cryptage à clé asymétrique. Cela signifie que j'ai une clé publique (que je peux partager avec tous ceux que je souhaite envoyer, des paquets chiffrés) qui me permet de chiffrer le paquet. J'ai aussi une clé privée (que je ne partage pas) qui me permet de déchiffrer le paquet.

Mes commandes pour chiffrer le répertoire de travail actuel: le -e pour chiffrer, le -r pour spécifier un "destinataire" ou une clé à utiliser, le -o pour spécifier le fichier de sortie.

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

Et pour déchiffrer le répertoire de travail actuel:

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

Ou pour déchiffrer un fichier tgz standard pour un décompactage ultérieur:

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

Bien sûr, cela ne fonctionne que si j'ai déjà généré une paire de clés public-privé et que je l'ai installée avec gpg. Dans mon cas, je l'ai fait en utilisant le guide de Digital Ocean à l' adresse https://www.digitalocean.com/community/tutorials/how-to-use-gpg-to-encrypt-and-sign-messages-on-an-ubuntu -12-04-vps . Le code ABCD1234 dans la commande de chiffrement fait référence à l’une des clés publiques installées sur mon système. Ce guide explique également comment partager votre clé publique et installer les clés publiques d'autres utilisateurs pour envoyer et recevoir des fichiers cryptés.


0

GnuPG est ce que j'ai choisi d'utiliser pour ce processus et parce que vous avez déclaré que les étapes de déchiffrement étaient opaques (je suis d'accord avec cette instance d'utilisation), j'ai également travaillé sur ce côté du problème. Consultez les journaux de génération Travis-CI des projets pour connaître les fonctionnalités qui fonctionnent actuellement telles que conçues et le fichier travis.yml à suivre, ainsi que la sortie des journaux. Fondamentalement, vous aurez besoin de trois scripts de ce projet; le script keygen, le script d'assistance au déchiffrement et le script d'écoute de canal nommé. Le script keygen script & assistant de décryptage doit être utilisé sur le périphérique qui effectuera le décryptage et le script d'écoute de canal nommé doit figurer sur le périphérique effectuant le cryptage.

Le script d’écoute de canal nommé de chiffrement accepte les chaînes, les chemins de fichier ou les chemins de répertoire une fois l’installation terminée et génère les résultats chiffrés de manière prévisible.

Vous trouverez ci-dessous des exemples de commandes pouvant être placées dans votre script de sauvegarde nocturne pour le chiffrement et la compression de répertoires + le chiffrement.

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

Pour le décryptage, vous voudrez vérifier comment les scripts de génération .travis-ci/script_decrypt.shet .travis-ci/test_search_script_decrypt.shcomment les chaînes de données cryptées ajoutées sont récupérées et comment les fichiers / répertoires en bloc sont restaurés.

Bien sûr, avec ce matériel expérimental, il est préférable de ne pas utiliser de clé primaire (ce qui explique pourquoi le script keygen a été écrit) et il ne devrait pas être utilisé sur des données importantes tant que vous ne saurez pas comment le restaurer sous forme lisible.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.