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.
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
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
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.
Danke für deine Vorschläge. Ich werde mal schauen ob ich die Bereiche einschränken kann.
Werden die Passwörter denn nun im Standard verschlüsselt oder muss man hier noch auf md5 oder besser umstellen?
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.
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.