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 md5espone 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 CentOS | 7.6 (1810) |
|---|---|
| Versione di PostgreSQL | 9.2.24 |
Indice dei contenuti
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.
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.
#------------------------------------------------------------------------------
# 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;
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.
#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.
[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.
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.
