Tar.gz dosyasını yaratın üzerinde şifrele


33

Birkaç dizinin her gece yedeğini oluşturan bir betiğim var.

Kullanılarak oluşturulur tar -czfve hedef tar.gz dosya yolu monte edilmiş bir ağ dizininde bulunur. Ortaya çıkan dosya yaklaşık 1.2 Gb büyüklüğündedir.

Ağ hızı oldukça hızlı (ağ sürücüsünden lokalize kopyalama ~ 28MB / sn'de gerçekleşiyor).

Şimdi tar.gz dosyasını ağ sürücüsüne aktarmadan önce şifrelemek için açık anahtarlı şifreleme kullanmak istiyorum ve bunun en iyi yolunun ne olduğunu bilmek istiyorum.

Önce dosyayı yerel olarak oluşturmalı, önce şifreleyip sonra kopyalamalı mıyım? Veya bir şifreleme işlemi yoluyla tar çıkışını "akış" yapmanın ve sonuçları doğrudan ağ sürücüsüne yazmanın bir yolu var mı?

Yanıtlar:


34

your_dirŞifreli bir arşive paketi your_archive.tgz.gpg(simetrik şifreleme):

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

Paketi aç:

gpg -d your_archive.tgz.gpg | tar xz

Simetrik şifreleme yerine asimetrik kullanımı için GPG belgelerine bakın.


2
GPG kullanmak, kullanıcının ev sahibinde anahtar oluşturur ve bir parola ister. Temel olarak, süreç zevkime göre çok opak görünüyor…
Joel L

Should tar xzkomutların ikinci sette olmak tar -xzyerine?
Kenny Evitt

1
@KennyEvitt: Kullanarak veya onsuz kullanabilirsiniz-
Florian Diesch

Bu, gpg-zip ile şifrelenmiş dosyalar için de geçerlidir!
Trefex

2
gpg zaten dosyaları sıkıştırıyor, zseçeneğin fazla
katmadığını

12

Aşağıdaki işlem ilk önce dosyayı yerel diskte şifreler ve daha sonra ağ üzerinden gönderilebilir (veya gerektiğinde saklanabilir)


İlk olarak, genel ve özel anahtarlar oluşturun (yalnızca bir kez yapılır):

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

Ardından, her yedeklemede:

  1. Uzun rastgele parola oluştur, dosyaya kaydet

    • echo -n "Tl4R6dnvWXiDeXr1LtpCNkyLG1" > key.txt
  2. şifreli dosya şifrelemek

    • openssl enc -aes-256-cbc -pass file:key.txt < UNENCRYPTED_FILE > encrypted.dat
  3. ortak anahtarla şifreyi şifrele

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

Sonra istediğiniz yerde şifreli.dat ve enc.key.txt dosyasını kaydedin.


Şifresini çözmek için:

  1. Özel anahtarla şifrelenmiş parolanın şifresini çözme

    • openssl rsautl -decrypt -inkey key.pem < enc.key.txt > key.txt
  2. Şifreyi çöz

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

Bu, Florian'ın yanıtlayıcısından çok daha uzun, ancak kullanmaya karar verdim, böylece süreci daha iyi anlayabiliyorum ve sunucuya bağlı GPG yapılandırma değişkenlerine bağlı değilim. Ayrıca yararlı bir GPG belgesi bulamadım.


1
Rastgele parola ayrıca openssl ile de kolayca yaratılabilir openssl rand 32 -out key.txt
Wolfgang

@Wolfgang - Aslında bir python betiğinden (yedekleme işlemini gerçekleştiren) şifreyi oluşturuyorum, ancak bahşiş için teşekkürler!
Joel L,

2
FYI: Neden openssl ile dosyaları şifrelememeniz gerekiyor: stackoverflow.com/questions/28247821/…
Daniel Hiller

Bu dosya tam olarak ne 'enc.key.txt'? Sunucu dosyalarımı yedekleyen bir işlem arıyorum ve yalnızca sunucuda depolanmayan bir anahtar kullanarak şifresini çözmek istiyorum.
Alex Stewart

6

Bunu asimetrik anahtar şifrelemesi ile yapıyorum. Bu, paketi şifrelememe izin veren (bana şifrelenmiş paketleri göndermek istediğim herhangi biriyle paylaşabilirim) bir ortak anahtarım olduğu anlamına gelir. Ayrıca paketin şifresini çözmeme izin veren özel bir anahtarım (paylaşmadığım) var.

Geçerli çalışma dizinini şifrelemek için komutlarım: şifrelemek için -e, bir "alıcı" belirlemek için -r veya kullanılacak anahtarı, çıkış dosyasını belirtmek için -o.

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

Ve mevcut çalışma dizinine şifresini çözmek için:

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

Veya daha sonra açmak için standart bir tgz dosyasına şifresini çözmek için:

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

Tabii ki, bu daha önce bir kamu-özel anahtar çifti oluşturup gpg ile kurduğumda işe yarar. Benim durumumda Dijital Okyanus rehberini https://www.digitalocean.com/community/tutorials/how-to-use-gpg-to-encrypt-and-sign-messages-on-an-ubuntu adresinde yaptım. -12-04-vps . Şifreleme komutundaki ABCD1234, sistemime yüklenen ortak anahtarlardan birine işaret ediyor. Bu kılavuz ayrıca ortak anahtarınızı nasıl paylaşacağınızı ve şifreli dosyaları göndermek ve almak için başkalarının ortak anahtarlarını nasıl yükleyeceğinizi de kapsar.


0

GnuPG, bu işlem için kullanmayı seçtiğim şeydir ve şifre çözme adımlarının opak hale getirileceğini belirttiğiniz için (bu kullanım örneğinde aynı fikirdeyim) de sorunun bu tarafında da çalıştım. Projelerin ' Travis-CI'nin şu anda hangi özelliklerin tasarlandığı gibi çalıştığını ve günlüklerin çıktısını takip etmek için travis.yml dosyasını oluşturduğunu kontrol edin. Temel olarak bu projeden üç komut dosyasına ihtiyacınız olacak; keygen betiği, şifre çözme yardımcı betiği ve adlandırılmış yöneltici betiği. Keygen betiği ve şifre çözme yardımcı kodu, şifre çözme işlemini gerçekleştirecek cihazda kullanılmalı ve adlandırılmış yöneltici betiği, şifreleme işlemi gerçekleştiren cihazda bulunmalıdır.

Şifrelemeli adlandırılmış yöneltici komut dosyası komut dosyası, bir kez kurulum yapıldığında dizeleri, dosya yollarını veya dizin yollarını kabul eder ve şifreli sonuçları tahmin edilebilir bir şekilde verir.

Şifreleme ve dizinleri sıkıştırma + şifreleme için gecelik yedekleme komut dosyasına yerleştirilebilecek örnek komutlar aşağıdadır

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

Şifre çözme için, yapı komut nasıl kontrol etmek isteyeceksiniz .travis-ci/script_decrypt.sh& .travis-ci/test_search_script_decrypt.shiçin toplu dosya / dizin geri yüklenir nasıl şifreli verinin eklenen dizeleri geri kazanılır ve nasıl.

Tabii ki, bu deneysel şeylerle birincil anahtar pares kullanmamak en iyisidir (keygen kodunun neden yazıldığına dikkat edin) ve okunabilir forma nasıl geri yükleyeceğinizden emin olana kadar önemli verilerde kullanılmamalıdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.