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='*' mais host all all 0.0.0.0/0 md5 expõ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 CentOS7.6 (1810)
Versão do PostgreSQL9.2.24

Tabela de Conteúdos

  1. instalar
  2. Detalhes de configuração
  3. resumo

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.

.bashrc


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.

postgresql.conf【Antes da mudança】


#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------

# - Connection Settings -

#listen_addresses = 'localhost'         # what IP address(es) to listen on;

postgresql.conf【após a mudança】


#------------------------------------------------------------------------------
# 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.

pg_hba.conf


#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.

postgresql.service


[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.

Painel do pgAdmin com a base de dados postgres no servidor centos_test

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.

■INFORMATION

Artigos


■PROFILE

Perfil


■Contacto

Contacto