PostgreSQL 馃悩 : Cambiar m茅todos de autenticaci贸n en Debian y derivados
Localizar el archivo de configuraci贸n pg_hba.conf:
Por lo general, el archivo 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
Mi lema es