PostgreSQL Datenbank absichern

Hallo, ich habe mir die letzten Tage ein paar Gedanken um die Sicherheit meiner “neuen” PostgreSQL 11.8 Datenbank gemacht. In erster Linie um Benutzer/Gruppen und Passwortsicherheit.

Ich habe vor, bestimmte Gruppen mit Leserecht zu erstellen und dann Benutzter in diese Gruppe zuzuordnen. Oder sollte man jeden Benutzer so justieren, dass es genau passt. Viele Benutzer werden es nicht. 10-20 evtl. Aktuell sind sind es postgres und ein weiterer mit Leserecht auf eine Datenbank.

md5 oder scram-sha-256
Ich habe gelesen, dass Postgres die Passwörter mit md5 abspeichert. Macht es Sinn, hier auf scram-sha-256 zu wechseln. Die Datenbank läuft nur im internen Netzwerk. Die pg_hba.conf steht aktuell noch auf trust, so wie es nach der Installation war.

Was ist also sinnvoll. Wo sollte man nachjustieren? Der Zugriff über Verwaltungstools(pgAdmin usw.), ODBC, PHP sollte weiterhin möglich sein oder hat das nichts damit zutun?

Diesen Artikel hatte ich unter anderem gelesen. Gibt aber wenig auf deutsch was auch gut erklärt wird.

https://www.dbconcepts.at/postgresql-aendern-des-passwort-hash-algorithmus/

Mich würde aber interessieren, was ihr aus der Praxis empfehlen könnt.

Danke

Das ist falsch, per Default nach der Installation gilt kein trust.

:thinking:Da müsste ich morgen kurz in die Doku schauen. Dann habe ich es wohl schon geändert.
Es ist warm und spät. Entschuldigung :innocent:

kein Poblem, Prost!

argh, Antwort ist zu kurz. Also: 1234567890…

Guten Morgen.
So, habe jetzt mal nachgesehen. Hatte wohl aus der vorherigen PostgreSQL 12 Installation etwas durcheinander, oder so. Zur Sicherheit hier gleich der Auszug aus der aktuellen Datei:

TYPE DATABASE USER ADDRESS METHOD

IPv4 local connections:

host all all 127.0.0.1/32 password
host all all 0.0.0.0/0 password

IPv6 local connections:

host all all ::1/128 password

Allow replication connections from localhost, by a user with the

replication privilege.

host replication all 127.0.0.1/32 password
host replication all ::1/128 password

Gruß

Ich fummel hier gleich noch die popstgresql.conf hinterher. Ich habe die mal auf das gekürzt, was aktiv ist. Hoffe ich habe alles erwischt:

- Connection Settings -

listen_addresses = ‘*’ # what IP address(es) to listen on;
max_connections = 100 # (change requires restart)

- Memory -

shared_buffers = 128MB # min 128kB
dynamic_shared_memory_type = windows # the default is the first option

- Checkpoints -

max_wal_size = 1GB
min_wal_size = 80MB

- Where to Log -

log_file_mode = 0640 # creation mode for log files,
log_timezone = ‘CET’

- Locale and Formatting -

datestyle = ‘iso, dmy’

#intervalstyle = ‘postgres’
timezone = ‘CET’

lc_messages = ‘German_Germany.1252’ # locale for system error message
# strings
lc_monetary = ‘German_Germany.1252’ # locale for monetary formatting
lc_numeric = ‘German_Germany.1252’ # locale for number formatting
lc_time = ‘German_Germany.1252’ # locale for time formatting

default configuration for text search

default_text_search_config = ‘pg_catalog.german’

Hallo Steve6,

Um die Sicherheit zu erhöhen, würde ich listen_addresses einschränken.
Zum Beispiel: llisten_addresses = ‘localhost,192.168.1.202’
Damit “lauscht” PostgreSQL nur auf den Adressen 127.0.0.1 und 192.168.1.202

Würde ich einschränken auf Dein Heimnetzwerk. Zum Beispiel:
host all all 192.168.1.0/24 password
Damit dürfen sich alle User aus dem Netzwerkbereich 192.168.1.0 … 192.168.1.255 anmelden.

Grüßle
Jürgen

Hallo Jürgen,

Danke für deine Vorschläge. Ich werde mal schauen ob ich die Bereiche einschränken kann. :+1:
Werden die Passwörter denn nun im Standard verschlüsselt oder muss man hier noch auf md5 oder besser umstellen?

Hallo zusammen,

ich benötige noch einmal eure Hilfe, um mein Verständnis für die PostgreSQL-Sicherheit zu erweitern.

Wo und wie (verschlüsselt?) speichert die Datenbank die Passwörter der Benutzer? Im Netz wird auf eine Datei pgpass hingewiesen. Diese habe ich auch gefunden. Sie steht im Profilordner. Dort enthalten ist das Passwort des Benutzers postgres. Das ist sehr ungünstig. So wie ich das hier verstehe, ist die Datei aber nur optional und kann gelöscht werden?

Weiter habe ich jetzt weitere Nutzer angelegt. Wenn ich mich mit diesen in pgAdmin anmelde, dann können sich diese Benutzer auch die Datenbankstruktur der Dantenbanken ansehen, die vom Benutzer postgres erstellt wurden. Ist das normal? Abfragen auf Tabellen gehen allerdings nicht.

Nachtrag: Die Datei pgpass ist wohl für pgAgent nötig.

Danke für eure Hilfe.

Die Passwörter der DB-User werden in der DB in pg_shadow gespeichert, per md5 gehasht. Die .pgpass kann das Passwort für die Verbindung zur DB enthalten, das ist aber nur für die Verbindung des Clients. Unter richtigen Betriebssystemen, also Linux, hat nur der Eigentümer darauf Zugriffsrechte (und root, der Allmächtige).

Zugriffe auf das public-schema gehen für alle - es sei denn, man verbietet das. Zugriffe auf einzelne Datenbanken können noch via der pg_hba.conf eingeschränkt werden.

Super, vielen Dank für die Antwort. Jetzt wird mir einiges klar. Wichtig ist auch, das die Passwörter gehasht werden. Das ist aber dann ja gegeben.

Vielen Dank.

Der md5 hash wird heutzutage nicht mehr als sehr sicher angesehen. Bei einer Neu-Installation sollte statt md5 besser scram-sha-256 verwendet werden.

Das nachträglich umzustellen geht, ist aber ein wenig umständlich.

Das geht/ist unter Windows genauso.

Danke für die Antworten. Gibt es für diese Umstellung weiterführende Infos? Möglichst auf deutsch?