Mam mały skrypt Bash, którego używam do uzyskania dostępu do Twittera i wyskakiwania powiadomienia Growl w niektórych sytuacjach. Jaki jest najlepszy sposób na przechowywanie mojego hasła w skrypcie?
Chciałbym zatwierdzić ten skrypt w repozytorium git i udostępnić go w GitHub, ale zastanawiam się, jaki jest najlepszy sposób na zachowanie mojego loginu / hasła w tajemnicy podczas tej operacji. Obecnie hasło jest przechowywane w samym skrypcie. Nie mogę go usunąć tuż przed wypchnięciem, ponieważ wszystkie stare zmiany zawierają hasło. Opracowanie bez hasła nie jest opcją. Wyobrażam sobie, że powinienem przechowywać hasło w zewnętrznym pliku konfiguracyjnym, ale pomyślałem, że sprawdzę, czy istnieje ustalony sposób, aby sobie z tym poradzić, zanim spróbuję coś połączyć.
.gitignore
Plik nie dotyczy śledzonych plików, które są już w repozytorium. Na przykładgit add -u
doda zmieniony plik, nawet jeśli jest już w.gitignore
.Podejściem może być ustawienie hasła (lub klucza API) przy użyciu zmiennej środowiskowej. To hasło jest poza kontrolą wersji.
W Bash możesz ustawić zmienną środowiskową za pomocą
Tego podejścia można używać z usługami ciągłej integracji, takimi jak Travis , kod (bez hasła) przechowywany w repozytorium GitHub może być wykonywany przez Travis (z ustawionym hasłem przy użyciu zmiennej środowiskowej).
Dzięki Bash możesz uzyskać wartość zmiennej środowiskowej, używając:
Za pomocą Pythona możesz uzyskać wartość zmiennej środowiskowej, używając:
PS: pamiętaj, że jest to nieco ryzykowne (ale jest to dość powszechna praktyka) https://www.bleepingcomputer.com/news/security/javascript-packages-caught-stealing-environment-variables/
PS2: ten
dev.to
artykuł zatytułowany „Jak bezpiecznie przechowywać klucze API” może być interesujący do przeczytania.źródło
Co powiedział Greg, ale dodam, że dobrym pomysłem jest sprawdzenie pliku
foobar.config-TEMPLATE
.Powinien zawierać przykładowe nazwy, hasła lub inne informacje o konfiguracji. Wtedy jest bardzo oczywiste, co powinien zawierać prawdziwy plik foobar.config, bez konieczności sprawdzania całego kodu, w którym wartości muszą być obecne
foobar.config
i w jakim formacie powinny mieć.Często wartości konfiguracji mogą być nieoczywiste, takie jak parametry połączenia z bazą danych i podobne rzeczy.
źródło
Radzenie sobie z hasłami w repozytoriach byłoby obsługiwane na różne sposoby, w zależności od konkretnego problemu.
1. Nie rób tego.
Sposoby unikania tego są opisane w niektórych odpowiedziach - .gitignore, config.example itp
lub 2. Udostępnij repozytorium tylko upoważnionym osobom
To znaczy ludzie, którzy mogą znać hasło.
chmod
i przychodzą na myśl grupy użytkowników; także problemy, takie jak czy pracownicy Github lub AWS powinni mieć możliwość przeglądania rzeczy, jeśli przechowujesz swoje repozytoria lub serwery na zewnątrz?lub 3. Zaszyfruj wrażliwe dane (cel tej odpowiedzi)
Jeśli chcesz przechowywać pliki konfiguracyjne zawierające poufne informacje (takie jak hasła) w miejscu publicznym, musisz je zaszyfrować. Pliki można odszyfrować po odzyskaniu z repozytorium, a nawet użyć bezpośrednio z ich zaszyfrowanej postaci.
Przykładowe rozwiązanie javascript do korzystania z zaszyfrowanych danych konfiguracyjnych pokazano poniżej.
Możesz więc odzyskać zaszyfrowany plik konfiguracyjny zapisujący zaledwie kilka wierszy Javascript.
Zauważ, że umieszczenie pliku
config.RSA
w repozytorium git skutecznie uczyniłoby go plikiem binarnym, a zatem straciłoby wiele korzyści z czegoś takiego jak Git, np. Zdolność do wybierania w nim zmian.Rozwiązaniem tego może być zaszyfrowanie par kluczy lub wartości. Możesz zaszyfrować wszystkie wartości, na przykład jeśli masz osobny plik dla poufnych informacji, lub zaszyfrować tylko wrażliwe wartości, jeśli masz wszystkie wartości w jednym pliku. (patrz poniżej)
Mój powyższy przykład jest nieco bezużyteczny dla każdego, kto chce z nim wykonać test lub jako przykład na początek, ponieważ zakłada istnienie niektórych kluczy RSA i zaszyfrowanego pliku konfiguracyjnego
config.RSA
.Oto kilka dodatkowych wierszy kodu dodanych do tworzenia kluczy RSA i pliku konfiguracyjnego do zabawy.
Tylko szyfrowanie wartości
Możesz odszyfrować plik konfiguracyjny z zaszyfrowanymi wartościami, używając czegoś takiego.
Z każdym elementem konfiguracji w osobnym wierszu (np.
Hello
IGoodbye
wyżej) Git lepiej rozpozna, co się dzieje w pliku, i zapisze zmiany w elementach informacji jako różnice, a nie pełne pliki. Git będzie również w stanie lepiej zarządzać połączeniami i typami wiśni itp.Jednak im bardziej chcesz kontrolować zmiany wersji wrażliwych informacji, tym bardziej zbliżasz się do rozwiązania BEZPIECZNA REPOZYTORIUM (2) i odejdziesz od rozwiązania ZASZYFROWANE INFORMACJE (3).
źródło
Można użyć Vault, który zabezpiecza, przechowuje i kontroluje dostęp do tokenów, haseł, certyfikatów, kluczy API itp. Na przykład Ansible używa Vault Ansible, który zajmuje się hasłami lub certyfikatami używanymi w podręcznikach
źródło
Oto technika, której używam:
W moim katalogu domowym tworzę folder o nazwie:
.config
W tym folderze umieszczam pliki konfiguracyjne dla dowolnej liczby rzeczy, które chcę uzewnętrznić hasła i klucze.
Zazwyczaj używam składni odwrotnej nazwy domeny, takiej jak:
com.example.databaseconfig
Następnie w skrypcie bash robię to:
|| exit 1
Wywołuje skrypt do wyjścia, jeśli nie jest w stanie załadować plik konfiguracyjny.Użyłem tej techniki do skryptów bash, python i ant.
Jestem dość paranoikiem i nie sądzę, że plik .gitignore jest wystarczająco solidny, aby zapobiec niezamierzonemu zameldowaniu. Co więcej, nic nie monitoruje, więc jeśli nastąpiłaby odprawa, nikt nie dowiedziałby się, jak sobie z tym poradzić.
Jeśli określona aplikacja wymaga więcej niż jednego pliku, tworzę podfolder zamiast jednego pliku.
źródło
Jeśli używasz rubinu na szynach, klejnot Figaro jest bardzo dobry, łatwy i niezawodny. Ma niski współczynnik bólu głowy również w środowisku produkcyjnym.
źródło
Ufaj ale sprawdzaj.
W
.gitignore
ten sposób wykluczono by „bezpieczny” katalog z repozytorium:Ale podzielam paranoję @ Michaela Pottera . Tak więc, aby zweryfikować .gitignore, oto test jednostkowy Pythona , który podniósłby klakson, gdyby ten „bezpieczny” katalog kiedykolwiek został wpisany. Aby sprawdzić, sprawdzany jest również legalny katalog:
źródło