2008-08-20 3 views
50

In Ruby on Rails-Anwendungen database.yml ist eine einfache Textdatei, in der Datenbankanmeldeinformationen gespeichert werden.Wie sichern Sie database.yml?

Wenn ich meine Rails-Anwendungen bereitstellen habe ich einen nach der Bereitstellung Rückruf in meinem Capistrano Rezepte, das in der Anwendung/config in die database.yml Datei eine symbolische Verknüpfung erstellt. Die Datei selbst wird in einem separaten Verzeichnis gespeichert, das außerhalb der standardmäßigen Capistrano/Releases-Verzeichnisstruktur liegt. Ich chmod 400 die Datei, so dass es nur für den Benutzer lesbar ist, der es erstellt hat.

  • Ist dies ausreichend, um es zu sperren? Wenn nicht, was machst du sonst noch?
  • Verschlüsselt jemand seine database.yml-Dateien?

Antwort

12

Sie wollen auch sicherstellen, dass Ihr SSH-System auch Menschen gesichert ist in als Ihre Capistrano bieten von der Protokollierung zu verhindern. Ich würde vorschlagen, den Zugriff auf passwortgeschützte Schlüsselpaare zu beschränken.

Das Verschlüsseln der .yml-Datei auf dem Server ist nutzlos, da Sie dem Bot den Schlüssel geben müssen, der gespeichert werden würde. . . auf demselben Server. Verschlüsseln Sie es auf Ihrem Computer ist wahrscheinlich eine gute Idee. Capistrano kann es vor dem Senden entschlüsseln.

1

Wenn Sie sehr besorgt über die Sicherheit der XML-Datei sind, muss ich fragen: Ist es in Ihrer Versionskontrolle gespeichert? Wenn ja, ist das ein weiterer Punkt, an dem ein Angreifer darauf kommen kann. Wenn Sie das Auschecken/Einchecken über Nicht-SSL durchführen, könnte jemand es abfangen.

Auch mit einigen Versionskontrolle (Svn, zum Beispiel), auch wenn Sie es entfernen, ist es immer noch in der Geschichte. Also, auch wenn Sie es irgendwann in der Vergangenheit entfernt haben, ist es immer noch eine gute Idee, die Passwörter zu ändern.

+0

Ich speichere nie database.yml in meinen Quellcodeverwaltungs-Repositories. –

+0

Jeder, der Geheimnisse in Dateien speichert und sie zur Versionskontrolle hochlädt, sollte verprügelt werden. –

3

Auch wenn Sie die Datei database.yml sichern, können Benutzer weiterhin schreiben, die dieselben Anmeldeinformationen verwendet, wenn sie den Code Ihrer Anwendung ändern können.

Eine andere Möglichkeit, dies zu betrachten, ist: Hat die Webanwendung zu viel Zugriff auf die Datenbank? Wenn wahr, senken Sie die Berechtigungen. Geben Sie der Anwendung nur genügend Berechtigungen. Auf diese Weise kann ein Angreifer nur das tun, was die Webanwendung tun könnte.

38

Der Weg, den ich in Angriff genommen habe ist, das Datenbankpasswort in eine Datei mit Leseberechtigungen nur für den Benutzer zu setzen, den ich meine Anwendung als ausführen. Dann benutze ich in Datenbank.yml ERB, um die Datei zu lesen:

production: 
    adapter: mysql 
    database: my_db 
    username: db_user 
    password: <%= begin IO.read("/home/my_deploy_user/.db") rescue "" end %> 

Funktioniert ein Vergnügen.

+2

Wie verbessert dies das Festlegen von Leseberechtigungen für den Anwendungsbenutzer direkt auf database.yml? –

+2

Ich habe diesen Ansatz gewählt, weil a) das Passwort nicht in der Datei database.yml steht und daher nicht der Quellcodeverwaltung unterliegt, und b) das Passwort nur in einer Datei auf dem Produktionsserver gespeichert wurde, gab es keine andere Arbeit erforderlich - keine Capistrano-Aufgaben, keine Dateien außerhalb der Hauptstruktur etc. – Olly

+1

Ich finde, dass die Datenbank.yml nicht im Repository sein sollte, da jeder Entwickler in der Lage sein sollte, seine eigene Arbeitsumgebung zu definieren. – Jaryl

10

Werfen Sie einen Blick auf diese Github-Lösung: https://github.com/NUBIC/bcdatabase. bcdatabase stellt einen verschlüsselten Speicher zur Verfügung, in dem die Kennwörter getrennt von den yaml-Dateien gespeichert werden können.

bcdatabase

bcdatabase ist eine Bibliothek und Dienstprogramm die für Ruby on Rails Anwendungen Datenbankkonfiguration Parameterverwaltung. Es bietet eine einfache Mechanismus zum Trennen der Datenbank Konfigurationsattribute von Anwendung Quellcode, so dass gibt es keine Versuchung zu überprüfen Passwörter in die Versionskontrolle System.Und es zentralisiert die Parameter für einen einzelnen Server, so dass sie problemlos zwischen mehrere Anwendungen und leicht von einem einzigen Administrator aktualisiert werden kann.

+3

Ein Update: bcdatabase lebt jetzt unter https://github.com/NUBIC/bcdatabase. –

+0

Das scheint jetzt ein totes Projekt zu sein. Gibt es eine Ersatz- oder Alternativlösung, die aktiv gewartet wird? – Streamline

+0

@Streamline - letztes Commit war 2014, das ist nicht so lange her. – slm