¿Cómo oculto información confidencial como contraseñas de texto sin formato de los registros?

10

No tengo acceso a una instalación de Postgres, por lo que no puedo verificarlo.

Soy un tipo de seguridad y veo contraseñas de texto sin formato en los registros:

create user user1 with password 'PLAINTEXT PASSWORD'

¿Cómo pueden los DBA cambiar o crear sus contraseñas sin la contraseña en claro en los registros?

He visto esto , que indica que puede usar un hash md5 de la contraseña, pero luego el hash también está claro. ¿Hay una mejor manera?

Schroeder
fuente
1
Si confía en sus DBA (porque no puede imponerlos), dígales que usen el \passwordcomando de psql.
dezso

Respuestas:

11

Parece que log_statementestá configurado en all.

Si desea evitar que aparezcan contraseñas en los registros mientras log_statementestá configurado en un valor que captura ALTER USER/ ALTER ROLEentonces querrá anular eso al cambiar las contraseñas. p.ej

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

Debes ser un superusuario para hacer esto. Los usuarios normales no pueden anular las reglas de registro.

Sería bueno si PostgreSQL apoyado marcar algunos parámetros a los estados (o funciones) como incluso los usuarios sensibles a la seguridad y permita solicitar que estar enmascarados en leños, pg_stat_statements, pg_stat_activity, etc. No hay actualmente ninguna de esas características - pero bueno, son parches bienvenidos. Si está realmente interesado, publique en pgsql-hackers antes de escribir cualquier código real para que pueda obtener consejos y comentarios. Alternativamente, hable con alguien que haga contratos de desarrollo.

En general, PostgreSQL espera que trates los registros como confidenciales.

Hay otras áreas donde el registro es un problema de seguridad grave. Por ejemplo, algunas de las pgcryptofunciones toman claves criptográficas como parámetros.

Craig Ringer
fuente
3

La respuesta actualmente aceptada no funcionó para mí en Postgres 9.4, para evitar que la contraseña de texto sin formato aparezca en los registros.

En cambio, lo que funcionó para mí fue generar el hash de contraseña localmente:

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

Luego insertando eso:

ALTER USER some_user WITH UNENCRYPTED PASSWORD 'md5dcca63c0632e24746a19448231cac29c';

(Nota de seguridad: dependiendo de dónde genere lo anterior, es posible que desee evitar que su shell inicie sesión en su historial, o en un sistema compartido, puede usar una utilidad * nix que solicitará la contraseña en lugar de incluirla en el comando. Por casualidad no estaba en un sistema compartido, así que eso no fue una preocupación para mí.)

robut
fuente
1
Muy bien. Una cosa que agregaría con énfasis es que uno simplemente no debe establecer contraseñas en texto sin formato.
dezso
2
Sí, lo consideré y lo mencioné en la pregunta. Todavía no es suficiente para mis requisitos.
schroeder