Press "Enter" to skip to content

No usaras a postgres en vano

leninmhs 3

Caracas, 05 de Julio de 2012
Por: Rodolfo Sauce-Guinand
@rrodolfos
rrodolfos en gmail punto com

 

El título de este artículo puede dar la impresión de referirse a algún tema religioso, pero por
el contrario a lo que pueda pensar el lector se refiere a un tema de buenas prácticas y de
seguridad de base de datos o mas específicamente a la seguridad de las bases de datos
almacenadas en su motor de base de datos PostgreSQL.

Este artículo no pretende ser una guía de administración, ni profundizar en temas de
configuración de PostgreSQL, solo sugiere el uso correcto y buenas prácticas en relación al
usuario “postgres”.


Este documento esta basado en cualquier versión de GNU/Linux Debian, pero al ser una
recomendación de buenas prácticas debe ser aplicable a cualquier distribución de
GNU/Linux o mejor dicho a cualquier instalación de PostgreSQL.

El usuario “postgres” es un usuario exclusivamente para tareas administrativas del motor de
base de datos PostgreSQL, desde crear bases de datos, asignar privilegios hasta cualquier
otra tarea de mantenimiento que sea necesaria, que en esencia afecta en general el
comportamiento de el servidor PostgreSQL, de hecho los archivos de configuración de
PostgreSQL, que se encuentran bajo el directorio “/etc/postgresql” todos son propiedad del
usuario “postgres”, esto confirma claramente que el usuario “postgres” tiene una función o rol
puramente administrativo.

Es muy común al implantar sistemas (web o de Escritorio) que hacen uso de PostgreSQL
como motor de base de datos, al usuario “postgres” se le altere el password, tanto como
usuario del motor de base de datos, como usuario del sistema GNU/Linux, sin tomar en
cuenta que el usuario “postgres” al momento de la instalación no tiene password alguna,
¿Será un tema de seguridad?, continúe leyendo.

Para cualquier administrador de sistemas GNU/Linux en general, al poseer el acceso como
“root” por ssh o localmente, al equipo donde reside la instalación de PostgreSQL, podrá sin
necesidad de cambiar el password en ninguno de sus contextos al usuario “postgres” y solo
con hacer un switch user a postgres (su – postgres) realizar todas las tareas administrativas
relacionadas al rol de dba.

Quizás puede ocurrir que no tenga acceso por ssh o localmente a la máquina donde reside la
instalación de PostgreSQL, o peor aun, usted solo se encarga de administrar la base de
datos y no posee las credenciales del usuario root de la máquina en cuestión, ahora puede
pensar que es totalmente justificable cambiar el password del usuario “postgres” en cuanto
sitio aparezca, es decir como usuario GNU/Linux y como usuario PostgreSQL (Motor),
entonces podemos reflexionar sobre lo siguiente, si usted no posee acceso a la máquina
donde está instalado el motor de base de datos, ni localmente, ni por ssh y mucho menos
tiene las credenciales de root, ¿Para qué desea cambiarle el password en GNU/Linux al
usuario “postgres”?, pues tiene la razón, no tiene sentido alguno, solo cambie el password
del usuario “postgres” en el motor de base de datos y úselo solo con fines administrativos
con el cliente de su preferencia (psql o pgadmin).

Otro caso muy común, despues de alterar el password del usuario “postgres” donde sea que
exista, es asignarlo como propietario de cuanta base de datos exista y usarlo como usuario
regular para insertar, modificar, buscar y eliminar registros. Si, si, a muchos programadores y
en especial aquellos que no les preocupa mucho el tema de administración de base de
datos, les parece mas cómodo hacer un uso abusivo del usuario “postgres”, y adicionalmente
afirmar que todo marcha muy bien así y no hay problema alguno, la reflexión de este caso
es, ¿Qué pasa si alguien se hace con el password del usuario “postgres”?, ¿cómo?, muy
fácil, esta copiado en varios archivos de conexión a base de datos, en varios sistemas, que
quizás están en un servidor que no esta bajo su control o simplemente usted no administra,
pues de esta forma comprometerá todas las bases de datos de su sistema; Eso se resuelve
usando un usuario distinto por cada base de datos y de esta forma, en el peor de los casos,
no se comprometerán todas las bases de datos de su sistema PostgreSQL.

 

La recomendación es muy sencilla, al igual que no se debe usar el usuario “root” para
iniciar las X, y solo usarlo para administrar el sistema, de igual forma no se debe usar
el usuario “postgres” para tareas rutinarias de base de datos, ni como propietario de
base de dato alguna usada por cualquier sistema, este usuario es para administrar
exclusivamente el motor de base de datos para nada mas.

 

Descargar articulo en formato PDF.

  1. Ernesto Ernesto

    Muy interesante este artículo, todos los días se aprende algo, gracias rodolfo….

  2. Richard Richard

    Muy interesante el articulo de Rodolfo, es algo que hacia, pero gracias a este post empezare hacer bien las cosas, gracias por el post @leninmhs.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *