Instalar PostgreSQL no CentOS com acesso remoto seguro
Data de Publicação:
Atualizado:
Artigos > Instalar PostgreSQL no CentOS com acesso remoto seguro
status de 2026 e uso seguro
Conclusão: instale uma versão compatível do PostgreSQL, inicialize o cluster pretendido, escute apenas as interfaces necessárias e conceda acesso em pg_hba.conf a bancos de dados, funções e redes confiáveis específicas. Use autenticação de senha SCRAM e TLS onde as senhas atravessam uma rede.
O que você aprenderá
- Como a origem do pacote, o diretório de dados, a inicialização, o systemd, os soquetes de escuta e a autenticação do cliente interagem.
- Por que
listen_addresses='*'maishost all all 0.0.0.0/0 md5expõe muito mais do que a maioria dos aplicativos exige. - Como testar regras de acesso sem bloquear a administração local.
Para quem se destina: Administradores que estão migrando um runbook simples do CentOS/PostgreSQL para uma implantação em rede com suporte.
Posição de 2026: A ampla regra MD5 abaixo é mantida apenas como um exemplo histórico que traz alerta. PostgreSQL documenta senhas criptografadas em MD5 como obsoletas; prefira scram-sha-256, CIDRs estreitos, funções com privilégios mínimos, controles de firewall, TLS, backups e uma versão principal compatível.
Nota de segurança: os comandos e exemplos de configuração do artigo original não foram novamente executados num ambiente de produção atual. Antes de os aplicar, confirme as versões suportadas, as cópias de segurança, os controlos de acesso e o procedimento de reversão num ambiente de teste isolado.
Fontes primárias oficiais
Visão geral
Este procedimento histórico instala e inicializa o PostgreSQL no CentOS 7 e configura o arranque do serviço e o acesso pela rede. Num servidor novo, utilize uma versão ainda suportada e adapte os comandos à respetiva documentação.
A configuração de rede exige atenção especial: limite as interfaces de escuta, intervalos CIDR, bases de dados e funções autorizadas ao estritamente necessário.
As versões são as seguintes.
| Versão CentOS | 7.6 (1810) |
|---|---|
| Versão do PostgreSQL | 9.2.24 |
Tabela de Conteúdos
1. Instalação
Esta secção descreve o procedimento para a instalação do PostgreSQL.
1-1. Instalar o PostgreSQL
Executar a instalação do PostgreSQL através do comando yum. Efectuar o trabalho como utilizador root.
[username@hostname ~]$ su -
[root@hostname ~]# yum -y install postgresql-server
2. Detalhes de configuração
Esta secção descreve a configuração até ao início do PostgreSQL.
2-1. Criar um utilizador dedicado do PostgreSQL.
O pacote cria normalmente a conta de sistema "postgres", utilizada para administrar a instância com psql. Confirme a sua existência antes de criar outra conta.
Tente mudar para um utilizador com o seguinte comando.
[root@hostname ~]# su - postgres
Como algumas pessoas podem estar a utilizar uma versão mais antiga do PostgreSQL, deve ser mencionado que o procedimento para definir variáveis de ambiente alterando o seguinte ".bashrc" também já não é necessário.
export PGHOME=/var/lib/pgsql
export PGDATA=/var/lib/pgsql/data
export PGHOST=localhost
O PGDATA padrão para utilizadores postgres parece agora ser '/var/lib/pgsql/dados'. É descrito como referindo-se a "/usr/lib/systemd/systemd/system/postgresql.service".
2-2. Preparação de dados PostgreSQL
Criar dados PostgreSQL. A codificação é UNICODE. O directório "/var/lib/pgsql/dados" foi criado por defeito, mas aqueles que não o fizeram também são convidados a criar uma pasta.
-bash-4.2$ initdb --encoding=UNICODE
Como "PGDATA=/var/lib/pgsql/data" está definido em "/usr/lib/systemd/systemd/postgresql.service", "initdb --encoding=UNICODE" irá construir um DB em "/var/lib/pgsql/ data/", o BD é construído em "/var/lib/pgsql/data/".
2-3. Modificar o ficheiro de configuração
Permitir o acesso de endereços IP ao PostgreSQL. Criar o sistema de modo a que seja autenticado por senha para acesso não-local.
[root@hostname ~]# vi /var/lib/pgsql/data/postgresql.conf
Modificar 'postgresql.conf' como se segue.
#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------
# - Connection Settings -
#listen_addresses = 'localhost' # what IP address(es) to listen on;
#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------
# - Connection Settings -
listen_addresses = '*' # what IP address(es) to listen on;
O valor "*" coloca o PostgreSQL à escuta em todas as interfaces disponíveis, mas não concede por si só acesso aos clientes. Se a aplicação utiliza uma interface conhecida, especifique o respetivo endereço para evitar exposição desnecessária.
Uma ligação remota, por exemplo a partir do pgAdmin, requer um endereço de escuta, uma regra pg_hba.conf adequada e autorização na firewall. Uma ligação local com psql pode usar localhost ou um socket Unix.
Este é um importante cenário de segurança, por isso minimiza ao máximo o número de utilizadores que podem aceder a ele.
Em seguida, modificar 'pg_hba.conf'.
[root@hostname ~]# vi /var/lib/pgsql/data/pg_hba.conf
Acrescentar as seguintes informações no final do documento.
#Autenticação por senha a partir do exterior.
host all all 0.0.0.0/0 md5
Ao incluir esta configuração, é necessária uma palavra-passe quando a ligação é feita a partir do exterior. Estas áreas podem ser graves falhas de segurança se não forem montadas ou montadas incorrectamente, por isso, por favor, instale-as com os últimos cuidados.
2-4. verificação do bootstrap check
Agora que a pré-configuração está completa, verifique se o PostgreSQL começa. Uma vez que a BD foi construída como utilizador postgres, mude para o utilizador postgres antes de começar.
[root@hostname ~]# su - postgres
-bash-4.2$ pg_ctl start
Depois de o PostgreSQL ter sido iniciado com sucesso, verificar se o comando psql funciona sem problemas. Executar o comando psql como utilizador postgres.
-bash-4.2$ psql -l
Database List
Name | Owner | Encoding | Collation Order | Ctype(conversion operator) | Access rights
-----------+----------+------------------+--------------------+----------------------------+-----------------------
postgres | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 |
template0 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
(3 lines)
Não há problema se os resultados acima referidos forem devolvidos.
2-5. Configuração de arranque automático
Embora não seja obrigatório, é difícil iniciar o PostgreSQL sempre que o servidor é reiniciado, por isso é configurado para que o PostgreSQL arranque automaticamente quando o servidor é iniciado. Também se regista para o comando systemctl. Note que este procedimento é para o CentOS7, por isso, se estiver a utilizar algo que não o CentOS7, terá de usar o comando Service para lidar com isto.
Verificar se existe '/usr/lib/systemd/systemd/system/postgresql.service'. Caso contrário, criar 'postgresql.service' utilizando o seguinte procedimento. Funciona como utilizador root.
[root@hostname ~]# touch /etc/systemd/system/postgresql.service
[root@hostname ~]# vi /etc/systemd/system/postgresql.service
É fornecida a seguinte informação.
[Unit]
#Descrição.
Description=PostgreSQL
#Controlo pré e pós-execução.
#Before=xxx.service
After=network.target
[Service]
#Designação do utilizador e do grupo
User=postgres
Group=postgres
#Uma vez activado, definir o estado para Activado.
Type=oneshot
RemainAfterExit=yes
#Iniciar, parar e recarregar.
Environment=PGDATA=/var/lib/pgsql/data
ExecStart=/usr/bin/pg_ctl start -D /var/lib/pgsql/data
ExecStop=/usr/bin/pg_ctl stop
ExecReload=/usr/bin/pg_ctl reload
[Install]
#Configurações equivalentes ao nível de execução 3.
WantedBy=multi-user.target
A seguir, registar-se com o comando systemctl.
[root@hostname ~]# systemctl enable postgresql
[root@hostname ~]# systemctl is-enabled postgresql
enabled
[root@hostname ~]# systemctl list-unit-files --type=service | grep postgresql
postgresql.service enabled
[root@hostname ~]# systemctl daemon-reload
2-6. Acrescentar um utilizador administrativo ao PostgreSQL
Criar um utilizador a ser utilizado dentro da aplicação PostgreSQL, separado do utilizador que opera o PostgreSQL a partir do Linux. Este é o utilizador quando opera com o pgadmin, etc. Gostaria de alterar a password do utilizador postgres que existe por defeito e utilizá-la.
Executar o seguinte comando como utilizador postgres.
-bash-4.2$ psql
postgres=# alter role postgres with password 'senha (de computador)';
postgres=# \q
Nota: Introduza a palavra-passe que deseja definir no campo 'Palavra-passe'.
2-7. Perfuração de firewalls
Permitir o acesso à porta PostgreSQL porque a firewall (iptables para CentOS6 e anteriores) só permite o acesso ssh por defeito no CentOS7. Adicionar também a opção 'permanente' para tornar a configuração permanente.
[root@hostname ~]# firewall-cmd --permanent --zone=public --add-port=5432/tcp
[root@hostname ~]# firewall-cmd --reload
[root@hostname ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: dhcpv6-client http https ssh
ports: 8080/tcp 5432/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
Se diz "portos: 5432/tcp", não há problema.
Acesso através de pgadmin. Deverá ser capaz de iniciar sessão como utilizador postgres com a palavra-chave que acabou de definir.
3. resumo
Descrevemos a configuração inicial necessária quando o PostgreSQL é instalado. A construção inicial do PostgreSQL pode ser uma luta, por isso, por favor consulte esta secção.
