Anda memang benar ingin mengenkripsi file pengaturan sensitif Anda sambil tetap mempertahankan file dalam kontrol versi. Seperti yang Anda sebutkan, solusi terbaik adalah Git akan mengenkripsi file sensitif tertentu secara transparan saat Anda mendorongnya secara lokal (yaitu pada mesin apa pun yang memiliki sertifikat Anda), Anda dapat menggunakan file pengaturan, tetapi Git atau Dropbox atau siapa pun menyimpan file Anda di bawah VC tidak memiliki kemampuan untuk membaca informasi dalam plaintext.
Tutorial tentang Enkripsi / Dekripsi Transparan selama Push / Pull
Intisari ini https://gist.github.com/873637 memperlihatkan tutorial tentang cara menggunakan driver filter noda / bersih Git dengan openssl untuk mengenkripsi file yang didorong secara transparan. Anda hanya perlu melakukan beberapa pengaturan awal.
Ringkasan Cara Kerja
Anda pada dasarnya akan membuat .gitencrypt
folder yang berisi 3 skrip bash,
clean_filter_openssl
smudge_filter_openssl
diff_filter_openssl
yang digunakan oleh Git untuk dekripsi, enkripsi, dan mendukung Git diff. Master frasa sandi dan garam (diperbaiki!) Didefinisikan di dalam skrip ini dan Anda HARUS memastikan bahwa .gitencrypt tidak pernah benar-benar didorong. clean_filter_openssl
Skrip contoh :
#!/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
Mirip untuk smudge_filter_open_ssl
dan diff_filter_oepnssl
. Lihat Gist.
Repo Anda dengan informasi sensitif harus memiliki file .gitattribute (tidak terenkripsi dan disertakan dalam repo) yang merujuk pada direktori .gitencrypt (yang berisi semua yang dibutuhkan Git untuk mengenkripsi / mendekripsi proyek secara transparan) dan yang ada pada mesin lokal Anda.
.gitattribute
isi:
* filter=openssl diff=openssl
[merge]
renormalize = true
Terakhir, Anda juga perlu menambahkan konten berikut ke .git/config
file Anda
[filter "openssl"]
smudge = ~/.gitencrypt/smudge_filter_openssl
clean = ~/.gitencrypt/clean_filter_openssl
[diff "openssl"]
textconv = ~/.gitencrypt/diff_filter_openssl
Sekarang, ketika Anda mendorong repositori yang berisi informasi sensitif Anda ke repositori jarak jauh, file-file tersebut akan dienkripsi secara transparan. Ketika Anda menarik dari mesin lokal yang memiliki direktori .gitencrypt (berisi frasa sandi Anda), file-file tersebut akan didekripsi secara transparan.
Catatan
Saya harus mencatat bahwa tutorial ini tidak menjelaskan cara hanya mengenkripsi file pengaturan sensitif Anda. Ini akan mengenkripsi seluruh repositori secara transparan yang didorong ke host VC jarak jauh dan mendekripsi seluruh repositori sehingga sepenuhnya didekripsi secara lokal. Untuk mencapai perilaku yang Anda inginkan, Anda dapat menempatkan file sensitif untuk satu atau banyak proyek dalam satu sensitive_settings_repo. Anda dapat menyelidiki bagaimana teknik enkripsi transparan ini bekerja dengan submit Git http://git-scm.com/book/en/Git-Tools-Submodules jika Anda benar-benar membutuhkan file sensitif berada di repositori yang sama.
Penggunaan frasa sandi tetap secara teoritis dapat menyebabkan kerentanan brute-force jika penyerang memiliki akses ke banyak repo / file terenkripsi. IMO, kemungkinan ini sangat rendah. Sebagai catatan di bagian bawah tutorial ini menyebutkan, tidak menggunakan frasa sandi tetap akan menghasilkan versi lokal repo pada mesin yang berbeda selalu menunjukkan bahwa perubahan telah terjadi dengan 'git status'.