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:
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?
# 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.
A linha:
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
# 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
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
Salve e saia do arquivo.
Entrando no utilitário psql:
psql postgres=# ALTER USER postgres WITH PASSWORD 'sua_senha';
Dê enter e deverá aparecer 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
# 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
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á aparecer 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:
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.
# 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
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, apesar de que, segundo a documentação do PostgreSQL, para facilitar a transição do método
md5
para o método SCRAM mais recente, se for especificado o md5 em pg_hba.conf,
mas a senha do usuário no servidor estiver criptografada para SCRAM, então a autenticação baseada em SCRAM será escolhida automaticamente.REFERÊNCIAS
- PostgreSQL: Documentation: 15: 21.1. The pg_hba.conf File
- PostgreSQL: Documentation: 15: 21.5. Password Authentication
- ALTER USER
Nenhum comentário:
Postar um comentário