Làm thế nào để mật khẩu bảo vệ các tập tin gzip trên dòng lệnh?


130

Tôi muốn tạo một số tệp tar.gz (và có thể là tar.bz2), bằng cách sử dụng lệnh tar trên Ubuntu 10.04.

Tôi muốn mật khẩu bảo vệ các tập tin.

Lệnh để làm điều này là gì (Tôi đã Googled, nhưng không tìm thấy gì cho thấy cách tạo và trích xuất các tệp nén bằng mật khẩu).

Bất cứ ai cũng biết làm thế nào để làm điều này?

Câu trả lời:


159

bạn phải áp dụng triết lý unix cho nhiệm vụ này: một công cụ cho mỗi nhiệm vụ.

tarring và nén là một công việc cho targziphoặc bzip2, tiền điện tử là một công việc cho một trong hai gpghoặc openssl:

Mã hóa

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

Giải mã

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

Hoặc sử dụng gpg

 % gpg --encrypt out.tar.gz

biến thể openssl sử dụng mã hóa đối xứng, bạn sẽ phải thông báo cho bên nhận về 'mật khẩu' đã sử dụng (còn gọi là 'khóa'). biến thể gpg sử dụng kết hợp mã hóa đối xứng và không đối xứng, bạn sử dụng khóa của bên nhận (có nghĩa là bạn không phải nói bất kỳ mật khẩu nào liên quan đến bất kỳ ai) để tạo khóa phiên và mã hóa nội dung bằng khóa đó.

nếu bạn đi theo đường zip (hoặc 7z): về cơ bản giống như biến thể openssl, bạn phải thông báo cho bên nhận về mật khẩu.


26
Đối với bất cứ ai tự hỏi làm thế nào để giải mã tập tin với openssl:openssl aes-256-cbc -d -in out.tar.gz.enc -out decrypted.tar.gz
ndbroadbent

1
@ nathan.f77 lệnh đó cũng chỉ ra cách thực hiện mọi thứ mà không cần chuyển chúng vào openssl. openssl enc -aes-256-cbc -e -in foo.tar.gz -out bar.tar.gz.enc
Keith Smiley

3
@KeithSmiley nếu bạn có kho lưu trữ lớn và không có nhiều dung lượng (như có thể trên VPS) thì sẽ hiệu quả hơn về không gian đối với đường ống.
Andrew Savinykh

Tôi dường như không thể chạy cái này trên máy mac. Đây có phải là khác nhau trong anyway?
eleijonmarck

3
@eleijonmarck cung cấp phần "không hoạt động vì <insert-error-message-here>" Tiết
akira

29

Nếu mục đích của bạn là chỉ bảo vệ mật khẩu các tệp, thì hãy sử dụng tiện ích zip tay thông qua dòng lệnh

zip -e <file_name>.zip <list_of_files>

-e yêu cầu tiện ích zip mã hóa các tập tin được đề cập trong

Ví dụ làm việc:

$ 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*

11
Mã hóa tập tin zip không an toàn dưới bất kỳ hình thức nào.
Kristopher Ives

4
@KristopherIves bạn có thể giải thích về sự không an toàn?
tscizzle


4
@KristopherIves Nó yêu cầu "một kho lưu trữ ZIP khác, chứa ít nhất một trong số các tệp từ kho lưu trữ được mã hóa ở dạng không được mã hóa " để hoạt động.
Franklin Yu

4
"Bạn chỉ cần biết một phần của bản rõ (ít nhất là 13 byte)". Điều này làm cho nó nhiều hơn dễ bị tổn thương hơn nếu toàn bộ tập tin được mã hóa được yêu cầu (đó là đã khá xấu). Ngoài ra, mã hóa zip không chống lại các cuộc tấn công vũ phu (ví dụ như với Jack the Ripper). Không ai nên sử dụng nó cho bất cứ điều gì nghiêm trọng.
EM0

21

Đây là một vài cách để làm điều này. Một điều cần lưu ý là nếu bạn sẽ sử dụng các công cụ nén và mã hóa riêng biệt, bạn phải luôn nén trước khi mã hóa, vì dữ liệu được mã hóa về cơ bản là không thể nén được.

Những ví dụ này nén và mã hóa một tập tin gọi là clear_text.

Sử dụng gpg

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

gpg sẽ nén tệp đầu vào trước khi mã hóa theo mặc định, -ccó nghĩa là sử dụng mã hóa đối xứng bằng mật khẩu. Các tập tin đầu ra sẽ được clear_text.gpg. Một lợi ích của việc sử dụng gpglà sử dụng các định dạng OpenPGP tiêu chuẩn, do đó, bất kỳ phần mềm mã hóa nào hỗ trợ OpenPGP đều có thể giải mã được.

Sử dụng mcrypt

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

Các -ztùy chọn nén. Theo mặc định, điều này xuất ra một tập tin gọi là clear_text.gz.nc.

Sử dụng bcrypt

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

bcrypt nén trước khi mã hóa theo mặc định, -rtùy chọn là để tệp đầu vào không bị xóa trong quá trình. Các tập tin đầu ra được gọi clear_text.bfetheo mặc định.

Sử dụng gzipaespipe

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

aespipe là những gì nó nghe như, một chương trình lấy đầu vào trên stdin và xuất ra dữ liệu được mã hóa trên thiết bị xuất chuẩn. Nó không hỗ trợ nén, vì vậy bạn có thể dẫn đầu vào qua gzip trước. Vì đầu ra đi vào thiết bị xuất chuẩn, bạn sẽ phải chuyển hướng nó đến một tệp có tên do bạn chọn. Có lẽ không phải là cách hiệu quả nhất để làm những gì bạn yêu cầu nhưng aespipe là một công cụ đa năng nên tôi nghĩ nó đáng được đề cập.


15

Bạn có thể sử dụng 7zip để tạo lưu trữ được bảo vệ bằng mật khẩu. Bạn có thể chỉ định mật khẩu trên dòng lệnh (hoặc trong tập lệnh) theo cách sau:

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

7zip cũng có thể đọc từ STDIN như sau:

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

Nếu bắt buộc phải sử dụng tệp zip, bạn có thể muốn chơi xung quanh với -t<type>tham số (ví dụ -tzip).


5
Tôi chọn đây là câu trả lời vì nó là người duy nhất trả lời câu hỏi. Câu hỏi không phải là làm thế nào để mã hóa tin nhắn, đó là cách mật khẩu bảo vệ một kho lưu trữ. Đó là tất cả những gì tôi cần làm. (Gmail đã được ngăn chặn sao lưu máy chủ của tôi bởi vì nó quyết định có điều gì đó không an toàn trong tập tin đính kèm, và tôi chỉ cần thêm một mật khẩu Nó không phải là an toàn..)
felwithe

7

Cả tar, gzip, hay bzip2 đều không hỗ trợ bảo vệ mật khẩu. Sử dụng định dạng nén, chẳng hạn như zip hoặc mã hóa nó bằng một công cụ khác như GnuPG.


Ah, điều đó giải thích tại sao tôi không thể tìm thấy bất cứ điều gì trực tuyến. Tôi nghĩ rằng tôi sẽ đi cho zip.
morpheous

Gah!, Tôi đang cố gắng đệ quy zip một thư mục có mật khẩu và nó chỉ tạo một tệp zip có tên foobar là một thư mục (trống) trong đó. Đây là lệnh tôi đang sử dụng: zip -e foobar.zip foobar. foobar là một thư mục không trống trong thư mục hiện tại
morpheous

4
Đúng như người đàn ông nói -r.
Ignacio Vazquez-Abrams

5

Tạo bằng:

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

Nó sẽ hỏi bạn mật khẩu.

Giải mã với:

gpg -d passwordprotectedarchive.tar.gz.gpg | tar xzvf -
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.