संस्करण नियंत्रण में फ़ाइल को बनाए रखते हुए आप अपनी संवेदनशील सेटिंग फ़ाइल को एन्क्रिप्ट करना चाहते हैं। जैसा कि आप उल्लेख करते हैं, सबसे अच्छा समाधान वह होगा जिसमें Git पारदर्शी रूप से कुछ संवेदनशील फ़ाइलों को एन्क्रिप्ट करेगा जब आप उन्हें धक्का देंगे ताकि स्थानीय रूप से (अर्थात किसी भी मशीन पर जो आपका प्रमाण पत्र है) आप सेटिंग्स फ़ाइल का उपयोग कर सकते हैं, लेकिन Git या ड्रॉपबॉक्स या जो कोई भी हो वीसी के तहत आपकी फाइलों को संग्रहीत करने में सादा जानकारी को पढ़ने की क्षमता नहीं है।
पुश / पुल के दौरान पारदर्शी एन्क्रिप्शन / डिक्रिप्शन पर ट्यूटोरियल
यह gist https://gist.github.com/873637 पारदर्शी रूप से पुश की गई फ़ाइलों को एन्क्रिप्ट करने के लिए ओपन के साथ Git के स्मज / क्लीन फिल्टर ड्राइवर का उपयोग करने के तरीके पर एक ट्यूटोरियल दिखाता है। आपको बस कुछ प्रारंभिक सेटअप करने की आवश्यकता है।
यह कैसे काम करता है इसका सारांश
आप मूल रूप से .gitencrypt
3 bash स्क्रिप्ट युक्त एक फ़ोल्डर बना रहे होंगे ,
clean_filter_openssl
smudge_filter_openssl
diff_filter_openssl
जो Git द्वारा डिक्रिप्शन, एन्क्रिप्शन और सपोर्टिंग Git के लिए उपयोग किए जाते हैं। एक मास्टर पासफ़्रेज़ और नमक (निश्चित!) को इन लिपियों के अंदर परिभाषित किया गया है और आपको यह सुनिश्चित करना होगा कि .itencrypt वास्तव में कभी भी धकेल नहीं दिया जाता है। उदाहरण clean_filter_openssl
लिपि:
#!/bin/bash
SALT_FIXED=<your-salt> # 24 or less hex characters
PASS_FIXED=<your-passphrase>
openssl enc -base64 -aes-256-ecb -S $SALT_FIXED -k $PASS_FIXED
के लिए समान smudge_filter_open_ssl
और diff_filter_oepnssl
। जिस्ट देखें
संवेदनशील जानकारी के साथ आपके रेपो में एक .gitattribute फ़ाइल (अनएन्क्रिप्टेड और रेपो में शामिल) होनी चाहिए जो .itencrypt डायरेक्टरी को संदर्भित करता है (जिसमें सब कुछ 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
अब, जब आप अपनी संवेदनशील जानकारी वाले रिपॉजिटरी को दूरस्थ रिपॉजिटरी में धकेलते हैं, तो फाइलें पारदर्शी रूप से एन्क्रिप्ट हो जाएंगी। जब आप एक स्थानीय मशीन से खींचते हैं, जिसमें .itencrypt डायरेक्टरी होती है (जिसमें आपका पासफ़्रेज़ होता है), फाइलें पारदर्शी रूप से एन्क्रिप्ट की जाएंगी।
टिप्पणियाँ
मुझे ध्यान देना चाहिए कि यह ट्यूटोरियल केवल आपकी संवेदनशील सेटिंग्स फ़ाइल को एन्क्रिप्ट करने का तरीका नहीं बताता है। यह पूरी तरह से संपूर्ण भंडार को एन्क्रिप्ट करेगा जो दूरस्थ वीसी होस्ट को धकेल दिया जाता है और संपूर्ण भंडार को डिक्रिप्ट करता है, इसलिए यह पूरी तरह से स्थानीय रूप से डिक्रिप्ट किया जाता है। आप जो व्यवहार चाहते हैं, उसे प्राप्त करने के लिए, आप एक संवेदनशील या कई प्रोजेक्ट्स के लिए संवेदनशील संवेगों में जगह कर सकते हैं। आप की जांच कर सकता है कि यह कैसे पारदर्शी एन्क्रिप्शन तकनीक Git submodules के साथ काम करता http://git-scm.com/book/en/Git-Tools-Submodules यदि आप वास्तव में संवेदनशील फ़ाइलें जरूरत है एक ही भंडार में किया जाना है।
एक निश्चित पासफ़्रेज़ के उपयोग से सैद्धांतिक रूप से ब्रूट-फोर्स भेद्यता हो सकती है यदि हमलावरों के पास कई एन्क्रिप्टेड रिपॉजिट या फ़ाइलों तक पहुंच होती है। IMO, इस की संभावना बहुत कम है। इस ट्यूटोरियल के निचले भाग पर एक नोट के रूप में, एक निश्चित पासफ़्रेज़ का उपयोग नहीं करने से विभिन्न मशीनों पर रेपो के स्थानीय संस्करण हमेशा दिखाई देंगे, जिसमें यह दिखाया जाएगा कि परिवर्तन 'स्थिति' के साथ हुए हैं।