50 Stimmen

Wie sichern Sie database.yml?

Innerhalb von Ruby on Rails-Anwendungen ist database.yml eine einfache Textdatei, in der Datenbankanmeldeinformationen gespeichert werden.

Wenn ich meine Rails-Anwendungen bereitstelle, habe ich einen After-Deploy-Callback in meinem Capistrano Rezept, der einen symbolischen Link im /config-Verzeichnis der Anwendung auf die Datei database.yml erstellt. Die Datei selbst ist in einem separaten Verzeichnis gespeichert, das außerhalb der Standard Capistrano /releases Verzeichnisstruktur liegt. Ich habe die Datei mit chmod 400 versehen, damit sie nur von dem Benutzer gelesen werden kann, der sie erstellt hat.

  • Reicht das aus, um sie zu sperren? Wenn nicht, was können Sie sonst noch tun?
  • Verschlüsselt jemand seine database.yml-Dateien?

39voto

Olly Punkte 7602

Ich habe das Problem so gelöst, dass ich das Datenbankpasswort in eine Datei mit Leseberechtigung nur für den Benutzer, unter dem ich meine Anwendung ausführe, abgelegt habe. Dann verwende ich in database.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 hervorragend.

2 Stimmen

Inwiefern ist dies eine Verbesserung gegenüber dem Festlegen von Leseberechtigungen für den Anwendungsbenutzer direkt in database.yml?

2 Stimmen

Ich habe mich für diesen Ansatz entschieden, weil a) das Passwort nicht in database.yml enthalten ist und daher nicht in die Versionskontrolle übertragen wird und b) außer der Aufnahme des Passworts in eine Datei nur auf dem Produktionsserver keine weiteren Arbeiten erforderlich waren - keine Capistrano-Aufgaben, keine Dateien außerhalb der Hauptstruktur usw.

1 Stimmen

Ich bin der Meinung, dass die database.yml gar nicht erst in das Repository aufgenommen werden sollte, da jeder Entwickler die Möglichkeit haben sollte, seine eigene Arbeitsumgebung zu definieren.

12voto

James A. Rosen Punkte 62226

Sie sollten auch sicherstellen, dass Ihr SSH-System gut gesichert ist, um zu verhindern, dass sich jemand einloggt als Ihr Capistrano-Bot. Ich würde vorschlagen, den Zugriff auf passwortgeschützte Schlüsselpaare zu beschränken.

Die Verschlüsselung der .yml-Datei auf dem Server ist nutzlos, da Sie dem Bot den Schlüssel geben müssen, der auf demselben Server gespeichert ist. Es ist wahrscheinlich eine gute Idee, die Datei auf Ihrem Rechner zu verschlüsseln. Capistrano kann sie vor dem Senden entschlüsseln.

10voto

slm Punkte 13836

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

bcdatabase

bcdatabase ist eine Bibliothek und ein Dienstprogramm das die Datenbankkonfiguration ermöglicht Parameterverwaltung für Ruby on Rails Anwendungen bietet. Es bietet einen einfachen Mechanismus zum Trennen von Datenbank Konfigurationsattributen von Quellcode der Anwendung, so dass es keine Versuchung gibt, Passwörter Passwörter in das Versionskontrollsystem System zu überprüfen. Und es zentralisiert die Parameter für einen einzelnen Server zentralisiert, so dass sie leicht von mehreren mehreren Anwendungen gemeinsam genutzt und von einem einzigen Administrator aktualisiert werden können.

0 Stimmen

Dieses Projekt scheint jetzt tot zu sein. Gibt es einen Ersatz oder eine alternative Lösung, die aktiv gepflegt wird?

0 Stimmen

@Streamline - die letzte Übertragung war 2014, das ist noch nicht so lange her.

6voto

Rajkaran Mishra Punkte 4014

Besser spät als nie, ich poste meine Antwort, da die Frage immer noch aktuell ist. Für Rails 5.2+ ist es möglich, alle sensiblen Informationen mit einer verschlüsselten Datei credentials.yml.enc zu sichern.

Rails speichert Geheimnisse in config/credentials.yml.enc die verschlüsselt ist und daher nicht direkt bearbeitet werden kann. Wir können die Anmeldeinformationen mit folgendem Befehl bearbeiten:

$ EDITOR=nano rails credentials:edit

secret_key_base: 3b7cd727ee24e8444053437c36cc66c3
production_dbpwd: my-secret-password

Auf diese Geheimnisse kann man nun mit Rails.application.credentials .

Ihre database.yml wird also wie folgt aussehen:

production:
  adapter: mysql
  database: my_db
  username: db_user
  password: <%= Rails.application.credentials.production_dbpwd %>

Sie können mehr darüber lesen aquí

3voto

Peter Stuifzand Punkte 4908

Selbst wenn Sie die Datei database.yml sichern, können andere Personen mit denselben Anmeldedaten schreiben, wenn sie den Code Ihrer Anwendung ändern können.

Eine andere Betrachtungsweise ist: Hat die Webanwendung zu viel Zugriff auf die Datenbank. Wenn ja, senken Sie die Zugriffsrechte. Geben Sie der Anwendung gerade genug Berechtigungen. Auf diese Weise kann ein Angreifer nur das tun, wozu die Webanwendung in der Lage wäre.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X