Dosyayı sürüm kontrolünde tutarken hassas ayarlar dosyanızı şifrelemek istediğinizde haklısınız. Bahsettiğiniz gibi, en iyi çözüm Git'in belirli hassas dosyaları yerel olarak (yani sertifikanız olan herhangi bir makinede) ayarlar dosyasını kullanabilmeniz için şeffaf olarak şifreleyeceği, ancak Git veya Dropbox veya VC altında dosyalarınızı saklamak, bilgileri düz metin olarak okuyamaz.
Push / Pull sırasında Şeffaf Şifreleme / Şifre Çözme Eğitimi
Bu özet https://gist.github.com/873637 , Git'in bulaşan / temiz filtre sürücüsünün, aktarılan dosyaları şeffaf bir şekilde şifrelemek için openssl ile nasıl kullanılacağına dair bir öğretici gösterir. Sadece bazı ilk kurulumları yapmanız gerekir.
Nasıl Çalıştığı
Temel olarak .gitencrypt
3 bash betiği içeren bir klasör oluşturacaksınız ,
clean_filter_openssl
smudge_filter_openssl
diff_filter_openssl
Git tarafından şifre çözme, şifreleme ve destek için kullanılan Git fark. Bu komut dosyalarının içinde bir ana parola ve tuz (sabit!) Tanımlanır ve .gitencrypt öğesinin hiçbir zaman gerçekten aktarılmadığından emin olmalısınız. Örnek clean_filter_openssl
komut dosyası:
#!/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
Benzer smudge_filter_open_ssl
ve diff_filter_oepnssl
. Bkz.
Hassas bilgiler içeren repo'nuzda .gitencrypt dizinine (Git'in projeyi şeffaf bir şekilde şifrelemek / şifresini çözmek için ihtiyaç duyduğu her şeyi içeren) ve yerel makinenizde bulunan bir .gitattribute dosyası (şifrelenmemiş ve repoya dahil edilmiş) olmalıdır.
.gitattribute
içeriği:
* filter=openssl diff=openssl
[merge]
renormalize = true
Son olarak, .git/config
dosyanıza aşağıdaki içeriği de eklemeniz gerekir
[filter "openssl"]
smudge = ~/.gitencrypt/smudge_filter_openssl
clean = ~/.gitencrypt/clean_filter_openssl
[diff "openssl"]
textconv = ~/.gitencrypt/diff_filter_openssl
Artık hassas bilgilerinizi içeren havuzu uzak bir depoya aktardığınızda dosyalar şeffaf olarak şifrelenecektir. .Gitencrypt dizinine (parolanızı içeren) sahip yerel bir makineden çektiğinizde, dosyaların şifresi çözülür.
notlar
Bu öğreticinin yalnızca hassas ayarlar dosyanızı şifrelemenin bir yolunu açıklamadığını unutmayın. Bu, uzak VC ana makinesine aktarılan tüm deposu şeffaf bir şekilde şifreleyecek ve tüm deponun şifresini çözecek, böylece tamamen yerel olarak şifresi çözülecektir. İstediğiniz davranışı elde etmek için, bir veya daha fazla proje için hassas dosyaları tek bir sens_settings_repo içine yerleştirebilirsiniz. Bu şeffaf şifreleme tekniği Git submodules ile nasıl çalıştığını araştırmak olabilir http://git-scm.com/book/en/Git-Tools-Submodules Eğer gerçekten aynı depoda olması hassas dosyaları gerekiyorsa.
Sabit bir parola kullanılması, saldırganların birçok şifreli depoya / dosyaya erişmesi durumunda teorik olarak kaba kuvvet açıklarına yol açabilir. IMO, bunun olasılığı çok düşük. Bu öğreticinin altında bir not olarak, sabit bir parola kullanılmaması, farklı makinelerde bir repo'nun yerel sürümlerinin her zaman 'git durumu' ile değişikliklerin gerçekleştiğini göstermesine neden olacaktır.