Masz rację, chcąc zaszyfrować swój poufny plik ustawień, zachowując jednocześnie kontrolę wersji. Jak wspomniałeś, najlepszym rozwiązaniem byłoby takie, w którym Git w sposób przejrzysty zaszyfruje niektóre poufne pliki po ich wysłaniu, aby lokalnie (tj. Na dowolnym komputerze, który ma Twój certyfikat), możesz użyć pliku ustawień, ale Git lub Dropbox lub ktokolwiek jest przechowywanie plików w VC nie daje możliwości odczytania informacji w postaci zwykłego tekstu.
Samouczek dotyczący przezroczystego szyfrowania / deszyfrowania podczas wypychania / ściągania
W tym streszczeniu https://gist.github.com/873637 pokazano samouczek dotyczący korzystania z sterownika smudge / clean filter Git z openssl do przezroczystego szyfrowania przesłanych plików. Musisz tylko przeprowadzić wstępną konfigurację.
Podsumowanie tego, jak to działa
Zasadniczo będziesz tworzyć .gitencrypt
folder zawierający 3 skrypty bash,
clean_filter_openssl
smudge_filter_openssl
diff_filter_openssl
które są używane przez Git do deszyfrowania, szyfrowania i obsługi różnic Git. Główne hasło i sól (naprawione!) Są zdefiniowane w tych skryptach i MUSISZ upewnić się, że plik .gitencrypt nigdy nie zostanie przesłany. Przykładowy clean_filter_openssl
skrypt:
#!/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
Podobnie dla smudge_filter_open_ssl
i diff_filter_oepnssl
. Zobacz Gist.
Twoje repozytorium z poufnymi informacjami powinno mieć plik .gitattribute (niezaszyfrowany i zawarty w repozytorium), który odwołuje się do katalogu .gitencrypt (który zawiera wszystko, czego Git potrzebuje do zaszyfrowania / odszyfrowania projektu w sposób przejrzysty) i który jest obecny na twoim lokalnym komputerze.
.gitattribute
zawartość:
* filter=openssl diff=openssl
[merge]
renormalize = true
Na koniec musisz również dodać następującą zawartość do swojego .git/config
pliku
[filter "openssl"]
smudge = ~/.gitencrypt/smudge_filter_openssl
clean = ~/.gitencrypt/clean_filter_openssl
[diff "openssl"]
textconv = ~/.gitencrypt/diff_filter_openssl
Teraz, gdy wypychasz repozytorium zawierające poufne informacje do zdalnego repozytorium, pliki zostaną zaszyfrowane w sposób przezroczysty. Podczas ściągania z komputera lokalnego, który ma katalog .gitencrypt (zawierający Twoje hasło), pliki zostaną odszyfrowane w sposób przezroczysty.
Uwagi
Powinienem zauważyć, że ten samouczek nie opisuje sposobu tylko zaszyfrowania poufnego pliku ustawień. Spowoduje to przezroczyste zaszyfrowanie całego repozytorium, które jest przesłane do zdalnego hosta VC i odszyfrowanie całego repozytorium, aby zostało całkowicie odszyfrowane lokalnie. Aby osiągnąć pożądane zachowanie, możesz umieścić poufne pliki dla jednego lub wielu projektów w jednym sensitive_settings_repo. Możesz zbadać, jak ta przezroczysta technika szyfrowania działa z podmodułami Git http://git-scm.com/book/en/Git-Tools-Submodules, jeśli naprawdę potrzebujesz, aby poufne pliki znajdowały się w tym samym repozytorium.
Użycie stałego hasła mogłoby teoretycznie prowadzić do luk w zabezpieczeniach siłowych, gdyby atakujący mieli dostęp do wielu zaszyfrowanych repozytoriów / plików. IMO, prawdopodobieństwo tego jest bardzo niskie. Jak wspomniano na dole tego samouczka, nieużywanie stałego hasła spowoduje, że lokalne wersje repozytorium na różnych maszynach będą zawsze pokazywać, że zmiany zaszły ze statusem „git”.