J'ai un script qui crée une sauvegarde nocturne de plusieurs répertoires.
Il est créé à l'aide de tar -czf
et le chemin du fichier de destination tar.gz 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?
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:
Générer une phrase de passe longue et aléatoire, enregistrer dans un fichier
echo -n "Tl4R6dnvWXiDeXr1LtpCNkyLG1" > key.txt
crypter le fichier avec passephase
openssl enc -aes-256-cbc -pass file:key.txt < UNENCRYPTED_FILE > encrypted.dat
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:
Déchiffrer la phrase secrète chiffrée avec une clé privée
openssl rsautl -decrypt -inkey key.pem < enc.key.txt > key.txt
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.
Pack your_dir
dans 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.
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 en cours:
$ 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.
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 construction des projets Travis-CI pour connaître les fonctionnalités qui fonctionnent actuellement comme prévu et le fichier travis.yml pour suivre ainsi que la sortie des journaux. En gros, 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échiffrement, vous voudrez vérifier comment les scripts de construction .travis-ci/script_decrypt.sh
et .travis-ci/test_search_script_decrypt.sh
expliquent comment les chaînes de données cryptées ajoutées sont restauré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 les clés primaires (un peu 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 une forme lisible.