Ich habe ein Skript, das eine nächtliche Sicherung mehrerer Verzeichnisse erstellt.
Es wird mit erstellt tar -czf
, und der Pfad der Zieldatei tar.gz befindet sich in einem bereitgestellten Netzwerkverzeichnis. Die resultierende Datei ist ungefähr 1,2 GB groß.
Die Netzwerkgeschwindigkeit ist relativ hoch (das Kopieren vom Netzwerklaufwerk auf das lokale Laufwerk erfolgt mit ~ 28 MB / s).
Jetzt möchte ich die tar.gz-Datei vor dem Übertragen auf das Netzlaufwerk mithilfe der Verschlüsselung mit öffentlichem Schlüssel verschlüsseln und möchte wissen, wie dies am besten funktioniert.
Soll ich die Datei zuerst lokal erstellen, verschlüsseln und dann kopieren? Oder gibt es eine Möglichkeit, die Teerausgabe durch einen Verschlüsselungsprozess zu "streamen" und die Ergebnisse direkt auf das Netzlaufwerk zu schreiben?
quelle
tar xz
in der zweiten Reihe von Befehlentar -xz
stattdessen sein?-
z
Option vielDer folgende Vorgang verschlüsselt die Datei zuerst auf der lokalen Festplatte und kann dann über das Netzwerk gesendet (oder gespeichert, aber benötigt) werden.
Generieren Sie zunächst öffentliche und private Schlüssel (nur einmal):
Dann bei jedem Backup:
Erzeugen Sie eine lange zufällige Passphrase und speichern Sie sie in einer Datei
echo -n "Tl4R6dnvWXiDeXr1LtpCNkyLG1" > key.txt
Datei mit Passphase verschlüsseln
openssl enc -aes-256-cbc -pass file:key.txt < UNENCRYPTED_FILE > encrypted.dat
Passphrase mit öffentlichem Schlüssel verschlüsseln
openssl rsautl -encrypt -pubin -inkey key-public.pem < key.txt > enc.key.txt
Speichern Sie anschließend encrypted.dat UND enc.key.txt an der gewünschten Stelle.
Zum Entschlüsseln:
Verschlüsselte Passphrase mit privatem Schlüssel entschlüsseln
openssl rsautl -decrypt -inkey key.pem < enc.key.txt > key.txt
Datei entschlüsseln
openssl enc -aes-256-cbc -d -pass file:key.txt < encrypted.dat > UNENCRYPTED_FILE
Dies ist viel länger als Florians Antwort, aber ich habe mich für die Verwendung entschieden, um den Prozess besser zu verstehen und nicht von serverabhängigen GPG-Konfigurationsvariablen usw. abhängig zu sein. Ich konnte auch keine nützliche GPG-Dokumentation finden.
quelle
openssl rand 32 -out key.txt
Ich mache das mit asymmetrischer Schlüsselverschlüsselung. Das bedeutet, dass ich einen öffentlichen Schlüssel habe (den ich mit jedem teilen kann, dem ich verschlüsselte Pakete senden möchte), mit dem ich das Paket verschlüsseln kann. Ich habe auch einen privaten Schlüssel (den ich nicht teile), mit dem ich das Paket entschlüsseln kann.
Meine Befehle zum Verschlüsseln des aktuellen Arbeitsverzeichnisses: das -e zum Verschlüsseln, das -r zum Angeben eines "Empfängers" oder Schlüssels, das -o zum Angeben der Ausgabedatei.
Und um in das aktuelle Arbeitsverzeichnis zu entschlüsseln:
Oder zum Entschlüsseln in eine Standard-TGZ-Datei zum späteren Entpacken:
Dies funktioniert natürlich nur, wenn ich bereits ein öffentlich-privates Schlüsselpaar erstellt und mit gpg installiert habe. In meinem Fall habe ich den Leitfaden von Digital Ocean unter https://www.digitalocean.com/community/tutorials/how-to-use-gpg-to-encrypt-and-sign-messages-on-an-ubuntu verwendet -12-04-vps . Das ABCD1234 im Verschlüsselungsbefehl verweist auf einen der auf meinem System installierten öffentlichen Schlüssel. In diesem Handbuch wird auch erläutert, wie Sie Ihren öffentlichen Schlüssel freigeben und die öffentlichen Schlüssel anderer installieren, um verschlüsselte Dateien zu senden und zu empfangen.
quelle
GnuPG ist das, was ich für diesen Prozess ausgewählt habe, und da Sie angegeben haben, dass Entschlüsselungsschritte zu undurchsichtig sind (ich stimme in dieser Verwendungsinstanz zu), habe ich auch auf dieser Seite des Problems gearbeitet. Überprüfen Sie in den Travis-CI- Erstellungsprotokollen der Projekte, welche Funktionen derzeit wie geplant funktionieren, und in der Datei travis.yml , um die Protokollausgaben zu verfolgen . Grundsätzlich benötigen Sie drei Skripte aus diesem Projekt; das keygen-Skript, das Entschlüsselungshilfsskript und das Named-Pipe-Listener-Skript. Das Hilfsskript keygen script & decryption sollte auf dem Gerät verwendet werden, das die Entschlüsselung vornimmt, und das Skript named pipe listener sollte sich auf dem Gerät befinden, das die Verschlüsselung vornimmt.
Das verschlüsselnde Named-Pipe-Listener-Skript akzeptiert nach der Einrichtung Zeichenfolgen, Dateipfade oder Verzeichnispfade und gibt verschlüsselte Ergebnisse auf vorhersehbare Weise aus.
Im Folgenden finden Sie Beispielbefehle, die zur Verschlüsselung und zur Komprimierung und Verschlüsselung von Verzeichnissen in Ihr nächtliches Sicherungsskript eingefügt werden können
Zur Entschlüsselung sollten Sie überprüfen, wie die Build-Skripte
.travis-ci/script_decrypt.sh
und.travis-ci/test_search_script_decrypt.sh
die angehängten Zeichenfolgen verschlüsselter Daten wiederhergestellt werden und wie Massendateien / -verzeichnisse wiederhergestellt werden.Natürlich ist es bei diesem experimentellen Material am besten, keine Primärschlüssel-Pares zu verwenden (irgendwie, warum das keygen-Skript geschrieben wurde) und es sollte nicht für wichtige Daten verwendet werden, bis Sie sicher sind, wie Sie es in lesbarer Form wiederherstellen können.
quelle