Mã hóa tập tin tar.gz khi tạo


33

Tôi có một kịch bản tạo ra một bản sao lưu hàng đêm của một số thư mục.

Nó được tạo bằng cách sử dụng tar -czfvà đường dẫn tệp tar.gz đích nằm trên một thư mục mạng được gắn kết. Các tập tin kết quả là khoảng 1,2Gb lớn.

Tốc độ mạng khá nhanh (sao chép từ ổ đĩa mạng sang cục bộ xảy ra ở mức ~ 28MB / giây).

Bây giờ tôi muốn sử dụng mã hóa khóa công khai để mã hóa tệp tar.gz trước khi chuyển nó vào ổ đĩa mạng và muốn biết cách tốt nhất để làm như vậy là gì.

Tôi có nên tạo tệp cục bộ trước, mã hóa tệp và sau đó sao chép lại không? Hoặc có cách nào để "truyền phát" đầu ra tar thông qua quy trình mã hóa và ghi kết quả trực tiếp vào ổ đĩa mạng không?

Câu trả lời:


34

Gói your_dirtrong một kho lưu trữ được mã hóa your_archive.tgz.gpg(mã hóa đối xứng):

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

Giải nén nó:

gpg -d your_archive.tgz.gpg | tar xz

Xem tài liệu về GPG để biết cách sử dụng bất đối xứng thay vì mã hóa đối xứng.


2
Sử dụng GPG dường như tạo ra các khóa trong ngăn chứa nhà của người dùng và nhắc nhập cụm mật khẩu. Về cơ bản, quá trình này dường như quá mờ nhạt đối với khẩu vị của tôi
Joel L

Có nên thay thế tar xztrong tập lệnh thứ hai tar -xz?
Kenny Evitt

1
@KennyEvitt: Bạn có thể sử dụng nó có hoặc không có-
Florian Diesch

Điều này cũng hoạt động cho các tập tin được mã hóa bằng gpg-zip!
Trefex

2
gpg đã nén các tệp, đừng nghĩ rằng ztùy chọn này sẽ thêm nhiều
feklee

12

Quá trình sau đây mã hóa tệp trên đĩa cục bộ trước và sau đó có thể được gửi qua mạng (hoặc được lưu trữ tuy nhiên cần thiết)


Đầu tiên, tạo khóa công khai và khóa riêng (chỉ được thực hiện một lần):

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

Sau đó, tại mỗi bản sao lưu:

  1. Tạo cụm mật khẩu ngẫu nhiên dài, lưu trong tệp

    • echo -n "Tl4R6dnvWXiDeXr1LtpCNkyLG1" > key.txt
  2. mã hóa tập tin với mật khẩu

    • openssl enc -aes-256-cbc -pass file:key.txt < UNENCRYPTED_FILE > encrypted.dat
  3. mã hóa mật khẩu bằng khóa chung

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

Sau đó lưu mã hóa.dat VÀ enc.key.txt nếu muốn.


Để giải mã:

  1. Giải mã mật khẩu được mã hóa bằng khóa riêng

    • openssl rsautl -decrypt -inkey key.pem < enc.key.txt > key.txt
  2. Giải mã tập tin

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

Thời gian này dài hơn nhiều so với anwser của Florian, nhưng tôi đã quyết định sử dụng nó để tôi có thể hiểu rõ hơn về quy trình và không phụ thuộc vào các biến cấu hình GPG phụ thuộc máy chủ, v.v. Tôi cũng không thể tìm thấy bất kỳ tài liệu GPG hữu ích nào.


1
Cụm mật khẩu ngẫu nhiên cũng có thể được tạo dễ dàng với openssl như vậy openssl rand 32 -out key.txt
Wolfgang

@Wolfgang - Tôi thực sự đang tạo mật khẩu từ tập lệnh python (chạy quá trình sao lưu), nhưng cảm ơn vì tiền boa!
Joel L

2
FYI: Tại sao bạn không nên mã hóa các tệp bằng openssl: stackoverflow.com/questions/28247821/ triệt
Daniel Hiller

Chính xác thì tập tin này 'enc.key.txt' là gì? Tôi đang xem xét một quy trình sao lưu các tệp máy chủ của mình và chỉ muốn có thể giải mã bằng khóa không được lưu trữ trên máy chủ.
Alex Stewart

6

Tôi làm điều này với mã hóa khóa bất đối xứng. Điều đó có nghĩa là tôi có khóa công khai (mà tôi có thể chia sẻ với bất kỳ ai tôi muốn gửi cho tôi các gói được mã hóa) cho phép tôi mã hóa gói. Tôi cũng có một khóa riêng (mà tôi không chia sẻ) cho phép tôi giải mã gói.

Các lệnh của tôi để mã hóa thư mục làm việc hiện tại: -e để mã hóa, -r để chỉ định "người nhận" hoặc khóa để sử dụng, -o để chỉ định tệp đầu ra.

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

Và để giải mã thư mục làm việc hiện tại:

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

Hoặc để giải mã thành tệp tgz tiêu chuẩn để giải nén sau:

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

Tất nhiên, điều này chỉ hoạt động nếu tôi đã tạo một cặp khóa công khai và cài đặt nó với gpg. Trong trường hợp của tôi, tôi đã thực hiện bằng cách sử dụng hướng dẫn của Digital Ocean tại https://www.digitalocean.com/community/tutorials/how-to-use-gpg-to-encrypt-and-sign-messages-on-an-ub Ubuntu -12-04-vps . ABCD1234 trong lệnh mã hóa đề cập đến một trong các khóa chung được cài đặt trên hệ thống của tôi. Hướng dẫn này cũng bao gồm cách chia sẻ khóa chung của bạn và cài đặt khóa chung của người khác để gửi và nhận tệp được mã hóa.


0

GnuPG là những gì tôi đã chọn để sử dụng cho quá trình này và vì bạn đã nói rằng các bước giải mã ở đâu mờ (tôi đồng ý trong trường hợp sử dụng này) tôi cũng đã làm việc về mặt đó của vấn đề. Kiểm tra nhật ký xây dựng Travis-CI của dự án để biết các tính năng hiện đang hoạt động như được thiết kế và tệp travis.yml để theo dõi cùng với đầu ra của nhật ký. Về cơ bản, bạn sẽ cần ba kịch bản từ dự án này; tập lệnh keygen, tập lệnh của trình trợ giúp giải mã và tập lệnh nghe đường ống có tên. Tập lệnh trình trợ giúp mã hóa & mã hóa mã khóa nên được sử dụng trên thiết bị sẽ tạo tiền mã hóa và tập lệnh trình nghe đường ống có tên phải nằm trên mã hóa của thiết bị.

Kịch bản trình nghe đường ống có tên mã hóa chấp nhận chuỗi, đường dẫn tệp hoặc đường dẫn thư mục một khi thiết lập và đưa ra kết quả được mã hóa theo kiểu có thể dự đoán được.

Dưới đây là các lệnh ví dụ có thể được đặt vào tập lệnh sao lưu hàng đêm của bạn để mã hóa và để nén thư mục + mã hóa

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

Để giải mã, bạn sẽ muốn kiểm tra cách các tập lệnh xây dựng .travis-ci/script_decrypt.sh& .travis-ci/test_search_script_decrypt.shcách thức các chuỗi dữ liệu được mã hóa được nối lại được phục hồi và cách khôi phục các tệp / thư mục hàng loạt.

Tất nhiên với công cụ thử nghiệm này, tốt nhất là không sử dụng các khóa chính (loại lý do tại sao tập lệnh keygen được viết) và nó không nên được sử dụng trên dữ liệu quan trọng cho đến khi bạn tự tin làm thế nào để khôi phục nó về dạng có thể đọc được.

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.