เข้ารหัสไฟล์ tar.gz เมื่อสร้าง


33

ฉันมีสคริปต์ที่สร้างการสำรองข้อมูลหลายไดเรกทอรีทุกคืน

มันถูกสร้างขึ้นโดยใช้tar -czfและเส้นทางไฟล์ tar.gz ปลายทางอยู่ในไดเรกทอรีเครือข่ายที่ติดตั้ง ไฟล์ผลลัพธ์มีขนาดใหญ่ประมาณ 1.2Gb

ความเร็วเครือข่ายค่อนข้างเร็วพอ (การคัดลอกจากไดรฟ์เครือข่ายไปยังโลคอลเกิดขึ้นที่ ~ 28MB / วินาที)

ตอนนี้ฉันต้องการใช้การเข้ารหัสกุญแจสาธารณะเพื่อเข้ารหัสไฟล์ tar.gz ก่อนที่จะถ่ายโอนไปยังไดรฟ์เครือข่ายและต้องการทราบว่าวิธีที่ดีที่สุดในการทำเช่นนั้นคืออะไร

ฉันควรสร้างไฟล์ในเครื่องก่อนเข้ารหัสจากนั้นจึงคัดลอก? หรือมีวิธีการ "สตรีม" tar เอาต์พุตผ่านกระบวนการเข้ารหัสและเขียนผลลัพธ์โดยตรงไปยังไดรฟ์เครือข่ายหรือไม่

คำตอบ:


34

แพ็คyour_dirในไฟล์เก็บถาวรที่เข้ารหัสyour_archive.tgz.gpg(การเข้ารหัสแบบสมมาตร):

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

แกะมันออก:

gpg -d your_archive.tgz.gpg | tar xz

ดูเอกสารของ GPG สำหรับวิธีใช้แบบอสมมาตรแทนการเข้ารหัสแบบสมมาตร


2
ดูเหมือนว่าการใช้ GPG จะสร้างคีย์ในที่อยู่อาศัยของผู้ใช้และแจ้งให้ใส่ข้อความรหัสผ่าน โดยทั่วไปแล้วกระบวนการดูเหมือนจะไม่ชัดเจนเกินไปสำหรับรสนิยมของฉัน ...
Joel L

ควรtar xzอยู่ในชุดคำสั่งที่สองtar -xzแทนไหม?
Kenny Evitt

1
@ KennyEvitt: คุณสามารถใช้กับหรือไม่-
Florian Diesch

ใช้งานได้กับไฟล์ที่เข้ารหัสด้วย gpg-zip เช่นกัน!
Trefex

2
gpg บีบอัดไฟล์แล้วอย่าคิดว่าzตัวเลือกเพิ่มมากขึ้นเท่าไหร่
feklee

12

กระบวนการต่อไปนี้เข้ารหัสไฟล์บนโลคัลดิสก์ก่อนและจากนั้นสามารถส่งผ่านเครือข่าย (หรือเก็บไว้ได้ตามต้องการ)


ขั้นแรกให้สร้างกุญแจสาธารณะและกุญแจส่วนตัว (ทำได้เพียงครั้งเดียว):

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

จากนั้นในแต่ละการสำรองข้อมูล:

  1. สร้างวลีรหัสผ่านแบบสุ่มที่ยาวบันทึกในไฟล์

    • echo -n "Tl4R6dnvWXiDeXr1LtpCNkyLG1" > key.txt
  2. ไฟล์ที่เข้ารหัสด้วยข้อความรหัสผ่าน

    • openssl enc -aes-256-cbc -pass file:key.txt < UNENCRYPTED_FILE > encrypted.dat
  3. เข้ารหัสวลีรหัสผ่านด้วยกุญแจสาธารณะ

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

จากนั้นบันทึกที่เข้ารหัสแล้วและ AND.key.xt ที่ต้องการ


ในการถอดรหัส:

  1. ถอดรหัสข้อความรหัสผ่านที่เข้ารหัสด้วยไพรเวตคีย์

    • openssl rsautl -decrypt -inkey key.pem < enc.key.txt > key.txt
  2. ถอดรหัสไฟล์

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

สิ่งนี้ยาวกว่าตัวตรวจสอบของ Florian เป็นอย่างมาก แต่ฉันตัดสินใจที่จะใช้เพื่อให้ฉันสามารถเข้าใจกระบวนการได้ดีขึ้นและไม่ขึ้นอยู่กับตัวแปรการกำหนดค่า GPG ที่ขึ้นอยู่กับเซิร์ฟเวอร์ ฯลฯ ฉันยังไม่พบเอกสาร GPG ที่มีประโยชน์


1
ข้อความรหัสผ่านแบบสุ่มสามารถสร้างได้อย่างง่ายดายด้วย openssl อย่างนั้น openssl rand 32 -out key.txt
Wolfgang

@ Wolfgang - จริง ๆ แล้วฉันสร้างข้อความรหัสผ่านจากสคริปต์ python (ที่เรียกใช้กระบวนการสำรองข้อมูล) แต่ขอบคุณสำหรับเคล็ดลับ!
Joel L

2
FYI: ทำไมคุณไม่ควรเข้ารหัสไฟล์ด้วย openssl: stackoverflow.com/questions/28247821//
Daniel Hiller

ไฟล์นี้ 'enc.key.txt' คืออะไร ฉันกำลังดูกระบวนการที่สำรองไฟล์เซิร์ฟเวอร์ของฉันและต้องการถอดรหัสโดยใช้รหัสที่ไม่ได้เก็บไว้ในเซิร์ฟเวอร์เท่านั้น
Alex Stewart

6

ฉันทำสิ่งนี้ด้วยการเข้ารหัสคีย์แบบไม่สมมาตร นั่นหมายความว่าฉันมีรหัสสาธารณะ (ที่ฉันสามารถแบ่งปันกับใครก็ได้ที่ฉันต้องการส่งแพคเกจที่เข้ารหัส) ซึ่งทำให้ฉันสามารถเข้ารหัสแพ็คเกจได้ ฉันยังมีรหัสส่วนตัว (ที่ฉันไม่แชร์) ซึ่งช่วยให้ฉันสามารถถอดรหัสแพ็คเกจได้

คำสั่งของฉันเพื่อเข้ารหัสไดเร็กทอรีการทำงานปัจจุบัน: -e เพื่อเข้ารหัส, -r เพื่อระบุ "ผู้รับ" หรือคีย์ที่จะใช้ -o เพื่อระบุไฟล์เอาต์พุต

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

และเพื่อถอดรหัสไดเรกทอรีการทำงานปัจจุบัน:

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

หรือเพื่อถอดรหัสเป็นไฟล์ tgz มาตรฐานสำหรับการเปิดออกภายหลัง:

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

แน่นอนว่าจะใช้งานได้ก็ต่อเมื่อฉันได้สร้างคู่คีย์สาธารณะและส่วนตัวแล้วติดตั้งด้วย gpg ในกรณีของฉันฉันได้ทำตามคำแนะนำของ Digital Ocean ที่https://www.digitalocean.com/community/tutorials/how-to-use-gpg-to-encrypt-and-sign-messages-on-anbuban -12-04-VPS ABCD1234 ในคำสั่งการเข้ารหัสอ้างถึงหนึ่งในกุญแจสาธารณะที่ติดตั้งบนระบบของฉัน คู่มือนี้ยังครอบคลุมถึงวิธีการแบ่งปันกุญแจสาธารณะของคุณและติดตั้งกุญแจสาธารณะของผู้อื่นเพื่อส่งและรับไฟล์ที่เข้ารหัส


0

GnuPG เป็นสิ่งที่ฉันเลือกที่จะใช้สำหรับกระบวนการนี้และเนื่องจากคุณระบุว่าขั้นตอนการถอดรหัสที่ทึบแสง (ฉันเห็นด้วยในตัวอย่างการใช้งานนี้) ฉันก็ทำงานด้านปัญหาเช่นกัน ตรวจสอบบันทึกการทำงานของTravis-CIสำหรับโครงการว่าฟีเจอร์ใดทำงานได้บ้างตามที่ออกแบบไว้และไฟล์travis.ymlเพื่อติดตามผลพร้อมกับบันทึกการทำงาน โดยทั่วไปคุณจะต้องมีสามสคริปต์จากโครงการนี้ สคริปต์ keygen สคริปต์ตัวช่วยการถอดรหัสและชื่อสคริปต์ฟังไพพ์ ควรใช้สคริปต์ตัวช่วยสร้างการถอดรหัสและ keygen บนอุปกรณ์ที่จะ preform ถอดรหัสและสคริปต์ไปป์ที่มีชื่อผู้ฟังควรอยู่ในอุปกรณ์ preforming การเข้ารหัส

สคริปต์การรับฟังไปป์ที่มีชื่อเข้ารหัสจะยอมรับสตริงพา ธ ไฟล์หรือพา ธ ไดเร็กทอรีเมื่อตั้งค่าและแสดงผลลัพธ์ที่เข้ารหัสในแบบที่คาดเดาได้

ด้านล่างนี้เป็นคำสั่งตัวอย่างที่สามารถวางไว้ในสคริปต์สำรองข้อมูลทุกคืนสำหรับการเข้ารหัสและการบีบอัดไดเรกทอรี + การเข้ารหัส

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

สำหรับการถอดรหัสคุณจะต้องตรวจสอบว่าสคริปต์การสร้าง.travis-ci/script_decrypt.shและ.travis-ci/test_search_script_decrypt.shวิธีการกู้คืนสตริงที่เข้ารหัสของข้อมูลที่เข้ารหัสและวิธีการกู้คืนไฟล์ / ไดเรกทอรีจำนวนมาก

แน่นอนว่าด้วยสิ่งต่าง ๆ ที่การทดลองนี้เป็นการดีที่สุดที่จะไม่ใช้คีย์หลัก (ค่อนข้างว่าทำไมสคริปต์ keygen ถูกเขียน) และไม่ควรใช้กับข้อมูลสำคัญจนกว่าคุณจะมั่นใจในวิธีการกู้คืนสู่รูปแบบที่อ่านได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.