Installare PostgreSQL su CentOS con accesso remoto sicuro


Data di pubblicazione:

Aggiornato:


Articoli > Installare PostgreSQL su CentOS con accesso remoto sicuro

2026 stato e uso sicuro

Conclusione: Installare una versione PostgreSQL supportata, inizializzare il cluster previsto, ascoltare solo sulle interfacce richieste e concedere l'accesso in pg_hba.conf a specifici database, ruoli e reti di fiducia. Utilizzare l'autenticazione password SCRAM e TLS dove le password attraversano una rete.

Cosa imparerai

  • Come la sorgente dei pacchetti, la directory dei dati, l'inizializzazione, il sistema, le prese di ascolto e l'autenticazione client interagiscono.
  • Perché? listen_addresses='*' più host all all 0.0.0.0/0 md5 espone molto più che la maggior parte delle applicazioni richiedono.
  • Come testare le regole di accesso senza bloccare l'amministrazione locale.

Destinatari: Gli amministratori migrano un semplice runbook CentOS/PostgreSQL a una distribuzione supportata e in rete.

Nota di aggiornamento (2026): L'ampia regola MD5 qui sotto è conservata solo come esempio storico portante. PostgreSQL documenta le password crittografate MD5 come deprecato; preferi scram-sha-256, CIDRs stretti, ruoli meno privati, controlli firewall, TLS, backup e una versione principale supportata.

Nota di sicurezza: i comandi e gli esempi di configurazione dell'articolo originale non sono stati rieseguiti in un ambiente di produzione moderno. Prima di applicarli, verifica versioni supportate, backup, controlli di accesso e procedura di rollback in un ambiente di prova isolato.

Fonti primarie ufficiali

Panoramica

Questa procedura storica installa e inizializza PostgreSQL su CentOS 7, quindi configura l’avvio del servizio e l’accesso di rete. Per un nuovo server usate una versione ancora supportata e adeguate i comandi alla relativa documentazione.

La configurazione di rete richiede particolare attenzione: limitate interfacce di ascolto, intervalli CIDR, database e ruoli autorizzati allo stretto necessario.

Le versioni sono le seguenti.

Versione CentOS7.6 (1810)
Versione di PostgreSQL9.2.24

Indice dei contenuti

  1. installare
  2. Dettagli di configurazione
  3. sintesi

1. Installazione

Questa sezione descrive la procedura di installazione di PostgreSQL.

1-1. Installazione di PostgreSQL

Eseguire l'installazione di PostgreSQL con il comando yum. Eseguire il lavoro come utente root.

[username@hostname ~]$ su -
[root@hostname ~]# yum -y install postgresql-server

2. Dettagli di configurazione

Questa sezione descrive la configurazione fino all'avvio di PostgreSQL.

2-1. Creare un utente PostgreSQL dedicato.

Il pacchetto crea normalmente l’account di sistema "postgres", usato per amministrare l’istanza con psql. Verificatene la presenza prima di crearne un altro.

Provate a passare a un utente con il seguente comando.

[root@hostname ~]# su - postgres

Poiché alcuni potrebbero utilizzare una versione precedente di PostgreSQL, va detto che la procedura per impostare le variabili d'ambiente modificando il seguente ".bashrc" non è più necessaria.

.bashrc


export PGHOME=/var/lib/pgsql
export PGDATA=/var/lib/pgsql/data
export PGHOST=localhost

Il PGDATA predefinito per gli utenti postgres sembra ora essere '/var/lib/pgsql/data'. Viene descritto come un riferimento a "/usr/lib/systemd/system/postgresql.service".

2-2. Preparazione dei dati PostgreSQL

Creare dati PostgreSQL. La codifica è UNICODE. La cartella "/var/lib/pgsql/data" è stata creata per impostazione predefinita, ma a chi non l'ha fatto viene richiesto di creare una cartella.

-bash-4.2$ initdb --encoding=UNICODE

Poiché "PGDATA=/var/lib/pgsql/data" è impostato in "/usr/lib/systemd/system/postgresql.service", "initdb --encoding=UNICODE" costruirà un DB sotto "/var/lib/pgsql/ data/", il DB è costruito sotto "/var/lib/pgsql/data/".

2-3. Modifica del file di configurazione

Consentire agli indirizzi IP di accedere a PostgreSQL. Impostare il sistema in modo che sia autenticato con password per l'accesso non locale.

[root@hostname ~]# vi /var/lib/pgsql/data/postgresql.conf

Modificare 'postgresql.conf' come segue.

postgresql.conf【Prima del cambiamento】


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

# - Connection Settings -

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

postgresql.conf【dopo la modifica】


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

# - Connection Settings -

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

Il valore "*" mette PostgreSQL in ascolto su tutte le interfacce disponibili, ma non concede da solo l’accesso ai client. Se l’applicazione usa un’interfaccia nota, specificatene l’indirizzo per evitare un’esposizione inutile.

Una connessione remota, per esempio da pgAdmin, richiede un indirizzo di ascolto, una regola pg_hba.conf appropriata e il permesso del firewall. Una connessione locale con psql può usare localhost o un socket Unix.

Si tratta di un'importante impostazione di sicurezza, quindi riducete il più possibile il numero di utenti che possono accedervi.

Quindi modificare 'pg_hba.conf'.

[root@hostname ~]# vi /var/lib/pgsql/data/pg_hba.conf

Aggiungete le seguenti informazioni alla fine del documento.

pg_hba.conf


#Autenticazione della password dall'esterno.
host    all             all             0.0.0.0/0            md5

Includendo questa impostazione, viene richiesta una password quando ci si connette dall'esterno. Queste aree possono rappresentare una grave falla nella sicurezza se non vengono configurate o se vengono configurate in modo errato, pertanto vi invitiamo a configurarle con la massima cura.

2-4. controllo bootstrap

Una volta completata la preconfigurazione, verificare che PostgreSQL si avvii. Poiché il DB è stato creato come utente postgres, passare all'utente postgres prima di iniziare.

[root@hostname ~]# su - postgres
-bash-4.2$ pg_ctl start

Dopo che PostgreSQL è stato avviato con successo, verificate che il comando psql funzioni senza problemi. Eseguire il comando psql come utente 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)

Se vengono restituiti i risultati di cui sopra, non c'è problema.

2-5. Impostazione dell'avvio automatico

Anche se non è obbligatorio, è difficile avviare PostgreSQL a ogni riavvio del server, quindi è configurato in modo che PostgreSQL si avvii automaticamente all'avvio del server. Si registra anche al comando systemctl. Si noti che questa procedura si riferisce a CentOS7, quindi se si utilizza qualcosa di diverso da CentOS7, è necessario utilizzare il comando Service.

Controllare se '/usr/lib/systemd/system/postgresql.service' esiste. In caso contrario, creare 'postgresql.service' utilizzando la seguente procedura. Eseguire come utente root.

[root@hostname ~]# touch /etc/systemd/system/postgresql.service
[root@hostname ~]# vi /etc/systemd/system/postgresql.service

Vengono fornite le seguenti informazioni.

postgresql.service


[Unit]
#Descrizione.
Description=PostgreSQL
#Controllo pre e post esecuzione.
#Before=xxx.service
After=network.target

[Service]
#Designazione di utenti e gruppi
User=postgres
Group=postgres
#Una volta attivato, impostare lo stato su Attivato.
Type=oneshot
RemainAfterExit=yes
#Avvio, arresto e ricarica.
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]
#Impostazioni equivalenti al Runlevel 3.
WantedBy=multi-user.target

Quindi, registrarsi con il 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. Aggiunta di un utente amministrativo a PostgreSQL

Creare un utente da utilizzare all'interno dell'applicazione PostgreSQL, separato dall'utente che gestisce PostgreSQL da Linux. Questo è l'utente quando si opera con pgadmin, ecc. Vorrei cambiare la password dell'utente postgres che esiste di default e utilizzarla.

Eseguire il seguente comando come utente postgres.

-bash-4.2$ psql
postgres=# alter role postgres with password '(computer) password';
postgres=# \q

Nota: Inserire la password che si desidera impostare nel campo "Password".

2-7. Foratura dei firewall

Consentire l'accesso alla porta PostgreSQL perché il firewall (iptables per CentOS6 e precedenti) consente solo l'accesso ssh per impostazione predefinita su CentOS7. Aggiungere anche l'opzione "permanente" per rendere la configurazione 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 è scritto "porte: 5432/tcp", è tutto a posto.

Accesso tramite pgadmin. Dovreste essere in grado di accedere come utente postgres con la password appena impostata.

Dashboard di pgAdmin con il database postgres sul server centos_test

3. sintesi

Abbiamo descritto la configurazione iniziale richiesta al momento dell'installazione di PostgreSQL. La creazione iniziale di PostgreSQL può essere difficile, quindi fate riferimento a questa sezione.

■INFORMATION

Articoli


■PROFILE

Profilo


■Contatti

Contatti