2010-03-07 7 views
144

Ich habe ein kleines Bash-Skript, mit dem ich auf Twitter zugreifen und in bestimmten Situationen eine Growl-Benachrichtigung anzeigen kann. Was ist der beste Weg, um mein Passwort mit dem Skript zu speichern?Was ist die beste Vorgehensweise für den Umgang mit Passwörtern in GitHub?

Ich möchte dieses Skript auf GitHub veröffentlichen, aber ich frage mich, was der beste Weg, um mein Login/Passwort privat zu halten, während dies tun. Derzeit ist das Passwort im Skript selbst gespeichert. Ich kann es nicht direkt vor dem Push entfernen, da alle alten Commits das Passwort enthalten. Entwickeln ohne das Passwort ist keine Option. Ich stelle mir vor, dass ich das Passwort in einer externen Konfigurationsdatei speichern sollte, aber ich dachte, ich würde prüfen, ob es einen etablierten Weg gibt, damit umzugehen, bevor ich versuche, etwas zusammenzusetzen.

Antwort

172

Der typische Weg, dies zu tun, ist das Lesen der Passwort-Informationen aus einer Konfigurationsdatei. Wenn Ihre Konfigurationsdatei foobar.config heißt, dann würden Sie eine Datei mit dem Namen foobar.config.example an das Repository übergeben, die Beispieldaten enthält. Um Ihr Programm auszuführen, erstellen Sie eine lokale (nicht nachverfolgte) Datei mit dem Namen foobar.config mit Ihren echten Kennwortdaten.

Um Ihr vorhandenes Passwort aus früheren Commits herauszufiltern, finden Sie auf der GitHub-Hilfeseite unter Removing sensitive data.

+3

Btw, Sie können ein Beispiel foobar.config dem Repo hinzufügen und foobar.config dann zu der .ignore-Datei hinzufügen. Auf diese Weise wird das Beispiel foobar.config angezeigt, wenn es geklont wird und Ihre tatsächlichen Passwörter nicht zum Repo hinzugefügt werden. –

+12

@Mr_Chimp: Die '.gitignore'-Datei gilt nicht für verfolgte Dateien, die * bereits im * Repository vorhanden sind. Zum Beispiel wird 'git add -u' eine geänderte Datei hinzufügen, auch wenn sie bereits in' .gitignore' vorhanden ist. –

+1

Als Ergänzung, hier ist ein interessanter Link für den Fall, dass Sie versehentlich die Konfigurationsdatei hinzugefügt haben und sie aus dem Git-Verlauf löschen möchten: https://help.github.com/articles/remove-sensitive-data – Louhike

13

Was Greg said, aber ich würde hinzufügen, dass es eine gute Idee ist, in einer Datei foobar.config-TEMPLATE einzuchecken.

Es sollte Beispielnamen, Kennwörter oder andere Konfigurationsinformationen enthalten. Dann ist es sehr offensichtlich, was die echte foobar.config enthalten sollte, ohne in den Code zu schauen, für den Werte in foobar.config vorhanden sein müssen und welches Format sie haben sollten.

Oft können Konfigurationswerte nicht offensichtlich sein, wie Datenbankverbindungszeichenfolgen und ähnliche Dinge.

1

Wenn Sie Rubin auf Schienen verwenden, ist der Figaro Edelstein sehr gut, einfach und zuverlässig. Es hat einen geringen Kopfschmerzfaktor in der Produktionsumgebung.

+1

Kannst du ein paar Details darüber geben, was dieser Edelstein macht? Auf diese Weise könnte es (möglicherweise) als eine "Praxis" betrachtet werden, die in vielen Sprachen anwendbar ist. – mattumotu

18

Ein Ansatz kann sein, Kennwort (oder API-Schlüssel) mithilfe einer Umgebungsvariablen festzulegen. Also dieses Passwort ist außerhalb der Revisionskontrolle.

Mit Bash können Sie Umgebungsvariable

export YOUR_ENV_VARIABLE=your_password 

Dieser Ansatz kann die Verwendung mit Continuous Integration Services wie Travis, Code (ohne Passwort) werden in einem GitHub Repository gespeichert werden können durch Travis ausgeführt werden (mit Ihrem Passwort wird mit Umgebungsvariable eingestellt).

Mit Bash, Sie Wert einer Umgebungsvariablen erhalten können mit:

echo $YOUR_ENV_VARIABLE 

Mit Python können Sie Wert einer Umgebungsvariablen erhalten mit:

import os 
print os.environ['YOUR_ENV_VARIABLE'] 

PS: beachten Sie, dass es wahrscheinlich ein wenig riskant (aber es ist eine ziemlich häufige Praxis) https://www.bleepingcomputer.com/news/security/javascript-packages-caught-stealing-environment-variables/

PS2: dieser Artikel mit dem Titel "Wie sicher zu speichern API-Schlüssel" https://dev.to/bpedro/how-to-securely-store-api-keys-ab6 kann interessant sein

+0

Wie verhindert man, dass der potenzielle "unsichere" Code aus dem Inhalt der Umgebungsvariable gebildet wird? – gorootde

+0

Ich schlage vor, https://blog.travi-ci.com/2013-06-10-secure-env-in-pull-requests/ und https://docs.travi-ci.com/user zu sehen/pull-requests/# Pull-Requests-und-Security-Restrictions – scls

3

One zu lesen Vault verwenden können, die, speichert und steuert den Zugriff auf Token, Passwörter, Zertifikate, API-Schlüssel, etc. Zum Beispiel Ansible verwendet die Ansible Vault die

in Playbooks verwendet mit Passwörtern oder Zertifikaten befasst sichert
+0

Ich finde Ansible Vault zu komplex, verglichen mit dem Erstellen einer Beispielkonfigurationsdatei. – icc97

+0

@ icc97 Ja, es ist traurig wahr. Aber wir müssen diese Möglichkeit erwähnen. Meiner Meinung nach ist es für komplexere Aufgaben als die Speicherung von wenigen Passwörtern für Einzelbenutzer besser, spezialisierte Lösungen von Anfang an zu verwenden. –

Verwandte Themen