Wie verstecke ich vertrauliche Informationen wie Klartextkennwörter in den Protokollen?


10

Ich habe keinen Zugriff auf eine Postgres-Installation, daher kann ich dies nicht überprüfen.

Ich bin ein Sicherheitsmann und sehe Klartext-Passwörter in den Protokollen:

create user user1 with password 'PLAINTEXT PASSWORD'

Wie können die Datenbankadministratoren ihre Kennwörter ändern oder erstellen, ohne dass das Kennwort in den Protokollen gelöscht wird?

Ich habe gesehen , diese , die Zustände Sie einen MD5 - Hash des Passworts verwenden können, aber dann die Hash ist auch im klaren. Gibt es einen besseren Weg?


1
Wenn Sie Ihren Datenbankadministratoren vertrauen (weil Sie sie nicht erzwingen können), weisen Sie sie an, den \passwordBefehl von zu verwenden psql.
Dekso

Antworten:


11

Es klingt wie log_statementeingestellt auf all.

Wenn Sie verhindern möchten, dass Kennwörter in den Protokollen angezeigt werden, während log_statementein Wert festgelegt ist, der ALTER USER/ erfasst, sollten ALTER ROLESie diesen beim Ändern von Kennwörtern überschreiben. z.B

BEGIN;
SET LOCAL log_statement = 'none';
ALTER USER ... SET PASSWORD ...;
COMMIT;

Sie müssen ein Superuser sein, um dies zu tun. Normale Benutzer können Protokollierungsregeln nicht überschreiben.

Es wäre schön, wenn PostgreSQL einige Parameter Anweisungen unterstützt das Markieren (oder sogar Funktionen) als sicherheitsempfindlich und erlaubt Benutzern zu verlangen , dass sie in Protokollen maskiert werden, pg_stat_statements, pg_stat_activity, etc. Es ist nicht eine solche Funktion - aber hey, Patches herzlich willkommen. Wenn Sie wirklich interessiert sind, posten Sie auf pgsql-Hackern, bevor Sie einen tatsächlichen Code schreiben, damit Sie Ratschläge und Kommentare erhalten. Alternativ können Sie mit jemandem sprechen, der die Vertragsentwicklung durchführt.

Im Allgemeinen erwartet PostgreSQL, dass Sie die Protokolle als vertraulich behandeln.

In anderen Bereichen ist die Protokollierung ein ernstes Sicherheitsrisiko. Beispielsweise verwenden einige pgcryptoFunktionen Kryptoschlüssel als Parameter.


3

Die aktuell akzeptierte Antwort funktionierte bei Postgres 9.4 nicht, da verhindert wurde, dass das Klartextkennwort in den Protokollen angezeigt wird.

Was für mich stattdessen funktionierte, war das lokale Generieren des Passwort-Hash:

$ username='some_user'; dbpass='some_pass'; echo -n "${dbpass}${username}" | md5sum | awk '{print "md5" $1}'
md5dcca63c0632e24746a19448231cac29c

Dann füge das ein:

ALTER USER some_user WITH UNENCRYPTED PASSWORD 'md5dcca63c0632e24746a19448231cac29c';

(Sicherheitshinweis: Abhängig davon, wo Sie die oben genannten Informationen generieren, möchten Sie möglicherweise verhindern, dass sich Ihre Shell im Verlauf protokolliert, oder Sie möchten auf einem freigegebenen System ein * nix-Dienstprogramm verwenden, das Sie zur Eingabe des Kennworts auffordert, anstatt es tatsächlich in das Verzeichnis aufzunehmen Ich befand mich zufällig nicht auf einem gemeinsam genutzten System, daher war das für mich kein Problem.)


1
Sehr gut. Eine Sache, die ich mit etwas Nachdruck hinzufügen möchte, ist, dass man einfach keine Passwörter im Klartext festlegen sollte.
Dekso

2
Ja, ich habe darüber nachgedacht und es in der Frage erwähnt. Es reicht immer noch nicht für meine Anforderungen.
schroeder
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.