Come posso nascondere informazioni sensibili come password in chiaro dai registri?


10

Non ho accesso a un'installazione di Postgres, quindi non posso controllare.

Sono un ragazzo della sicurezza e vedo le password in chiaro nei registri:

create user user1 with password 'PLAINTEXT PASSWORD'

Come possono i DBA cambiare o creare le loro password senza la password in chiaro nei registri?

Ho visto questo , che afferma che è possibile utilizzare un hash md5 della password, ma anche l'hash è in chiaro. Esiste un modo migliore?


1
Se ti fidi dei tuoi DBA (perché non puoi farli rispettare), digli di usare il \passwordcomando di psql.
dezso,

Risposte:


11

Sembra che log_statementsia impostato su all.

Se si desidera impedire la visualizzazione delle password nei registri mentre log_statementè impostato su un valore che acquisisce ALTER USER/ ALTER ROLEquindi è necessario sovrascriverlo quando si cambiano le password. per esempio

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

Devi essere un superutente per farlo. Gli utenti normali non possono ignorare le regole di registrazione.

Sarebbe bello se PostgreSQL supportata segnalazione di alcuni parametri di dichiarazioni (o funzioni) come anche gli utenti di sicurezza-sensibili e autorizzati a richiedere che siano mascherati in ceppi, pg_stat_statements, pg_stat_activity, ecc Ci non è attualmente tale funzione - ma hey, sono patch benvenuto. Se sei veramente interessato, pubblica su pgsql-hacker prima di scrivere qualsiasi codice reale in modo da poter ottenere consigli e commenti. In alternativa, parla con qualcuno che fa lo sviluppo del contratto.

In generale PostgreSQL si aspetta che trattiate i log come sensibili.

Vi sono altre aree in cui la registrazione costituisce un grave problema di sicurezza. Ad esempio, alcune pgcryptofunzioni accettano i tasti crittografici come parametri.


3

La risposta attualmente accettata non ha funzionato per me su Postgres 9.4, per impedire che la password in chiaro venisse visualizzata nei registri.

Quello che ha funzionato per me invece è stato generare l'hash della password localmente:

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

Quindi inserendo quello:

ALTER USER some_user WITH UNENCRYPTED PASSWORD 'md5dcca63c0632e24746a19448231cac29c';

(Nota di sicurezza: a seconda di dove si genera quanto sopra, è possibile che si desideri impedire alla shell di accedere alla sua cronologia oppure su un sistema condiviso è possibile utilizzare un'utilità * nix che richiederà la password anziché includerla effettivamente nella comando. Mi è capitato di non essere su un sistema condiviso, quindi non era un problema per me.)


1
Molto bene. Una cosa che aggiungerei con una certa enfasi è che non si dovrebbero semplicemente impostare le password in chiaro.
dezso,

2
Sì, l'ho considerato e menzionato nella domanda. Non è ancora sufficiente per le mie esigenze.
schroeder,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.