4 Stimmen

Kann ActiveRecord eine Remote-Verbindung zu PostgreSQL herstellen und das DB-Passwort schützen?

Ich habe eine PostgreSQL-DB auf einem Remote-VPS-Server (CentOS 5) und ich möchte eine Rails-Anwendung, die Verbindung zu ihm von meinem lokalen Mac-Laptop zu haben. Auf meinem Laptop habe ich den ActiveRecord PostgreSQL-Adapter installiert. postgres (0.7.9.2008.01.28) .

Ich lese in der PostgreSQL-Dokumente :

Die passwortbasierten Authentifizierungsmethoden sind md5, crypt und password. Diese Methoden funktionieren ähnlich, mit Ausnahme der Art und Weise, wie das Kennwort über die Verbindung gesendet wird: MD5-gehasht, crypt-verschlüsselt bzw. Klartext.

[...]

Wenn Sie sich Sorgen über "Sniffing"-Angriffe auf Passwörter machen, sollten Sie md5 bevorzugen... Ein einfaches Passwort sollte vor allem bei Verbindungen über das offene Internet vermieden werden (es sei denn, Sie verwenden SSL, SSH oder eine andere Sicherheitsumhüllung für die Verbindung).

In einer Standard-Rails database.yml würde bei einer localhost-Verbindung etwa so aussehen...

development:
  adapter: postgresql
  database: journalapp_development
  username: xxx
  password: yyy
  host: localhost

Aber dort steht nichts über die Authentifizierungsmethode, die in den PostgreSQL-Dokumenten beschrieben wird. Gibt es eine Option, die etwas wie " auth_method: md5 "?

8voto

runako Punkte 6082

Unabhängig davon, ob Postgres diese Funktionalität zulässt, können Sie eine sichere Verbindung zu einer entfernten Datenbank herstellen, indem Sie SSH-Tunneling verwenden. Hier ist das unentgeltliche Stack Overflow Paste-In aus den Web-Dokumenten:

Stellen Sie zunächst sicher, dass ein SSH-Server auf demselben Rechner läuft wie der wie der PostgreSQL-Server läuft und dass Sie sich mit ssh als ein Benutzer anmelden können. Dann können Sie einen sicheren Tunnel aufbauen mit einem Befehl wie diesem von der Client-Rechner:

ssh -L 3333:foo.com:5432 joe@foo.com Die erste Zahl im Argument -L, 3333, ist die Portnummer Ihres Endes des Tunnels; sie kann frei gewählt werden frei wählen. Die zweite Zahl, 5432, ist das entfernte Ende des Tunnels: die Port Nummer, die Ihr Server verwendet. Der Name oder die IP-Adresse zwischen den Anschlussnummern ist der Host mit dem Datenbankserver zu dem Sie eine Verbindung herstellen wollen. In der Reihenfolge mit dem Datenbankserver zu verbinden zu verbinden, verbinden Sie sich mit Port 3333 auf dem lokalen Rechner:

psql -h localhost -p 3333 postgres To dem Datenbankserver sieht es dann so aus als ob Sie wirklich der Benutzer joe@foo.com sind, und es wird die Authentifizierungsverfahren für Verbindungen von diesem Benutzer und Benutzer und Host konfiguriert wurde. Beachten Sie, dass der Server nicht denken wird, die Verbindung sei SSL-verschlüsselt ist, da sie in Wirklichkeit nicht zwischen dem SSH-Server und dem PostgreSQL dem PostgreSQL-Server nicht verschlüsselt ist. Dies sollte kein kein zusätzliches Sicherheitsrisiko darstellen, solange solange sie sich auf demselben Rechner befinden.

Falls Sie mehr wissen wollen, können Sie es online finden, indem Sie nach "SSL tunnel" oder "postgres SSL tunnel" suchen. Hier ist die Postgres-Website, von der ich die obigen Informationen habe:

http://www.postgresql.org/docs/current/static/ssh-tunnels.html

Zusammengefasst für Rails würden Sie dann wie folgt vorgehen:

1) Führen Sie in einem Terminalfenster den ersten ssh-Befehl aus, um den Tunnel aufzubauen.

2) Stellen Sie Ihre Datenbankrequisiten wie folgt ein:

development:
  adapter: postgresql
  database: journalapp_development
  username: xxx
  password: yyy
  host: localhost
  port: 3333

1voto

Dana the Sane Punkte 14222

Ich habe im Internet nachgeschaut, und es scheint keine Option für das zu geben, wonach Sie suchen, und auch nicht für die Client-Bibliothek, libpq wird dies ebenfalls nicht erwähnt.

Ich vermute, dass dies in Ihrem Namen innerhalb von libpq ausgehandelt wird. In jedem Fall wird md5 wahrscheinlich die Standard-Authentifizierungsmethode sein.

0voto

Milen A. Radev Punkte 56874

Wenn Sie sich über einen unsicheren Kanal mit einem PostgreSQL-Server verbinden, müssen Sie brauchen zur Verschlüsselung Ihrer Kommunikation mit SSL oder (wie runako erklärt hat) SSH-Tunneling .

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