Enkripsi file tar.gz di buat

33

Saya memiliki skrip yang membuat cadangan beberapa direktori setiap malam.

Itu dibuat menggunakan tar -czf, dan jalur file tar.gz tujuan ada di direktori jaringan yang di-mount. File yang dihasilkan berukuran sekitar 1.2Gb.

Kecepatan jaringan cukup cepat (penyalinan dari drive jaringan ke lokal terjadi pada ~ 28MB / detik).

Sekarang saya ingin menggunakan enkripsi kunci publik untuk mengenkripsi file tar.gz sebelum mentransfernya ke drive jaringan, dan ingin tahu apa cara terbaik untuk melakukannya.

Haruskah saya membuat file secara lokal terlebih dahulu, mengenkripsi, dan kemudian menyalinnya? Atau adakah cara untuk "stream" tar output melalui proses enkripsi, dan menulis hasilnya langsung ke drive jaringan?

Joel L
sumber

Jawaban:

34

Kemas your_dirdalam arsip terenkripsi your_archive.tgz.gpg(enkripsi simetris):

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

Buka kemasannya:

gpg -d your_archive.tgz.gpg | tar xz

Lihat dokumen GPG untuk cara menggunakan asimetris alih-alih enkripsi simetris.

Florian Diesch
sumber
2
Menggunakan GPG tampaknya menciptakan kunci di pemegang home user, dan meminta frasa sandi. Pada dasarnya, prosesnya tampaknya terlalu buram untuk seleraku ...
Joel L
Haruskah tar xzdi set kedua perintah sebagai tar -xzgantinya?
Kenny Evitt
1
@KennyEvitt: Anda dapat menggunakannya dengan atau tanpa-
Florian Diesch
Ini berfungsi untuk file yang dienkripsi dengan gpg-zip juga!
Trefex
2
gpg sudah memampatkan file, jangan berpikir zopsi menambahkan banyak
feklee
12

Proses berikut mengenkripsi file pada disk lokal terlebih dahulu, dan kemudian dapat dikirim melalui jaringan (atau disimpan namun diperlukan)


Pertama, buat kunci publik dan pribadi (hanya dilakukan satu kali):

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

Kemudian, di setiap cadangan:

  1. Buat frasa sandi acak panjang, simpan dalam file

    • echo -n "Tl4R6dnvWXiDeXr1LtpCNkyLG1" > key.txt
  2. mengenkripsi file dengan frasa sandi

    • openssl enc -aes-256-cbc -pass file:key.txt < UNENCRYPTED_FILE > encrypted.dat
  3. mengenkripsi frasa sandi dengan kunci publik

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

Kemudian simpan encrypted.dat DAN enc.key.txt di tempat yang diinginkan.


Untuk mendekripsi:

  1. Dekripsi frasa sandi terenkripsi dengan kunci pribadi

    • openssl rsautl -decrypt -inkey key.pem < enc.key.txt > key.txt
  2. Dekripsi file

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

Ini jauh lebih lama daripada anwser Florian, tetapi saya memutuskan untuk menggunakannya sehingga saya dapat lebih memahami prosesnya, dan tidak bergantung pada variabel konfigurasi GPG yang bergantung pada server, dll. Saya juga tidak dapat menemukan dokumentasi GPG yang berguna.

Joel L
sumber
1
Frasa sandi acak juga dapat dibuat dengan mudah dengan openssl seperti itu openssl rand 32 -out key.txt
Wolfgang
@ Wolfgang - Saya sebenarnya membuat kata sandi dari skrip python (yang menjalankan proses pencadangan), tapi terima kasih atas tipnya!
Joel L
2
FYI: Mengapa Anda tidak harus mengenkripsi file dengan openssl: stackoverflow.com/questions/28247821/…
Daniel Hiller
Apa sebenarnya file ini 'enc.key.txt'? Saya melihat sebuah proses yang membuat cadangan file server saya dan hanya ingin dapat mendekripsi menggunakan kunci yang tidak disimpan di server.
Alex Stewart
6

Saya melakukan ini dengan enkripsi kunci asimetris. Itu berarti saya memiliki kunci publik (yang bisa saya bagikan dengan siapa pun yang saya ingin kirimi saya paket terenkripsi) yang memungkinkan saya untuk mengenkripsi paket. Saya juga memiliki kunci pribadi (yang tidak saya bagikan) yang memungkinkan saya mendekripsi paket.

Perintah saya untuk mengenkripsi direktori kerja saat ini: -e untuk mengenkripsi, -r untuk menentukan "penerima" atau kunci untuk digunakan, -o untuk menentukan file output.

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

Dan untuk mendekripsi ke direktori kerja saat ini:

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

Atau untuk mendekripsi file tgz standar untuk dibongkar nanti:

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

Tentu saja, ini hanya berfungsi jika saya telah membuat pasangan kunci publik-swasta dan memasangnya dengan gpg. Dalam kasus saya, saya telah melakukannya dengan menggunakan panduan Digital Ocean di https://www.digitalocean.com/community/tutorials/how-to-use-gpg-to-encrypt-and-sign-messages-on-an-ubuntu -12-04-vps . ABCD1234 dalam perintah enkripsi mengacu pada salah satu kunci publik yang diinstal pada sistem saya. Panduan ini juga mencakup cara berbagi kunci publik Anda dan menginstal kunci publik orang lain untuk mengirim dan menerima file terenkripsi.

mungkin
sumber
0

GnuPG adalah apa yang saya pilih untuk digunakan untuk proses ini dan karena Anda telah menyatakan bahwa langkah-langkah dekripsi tempat buram (saya setuju dalam contoh penggunaan ini) saya juga telah bekerja di sisi masalah itu juga. Periksa log build Travis-CI proyek untuk mengetahui fitur apa yang saat ini berfungsi seperti yang dirancang dan file travis.yml untuk mengikuti bersama dengan output log. Pada dasarnya Anda akan membutuhkan tiga skrip dari proyek ini; skrip keygen, skrip pembantu dekripsi, dan skrip pendengar bernama pipa. Script keygen & script decryption helper harus digunakan pada perangkat yang akan membentuk sebelumnya decryption dan script pipe listener yang dinamai harus berada pada enkripsi preforming perangkat.

Script pendengar pipa bernama terenkripsi menerima string, path file, atau path direktori setelah pengaturan dan output hasil terenkripsi dengan cara yang dapat diprediksi.

Di bawah ini adalah contoh perintah yang dapat ditempatkan ke dalam skrip cadangan malam Anda untuk enkripsi dan untuk kompresi direktori + enkripsi

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

Untuk dekripsi Anda ingin memeriksa bagaimana skrip pembuatan .travis-ci/script_decrypt.sh& .travis-ci/test_search_script_decrypt.shuntuk bagaimana string tambahan dari data terenkripsi dipulihkan dan bagaimana file massal / direktori dipulihkan.

Tentu saja dengan hal-hal eksperimental ini yang terbaik adalah tidak menggunakan pares kunci utama (agak mengapa skrip keygen ditulis) dan tidak boleh digunakan pada data penting sampai Anda yakin bagaimana mengembalikannya ke bentuk yang dapat dibaca.

S0AndS0
sumber