Para autenticar exigindo senha, devemos antes, colocar como trust, alterar os usuários adicionando senha e somente então voltamos ao
pg_hba.conf para pedir senha e reiniciar o
PostgreSQL.
Depois de instalado, para configurar senha no PostgreSQL siga os passos abaixo.
1. Garanta que o usuário postgres seja o dono dele mesmo e altere o arquivo postgresql.conf
Digite o comando:
# chown -R postgres:postgres /etc/postgresql/15/main/
Altere o 15 e/ou o caminho para a tua versão.
Verifique se o Postgres está iniciado e funcionando, se não estiver inicie o Postgres:
# systemctl status postgresql.service # Debian e derivados
# systemctl start postgresql.service
No
Debian e derivados o arquivo postgresql.conf está em
/etc/postgresql/15/main/postgresql.conf, mas pode procurar na tua distribuição com o comando:
# find / | grep postgresql.conf
E depois use o teu editor de texto preferido:
# vim /etc/postgresql/15/main/postgresql.conf
Procure a linha listen_addresses (está na linha ~60), caso estiver comentada descomente-a e deixe ela assim:
listen_addresses = 'localhost, 127.0.0.1, IP_DO_SEU_SERVIDOR'
Esta linha é o começo da configuração para evitar aquele famigerado erro "o servidor está aceitando conexões TCP/IP?":
Is the server running on host "localhost" (::1) and accepting TCP/IP connections on port 5432? could not connect to server: Connection refused Is the server running on host "localhost" (fe80::1) and accepting TCP/IP connections on port 5432?
2. Altere o arquivo pg_hba.conf
No
Debian e derivados está em
/etc/postgresql/15/main/pg_hba.conf:
# vim /etc/postgresql/15/main/pg_hba.conf
Coloque tudo como trust.
# Database administrative login by Unix domain socket
local all postgres trust #peer
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust #peer
# IPv4 local connections:
host all all 127.0.0.1/32 trust #scram-sha-256
host all all 12.345.678.900/32 trust
# IPv6 local connections:
host all all ::1/128 trust #scram-sha-256
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all trust #peer
host replication all 127.0.0.1/32 trust #scram-sha-256
host replication all ::1/128 trust #scram-sha-256
A linha:
host all all 12.345.678.900/32 trust
você acrescenta na posição colocando o IP do teu servidor e coloque /32 no final independentemente se for /20, /24, etc, assim amarramos somente o IP e não a rede toda.
Salve e saia do arquivo.
Reinicie o Elefante:
# systemctl restart postgresql.service
* Debian e derivados com o famigerado systemd.
3. Altere ou crie o usuário postgres com senha
Entrando no usuário postgres que deve ter sido criado automaticamente no sistema durante a instalação do Elefante:
# sudo -i -u postgres
* mesmo estando como root use o sudo.
Caso precisar coloque o usuário postgres no arquivo
/etc/sudoers abaixo do root:
# vim /etc/sudoers
root ALL=(ALL:ALL) ALL
postgres ALL=(ALL:ALL) ALL
Salve e saia do arquivo.
Entrando no utilitário psql:
psql
postgres=#
ALTER USER postgres WITH PASSWORD 'sua_senha';
Dê enter e deverá aparece ALTER ROLE indicando que você é o cara e fez tudo certo até aqui.
Para sair digite \q.
E saia do usuário postgres:
exit
4. Configurando o pg_hba.conf
Edite o arquivo:
# vim /etc/postgresql/15/main/pg_hba.conf
Veja o exemplo de um servidor em produção, da parte final que nos interessa:
# Database administrative login by Unix domain socket
local all postgres md5 #peer
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all md5 #peer
# IPv4 local connections:
host all all 127.0.0.1/32 scram-sha-256
host all all 12.345.678.900/32 md5
# IPv6 local connections:
host all all ::1/128 scram-sha-256
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all md5 #peer
host replication all 127.0.0.1/32 scram-sha-256
host replication all ::1/128 scram-sha-256
Salve e saia do arquivo.
Reinicie o Elefante:
# systemctl restart postgresql.service
* Debian e derivados com o famigerado systemd.
E está terminado. Agora você não precisa mais deixar o Postgresql vulnerável colocando tudo como trust para poder conectar.
Teste com o
PgAdmin4 ou teste de outra forma a conexão com o banco digitando a senha que configurou com o comando ALTER USER.
Ao criar ou alterar a senha no psql o Postgres criptografa automaticamente a senha.
Deixamos scram-sha-256 onde estava originalmente como indica a documentação do Postgres e colocamos md5 onde estava peer para dar mais segurança.
Referências