Bagaimana cara melindungi file gzip di baris perintah?

130

Saya ingin membuat beberapa file tar.gz (dan mungkin tar.bz2), menggunakan perintah tar pada Ubuntu 10.04.

Saya ingin kata sandi melindungi file.

Apa perintah untuk melakukan ini (Saya telah mencari di Google, tetapi tidak menemukan apa pun yang menunjukkan cara membuat dan mengekstrak file terkompresi menggunakan kata sandi).

Adakah yang tahu bagaimana melakukan ini?

morf
sumber

Jawaban:

159

Anda harus menerapkan filosofi unix untuk tugas ini: satu alat untuk setiap tugas.

tarring dan kompresi adalah pekerjaan untuk tardan gzipatau bzip2, crypto adalah pekerjaan untuk salah satu gpgatau openssl:

Enkripsi

 % tar cz folder_to_encrypt | \
      openssl enc -aes-256-cbc -e > out.tar.gz.enc

Dekripsi

 % openssl enc -aes-256-cbc -d -in out.tar.gz.enc | tar xz

Atau menggunakan gpg

 % gpg --encrypt out.tar.gz

varian openssl menggunakan enkripsi simetri, Anda harus memberi tahu pihak penerima tentang 'kata sandi' yang digunakan (alias 'kunci'). varian gpg menggunakan kombinasi enkripsi simetris dan asimetrik, Anda menggunakan kunci dari pihak penerima (yang berarti bahwa Anda tidak harus memberi tahu kata sandi yang terlibat kepada siapa pun) untuk membuat kunci sesi dan crypt konten dengan kunci itu.

jika Anda membuka rute zip (atau 7z): pada dasarnya sama dengan varian openssl, Anda harus memberi tahu pihak penerima tentang kata sandi.

akira
sumber
26
Bagi siapa pun yang bertanya-tanya bagaimana cara mendekripsi file dengan openssl:openssl aes-256-cbc -d -in out.tar.gz.enc -out decrypted.tar.gz
ndbroadbent
1
@ nathan.f77 perintah itu juga menunjukkan cara melakukan sesuatu tanpa menyalurkannya ke openssl. openssl enc -aes-256-cbc -e -in foo.tar.gz -out bar.tar.gz.enc
Keith Smiley
3
@KeithSmiley jika Anda memiliki arsip besar dan tidak banyak ruang (seperti itu bisa di VPS) itu lebih hemat ruang untuk pipa.
Andrew Savinykh
Saya tidak bisa menjalankan ini di mac. Apakah ini berbeda?
eleijonmarck
3
@eleijonmarck memberikan bagian "tidak berfungsi karena <insert-error-message-here>" ...
akira
29

Jika maksud Anda adalah hanya melindungi file dengan kata sandi, maka gunakan utilitas zip tangan melalui baris perintah

zip -e <file_name>.zip <list_of_files>

-e meminta utilitas zip untuk mengenkripsi file yang disebutkan di

Contoh kerja:

$ touch file_{0,1}.txt # creates blank files file_0 & file_1    
$ zip -e file.zip file_* # ask zip to encrypt
$ ENTER PASSWORD:
$ VERIFY PASSWORD:
$ ls file*
Antony Thomas
sumber
11
Enkripsi file zip tidak aman dengan cara apa pun.
Kristopher Ives
4
@ KristopherIves dapatkah Anda menguraikan ketidakamanan?
tscizzle
4
@KristopherIves Membutuhkan "arsip ZIP lain, yang mengandung setidaknya satu file dari arsip terenkripsi dalam bentuk tidak terenkripsi " untuk berfungsi.
Franklin Yu
4
"Anda hanya perlu tahu sebagian dari plaintext (setidaknya 13 byte)". Ini membuatnya jauh lebih rentan daripada jika seluruh file tidak terenkripsi diperlukan (yang sudah sangat buruk). Enkripsi zip juga tidak tahan terhadap serangan brute-force (misalnya dengan Jack the Ripper). Tidak ada yang harus menggunakannya untuk hal yang serius.
EM0
21

Inilah beberapa cara untuk melakukan ini. Satu hal yang perlu diperhatikan adalah bahwa jika Anda akan menggunakan alat kompresi dan enkripsi yang terpisah, Anda harus selalu mengompres sebelum enkripsi, karena data yang dienkripsi pada dasarnya tidak dapat dikompres.

Contoh-contoh ini memampatkan dan mengenkripsi file yang disebut clear_text.

Menggunakan gpg

$ gpg -c clear_text #Compress & Encrypt
$ gpg -d clear_text.gpg #Decrypt & Decompress

gpg akan memampatkan file input sebelum enkripsi secara default, -cartinya menggunakan enkripsi simetris dengan kata sandi. File output akan menjadi clear_text.gpg. Salah satu manfaat menggunakan gpgadalah menggunakan format OpenPGP standar, sehingga setiap perangkat lunak enkripsi yang mendukung OpenPGP akan dapat mendekripsi.

Menggunakan mcrypt

$ mcrypt -z clear_text #Compress & Encrypt
$ mdecrypt -z clear_text.gz.nc #Decrypt & Decompress

The -zpilihan kompres. Secara default ini menghasilkan file yang disebut clear_text.gz.nc.

Menggunakan bcrypt

$ bcrypt -r clear_text #Compress & Encrypt
$ bcrypt -r clear_text.bfe #Decrypt & Decompress

bcrypt kompres sebelum mengenkripsi secara default, -ropsinya adalah agar file input tidak terhapus dalam proses. File output disebut clear_text.bfesecara default.

Menggunakan gzipdanaespipe

$ cat clear_text | gzip | aespipe > clear_text.gz.aes #Compress & Encrypt
$ cat clear_text.gz.aes | aespipe -d | gunzip > clear_text #Decrypt & Decompress

aespipe adalah seperti apa itu, sebuah program yang mengambil input pada stdin dan output aes data terenkripsi pada stdout. Itu tidak mendukung kompresi, jadi Anda dapat menyalurkan input melalui gzip terlebih dahulu. Karena output menuju stdout, Anda harus mengarahkannya ke file dengan nama yang Anda pilih sendiri. Mungkin bukan cara yang paling efektif untuk melakukan apa yang Anda minta tetapi aespipe adalah alat serbaguna jadi saya pikir itu layak disebutkan.

Grafik Noob
sumber
15

Anda dapat menggunakan 7zip untuk membuat arsip yang dilindungi kata sandi Anda. Anda dapat menentukan kata sandi pada baris perintah (atau dalam skrip) dengan cara berikut:

7z a -p<password> <someprotectedfile>.7z file1.txt file2.txt

7zip juga dapat membaca dari STDIN sebagai berikut:

cat <somefile> | 7z a -si -p<password> <someprotectedfile>.7z

Jika itu wajib untuk menggunakan file zip, Anda mungkin ingin bermain-main dengan -t<type>parameter (misalnya -tzip).

SaeX
sumber
5
Saya memilih ini sebagai jawaban karena itu satu-satunya yang menjawab pertanyaan. Pertanyaannya bukan bagaimana mengenkripsi pesan, tetapi bagaimana melindungi kata sandi arsip. Hanya itu yang perlu saya lakukan. (Gmail memblokir cadangan server saya karena memutuskan ada sesuatu yang tidak aman di lampiran, dan saya hanya perlu menambahkan kata sandi. Tidak harus aman.)
felwithe
7

Baik tar, gzip, maupun bzip2 tidak mendukung perlindungan kata sandi. Baik menggunakan format kompresi yang berfungsi, seperti zip, atau mengenkripsi dengan alat lain seperti GnuPG.

Ignacio Vazquez-Abrams
sumber
Ah, itu menjelaskan mengapa saya tidak dapat menemukan apa pun di internet. Saya pikir saya akan pergi untuk zip.
morf
Gah !, saya mencoba untuk secara zip zip direktori dengan passwors, dan itu hanya membuat file zip dengan nama foobar sebagai direktori (kosong) di dalamnya. Berikut adalah perintah yang saya gunakan: zip -e foobar.zip foobar. foobar adalah folder tidak kosong di direktori saat ini
morf
4
Seperti kata pria itu -r,.
Ignacio Vazquez-Abrams
5

Buat dengan:

tar czvf - directory | gpg --symmetric --cipher-algo aes256 -o passwordprotectedarchive.tar.gz.gpg

Ia akan meminta kata sandi Anda.

Dekripsi dengan:

gpg -d passwordprotectedarchive.tar.gz.gpg | tar xzvf -
LHolleman
sumber