PostgreSQL 🐘 : Cambiar métodos de autenticación en Debian y derivados
_Localizar el Archivo de Configuración
Por lo general, el archivo de configuración pg_hba.conf
se encuentra en el directorio de datos de PostgreSQL. La ubicación más común es: /etc/postgresql/<version>/main/pg_hba.conf
.
También podemos conectarnos a Postgres y ejecutar el comando SHOW hba_file
para obtener la ruta del archivo de configuración:
$ sudo -u postgres psql
psql (15.8 (Debian 15.8-0+deb12u1))
Type "help" for help.
postgres=# SHOW hba_file;
hba_file
-------------------------------------
/etc/postgresql/15/main/pg_hba.conf
(1 row)
Métodos de Autenticación Comunes
Antes de editar algún archivo, veamos que métodos de autenticación tenemos disponibles en Postgres:
trust
: permite la conexión sin requerir contraseña. Todos los usuarios pueden conectarse sin autenticación. No es un método recomendado, al menos si se trata de entornos de desarrollo o para redes segura que no requieren autenticación. Ejemplo:
1
host all all 127.0.0.1/32 trust
password
: requiere que los usuarios proporcionen una contraseña en texto plano. No se recomienda al ser menos seguro, ya que la contraseña se envía sin encriptar. Ejemplo:
1
host all all 127.0.0.1/32 password
md5
: requiere una contraseña encriptada. Este es uno de los métodos más comunes ya que proporciona una combinación de seguridad y facilidad de uso. Ejemplo:
1
host all all 127.0.0.1/32 md5
scram-sha-256
: es un método de autenticación más moderno y seguro que md5 que utiliza el algoritmo de hashing SCRAM. Proporciona una serie de mejoras en términos de seguridad y es ampliamente recomendado para entornos que requieren una mayor protección de contraseñas. Ejemplo:
1
host all all 127.0.0.1/32 scram-sha-256
peer
: es el método de autenticación basada en el sistema operativo. EL nombre de usuario de Postgre debe coincidir con el nombre del usuario del sistema (útil en entornos controlados donde se confía en la autenticación del sistema). Ejemplo:
1
host all all 127.0.0.1/32 peer
Formato del Archivo
Cada línea del archivo pg_hba.conf
tiene el siguiente formato:
1
# Tipo de conexión | Base de datos | Usuario | Dirección | Método de autenticación
Secciones Comunes
En el archivo pg_hba.conf
vamos a encontrar las siguientes secciones para modificar:
Local Connections
Se aplican a conexiones a través de Unix sockets. Ejemplo:
1
local all all 127.0.0.1/32 scram-sha-256
- Base de datos:
all
significa que se aplica a todas las bases de datos. - Usuario:
all
significa que se aplica a todos los usuarios. - Método de autenticación: En este ejemplo, se utiliza
scram-sha-256
, que es un método seguro.
Database Administrative Login by Unix
Permite el acceso administrativo al usuario postgres
a través de sockets Unix. Ejemplo:
1
local all postgres peer
IPv4 Local Connections
Se aplica a conexiones desde direcciones IPv4. Ejemplo:
1
host all all 127.0.0.1/32 md5
- Base de datos:
all
significa que se aplica a todas las bases de datos. - Usuario:
all
significa que se aplica a todos los usuarios. - Dirección:
127.0.0.1/32
permite conexiones desde el localhost. - Método de autenticación: En este ejemplo, se utiliza
md5
, que requiere una contraseña encriptada.
Cambiar el Método de Autenticación para el Super Usuario Postgres
Antes de cambiar el método de autenticación para el superusuario postgres
, necesitamos establecer una contraseña primero.
1. Acceder a PostgreSQL sin contraseña
Dado que el método actual es peer
, podemos conectarnos a PostgreSQL sin necesidad de una contraseña desde el terminal:
1
sudo -u postgres psql
2. Establecer una contraseña para el usuario postgres
Una vez dentro del prompt de psql
, establecemos una contraseña con el siguiente comando:
1
ALTER USER postgres WITH PASSWORD 'nueva_password';
Luego salimos del prompt de psql escribiendo \q
.
3. Cambiar el método en el archivo pg_hba.conf
Abrimos el archivo pg_hba.conf
con el editor de preferencia:
1
sudo nano /etc/postgresql/15/main/pg_hba.conf
Aquí, modificamos las líneas que especifican el método de autenticación. Por ejemplo, cambiar de peer
en la sección de usuario administrativo con algunos de los valores que mencionamos:
Luego guardamos los cambios, y reiniciamos el servicio:
1
sudo service postgresql restart
4. Probar la conexión con el superusuario
Ahora ya podemos conectarnos utilizando la contraseña establecida:
1
psql -U postgres -d postgres -W