คุณมีสิทธิ์ที่ต้องการเข้ารหัสไฟล์การตั้งค่าที่ละเอียดอ่อนของคุณในขณะที่ยังคงรักษาไฟล์ไว้ในการควบคุมเวอร์ชัน ดังที่คุณกล่าวถึงทางออกที่ดีที่สุดคือ Git จะเข้ารหัสไฟล์ที่ละเอียดอ่อนบางไฟล์อย่างโปร่งใสเมื่อคุณผลักดันเพื่อให้ภายในเครื่อง (เช่นบนเครื่องใดก็ได้ที่มีใบรับรองของคุณ) คุณสามารถใช้ไฟล์การตั้งค่าได้ แต่ Git หรือ Dropbox หรือใครก็ตาม การจัดเก็บไฟล์ของคุณภายใต้ VC ไม่มีความสามารถในการอ่านข้อมูลในรูปแบบข้อความธรรมดา
บทช่วยสอนเกี่ยวกับการเข้ารหัส / ถอดรหัสแบบโปร่งใสระหว่างการกด / ดึง
ส่วนสำคัญนี้https://gist.github.com/873637แสดงบทช่วยสอนเกี่ยวกับวิธีใช้ไดรเวอร์ตัวกรอง smudge / clean ของ Git พร้อม openssl เพื่อเข้ารหัสไฟล์ที่พุชอย่างโปร่งใส คุณต้องทำการตั้งค่าเริ่มต้นบางอย่าง
สรุปวิธีการทำงาน
โดยพื้นฐานแล้วคุณจะสร้าง.gitencrypt
โฟลเดอร์ที่มี 3 bash scripts
clean_filter_openssl
smudge_filter_openssl
diff_filter_openssl
ซึ่ง Git ใช้สำหรับถอดรหัสเข้ารหัสและรองรับ Git diff ข้อความรหัสผ่านหลักและเกลือ (แก้ไขแล้ว!) ถูกกำหนดไว้ในสคริปต์เหล่านี้และคุณต้องแน่ใจว่าไม่มีการผลักดัน. gitencrypt จริง ตัวอย่างclean_filter_openssl
สคริปต์:
SALT_FIXED=<your-salt>
PASS_FIXED=<your-passphrase>
openssl enc -base64 -aes-256-ecb -S $SALT_FIXED -k $PASS_FIXED
คล้ายกันสำหรับsmudge_filter_open_ssl
และdiff_filter_oepnssl
. ดู Gist
repo ของคุณที่มีข้อมูลที่ละเอียดอ่อนควรมีไฟล์. gitattribute (ไม่ได้เข้ารหัสและรวมอยู่ใน repo) ซึ่งอ้างอิงถึงไดเร็กทอรี. gitencrypt (ซึ่งมีทุกสิ่งที่ Git ต้องการเพื่อเข้ารหัส / ถอดรหัสโปรเจ็กต์อย่างโปร่งใส) และมีอยู่ในเครื่องของคุณ
.gitattribute
เนื้อหา:
* filter=openssl diff=openssl
[merge]
renormalize = true
สุดท้ายคุณจะต้องเพิ่มเนื้อหาต่อไปนี้ใน.git/config
ไฟล์ของคุณ
[filter "openssl"]
smudge = ~/.gitencrypt/smudge_filter_openssl
clean = ~/.gitencrypt/clean_filter_openssl
[diff "openssl"]
textconv = ~/.gitencrypt/diff_filter_openssl
ตอนนี้เมื่อคุณพุชที่เก็บข้อมูลที่มีความละเอียดอ่อนของคุณไปยังที่เก็บระยะไกลไฟล์จะถูกเข้ารหัสอย่างโปร่งใส เมื่อคุณดึงจากเครื่องโลคัลซึ่งมีไดเร็กทอรี. gitencrypt (มีข้อความรหัสผ่านของคุณ) ไฟล์จะถูกถอดรหัสอย่างโปร่งใส
หมายเหตุ
ฉันควรทราบว่าบทช่วยสอนนี้ไม่ได้อธิบายวิธีเข้ารหัสเฉพาะไฟล์การตั้งค่าที่ละเอียดอ่อนของคุณเท่านั้น การดำเนินการนี้จะเข้ารหัสที่เก็บทั้งหมดอย่างโปร่งใสที่ถูกพุชไปยังโฮสต์ VC ระยะไกลและถอดรหัสที่เก็บทั้งหมดเพื่อให้ถูกถอดรหัสในเครื่องทั้งหมด เพื่อให้บรรลุพฤติกรรมที่คุณต้องการคุณสามารถวางไฟล์ที่ละเอียดอ่อนสำหรับโครงการหนึ่งหรือหลายโครงการใน sensitive_settings_repo เดียว คุณสามารถตรวจสอบว่าเทคนิคการเข้ารหัสแบบโปร่งใสนี้ทำงานอย่างไรกับ Git submodules http://git-scm.com/book/en/Git-Tools-Submodulesหากคุณต้องการให้ไฟล์ที่ละเอียดอ่อนอยู่ในที่เก็บเดียวกันจริงๆ
การใช้ข้อความรหัสผ่านคงที่ในทางทฤษฎีอาจนำไปสู่ช่องโหว่ที่กำลังดุร้ายหากผู้โจมตีสามารถเข้าถึง repos / ไฟล์ที่เข้ารหัสจำนวนมาก IMO ความน่าจะเป็นของสิ่งนี้ต่ำมาก ดังหมายเหตุที่ด้านล่างของบทช่วยสอนนี้กล่าวถึงการไม่ใช้ข้อความรหัสผ่านคงที่จะส่งผลให้ repo เวอร์ชันท้องถิ่นบนเครื่องต่าง ๆ แสดงว่ามีการเปลี่ยนแปลงเกิดขึ้นกับ 'git status' เสมอ