Jak zabezpieczyć hasłem pliki gzip w wierszu poleceń?

130

Chcę utworzyć niektóre pliki tar.gz (i ewentualnie tar.bz2) za pomocą komendy tar w systemie Ubuntu 10.04.

Chcę zabezpieczyć hasłem plik.

Jakie jest polecenie, aby to zrobić (mam Googled, ale nie znalazłem nic, co pokazuje, jak tworzyć i wyodrębniać skompresowane pliki za pomocą hasła).

Czy ktoś wie jak to zrobić?

morficzny
źródło

Odpowiedzi:

159

musisz zastosować filozofię uniksową do tego zadania: jedno narzędzie dla każdego zadania.

tarowanie i kompresja jest to zadanie dla tara gziplub bzip2, krypto jest praca dla obu gpglub openssl:

Szyfruj

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

Odszyfruj

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

Lub używając gpg

 % gpg --encrypt out.tar.gz

wariant openssl wykorzystuje szyfrowanie symetryczne, trzeba by było powiedzieć stronie odbierającej o używanym „haśle” (inaczej „kluczu”). wariant gpg wykorzystuje kombinację szyfrowania symetrycznego i asymetrycznego, używasz klucza strony odbierającej (co oznacza, że ​​nie musisz nikomu podawać żadnego hasła), aby utworzyć klucz sesji i szyfrować zawartość za pomocą tego klucza.

jeśli wybierzesz trasę zip (lub 7z): zasadniczo jest to to samo, co wariant openssl, musisz powiedzieć stronie odbierającej o haśle.

akira
źródło
26
Dla każdego, kto zastanawia się, jak odszyfrować plik za pomocą openssl:openssl aes-256-cbc -d -in out.tar.gz.enc -out decrypted.tar.gz
ndbroadbent 28.01.2013
1
@ nathan.f77 to polecenie pokazuje również, jak robić rzeczy bez instalowania ich w openssl. openssl enc -aes-256-cbc -e -in foo.tar.gz -out bar.tar.gz.enc
Keith Smiley
3
@KeithSmiley, jeśli masz duże archiwa i nie ma dużo miejsca (tak jak na VPS), bardziej wydajne jest zajmowanie miejsca.
Andrew Savinykh
Nie mogę tego uruchomić na komputerze Mac. Czy tak w ogóle jest inaczej?
eleijonmarck,
3
@eleijonmarck zapewnia część „nie działa, ponieważ <insert-error-message-here>”…
akira
29

Jeśli Twoim celem jest po prostu ochrona plików hasłem, użyj narzędzia do ręcznego zipowania za pomocą wiersza polecenia

zip -e <file_name>.zip <list_of_files>

-e prosi narzędzie zip o szyfrowanie plików wymienionych w

Przykład roboczy:

$ 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
źródło
11
Szyfrowanie plików zip nie jest w żaden sposób bezpieczne.
Kristopher Ives
4
@KristopherCzy potrafisz rozwinąć niepewność?
tscizzle
4
@KristopherIves Wymaga „kolejnego archiwum ZIP zawierającego co najmniej jeden plik z zaszyfrowanego archiwum w formie niezaszyfrowanej ” do działania.
Franklin Yu
4
„Musisz znać tylko część tekstu jawnego (co najmniej 13 bajtów)”. To sprawia, że ​​jest znacznie bardziej podatny na atak, niż gdyby wymagany był cały niezaszyfrowany plik (co jest już dość złe). Ponadto szyfrowanie zip nie jest odporne na ataki typu brute-force (np. Przy użyciu Kuby Rozpruwacza). Nikt nie powinien go używać do niczego poważnego.
EM0,
21

Oto kilka sposobów, aby to zrobić. Należy zauważyć, że jeśli zamierzasz korzystać z oddzielnych narzędzi do kompresji i szyfrowania, zawsze powinieneś kompresować przed szyfrowaniem, ponieważ zaszyfrowane dane są w zasadzie nieściśliwe.

Te przykłady kompresują i szyfrują plik o nazwie clear_text.

Za pomocą gpg

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

gpg domyślnie kompresuje plik wejściowy przed szyfrowaniem, co -coznacza użycie szyfrowania symetrycznego z hasłem. Plik wyjściowy będzie clear_text.gpg. Jedną z zalet używania gpgjest to, że używa standardowych formatów OpenPGP, więc każde oprogramowanie szyfrujące, które obsługuje OpenPGP, będzie mogło je odszyfrować.

Za pomocą mcrypt

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

-zOpcja kompresuje. Domyślnie jest to plik o nazwie clear_text.gz.nc.

Za pomocą bcrypt

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

bcrypt kompresuje się przed domyślnym szyfrowaniem, -ropcja jest taka, że ​​plik wejściowy nie jest usuwany w procesie. Plik wyjściowy jest wywoływany clear_text.bfedomyślnie.

Korzystanie gzipiaespipe

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

aespipe to, jak to brzmi, program, który pobiera dane wejściowe na standardowe wejście i wysyła zaszyfrowane dane na standardowe wyjście. Nie obsługuje kompresji, więc możesz najpierw przesłać dane wejściowe przez gzip. Ponieważ wyjście przechodzi do standardowego wyjścia, będziesz musiał przekierować go do pliku o wybranej przez siebie nazwie. Prawdopodobnie nie jest to najskuteczniejszy sposób na zrobienie tego, o co prosisz, ale aespipe to wszechstronne narzędzie, więc pomyślałem, że warto o tym wspomnieć.

Grafika Noob
źródło
15

Możesz użyć 7zip, aby utworzyć swoje archiwum chronione hasłem. Możesz określić hasło w wierszu poleceń (lub w skrypcie) w następujący sposób:

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

7zip może również czytać ze STDIN w następujący sposób:

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

Jeśli użycie plików zip jest obowiązkowe, możesz chcieć bawić się z -t<type>parametrem (np -tzip.).

SaeX
źródło
5
Wybrałem to jako odpowiedź, ponieważ jest to jedyna odpowiedź na pytanie. Nie chodzi o to, jak zaszyfrować wiadomość, ale jak zabezpieczyć archiwum hasłem. To wszystko, co musiałem zrobić. (Gmail blokował kopie zapasowe moich serwerów, ponieważ uznał, że w załączniku jest coś niebezpiecznego, a ja po prostu musiałem dodać hasło. Nie musi być bezpieczne.)
felwithe 23.09.16
7

Ani tar, gzip, ani bzip2 nie obsługują ochrony hasłem. Użyj formatu kompresji, takiego jak zip, lub zaszyfruj go za pomocą innego narzędzia, takiego jak GnuPG.

Ignacio Vazquez-Abrams
źródło
Ach, to wyjaśnia, dlaczego nie mogłem znaleźć niczego online. Myślę, że pójdę po zip.
morficzny
Gah !, Próbuję rekurencyjnie spakować katalog z hasłami, i tworzy on tylko plik zip z nazwą foobar jako (pusty) katalog w nim. Oto polecenie, którego używam: zip -e foobar.zip foobar. foobar to niepusty folder w bieżącym katalogu
morficzny
4
Podobnie jak człowiek mówi -r.
Ignacio Vazquez-Abrams
5

Utwórz za pomocą:

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

Poprosi Cię o hasło.

Deszyfruj za pomocą:

gpg -d passwordprotectedarchive.tar.gz.gpg | tar xzvf -
LHolleman
źródło