Installera PostgreSQL på CentOS med säker fjärråtkomst


Publicerad:

Uppdaterad:


Tekniska artiklar > Installera PostgreSQL på CentOS med säker fjärråtkomst

Status 2026 och säker användning

Slutsats: Installera en PostgreSQL-version som stöds och begränsa lyssningsadresser, pg_hba.conf och brandvägg till avsedda databaser, roller och betrodda klientnät. Använd SCRAM-autentisering och TLS för fjärranslutningar.

Det här går artikeln igenom

  • Hur paketkälla, datakatalog, initiering, systemd, lyssningsadresser och klientautentisering samverkar.
  • Varför kombinationen listen_addresses='*' och host all all 0.0.0.0/0 md5 exponerar betydligt mer än de flesta applikationer behöver.
  • Hur åtkomstregler kan testas utan att den lokala administrationen låses ute.

Målgrupp: Administratörer som anpassar en äldre driftinstruktion för CentOS och PostgreSQL till en nätverksansluten installation som stöds.

Läge 2026: Den breda MD5-regeln nedan är endast ett historiskt varnande exempel. PostgreSQL har markerat stödet för MD5-krypterade lösenord som föråldrat. Föredra scram-sha-256, snäva CIDR-intervall, roller med minsta privilegium, brandvägg, TLS, säkerhetskopior och en huvudversion som fortfarande stöds.

Säkerhetsinformation: Kommandona och konfigurationsexemplen har inte testats på nytt i en aktuell produktionsmiljö. Verifiera supportstatus, säkerhetskopior, åtkomstkontroller och återställning i en separat testmiljö.

Viktiga officiella källor

Översikt

Artikeln dokumenterar installation, initiering och fjärråtkomst för PostgreSQL i en äldre CentOS 7-miljö.

PostgreSQL är ett öppet relationsdatabassystem med omfattande funktioner. Prestanda måste bedömas för den aktuella versionen, datamodellen och arbetslasten.

Originalmiljön använde följande versioner.

CentOS-version7.6 (1810)
Version av PostgreSQL9.2.24

Innehållsförteckning

  1. Installation
  2. Grundkonfiguration
  3. Sammanfattning

1. Installation

Det här avsnittet beskriver paketinstallationen i originalmiljön.

1-1. Installera PostgreSQL

I den äldre CentOS-miljön installerades postgresql-server med yum och root-behörighet.

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

2. Grundkonfiguration

Det här avsnittet beskriver initiering, nätverksåtkomst, startkontroll och tjänstehantering.

2-1. Kontrollera tjänstekontot postgres

Paketinstallationen skapade redan operativsystemkontot postgres, som används för att äga databasklustret och köra administrativa kommandon lokalt.

Byt till kontot med följande kommando.

[root@hostname ~]# su - postgres

Den bevarade .bashrc-konfigurationen nedan behövdes inte för det installerade paketet, men visar miljövariabler som förekom i äldre installationer.

.bashrc


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

I originalpaketet anger /usr/lib/systemd/system/postgresql.service PGDATA till /var/lib/pgsql/data.

2-2. Initiera databasklustret

Initiera ett nytt databaskluster med UTF-8-kodning. Datakatalogen måste vara tom, ägas av postgres och skyddas med korrekta behörigheter innan kommandot körs.

-bash-4.2$ initdb --encoding=UNICODE

Eftersom tjänsten anger PGDATA=/var/lib/pgsql/data initierar kommandot klustret i den katalogen.

2-3. Konfigurera lyssning och klientåtkomst

Fjärråtkomst kräver både en lyssningsadress i postgresql.conf och en matchande autentiseringsregel i pg_hba.conf. Begränsa båda till de gränssnitt, databaser, roller och klientnät som behövs.

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

Originalartikeln ändrar postgresql.conf enligt följande.

postgresql.conf【Före förändring】


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

# - Connection Settings -

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

postgresql.conf【efter ändringen】


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

# - Connection Settings -

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

Värdet "*" får PostgreSQL att lyssna på alla tillgängliga gränssnitt; det ger inte ensamt klienten åtkomst. Ange hellre serverns avsedda adresser.

Fjärrlyssning behövs exempelvis för pgAdmin på en annan dator, men inte för en lokal psql-session via Unix-socket.

Exponera aldrig databasen bredare än nödvändigt och samordna lyssningsadresser, pg_hba.conf, brandvägg och TLS.

Redigera därefter pg_hba.conf.

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

Originalartikeln lägger till följande breda regel sist i filen.

pg_hba.conf


#Lösenordsautentisering utifrån.
host    all             all             0.0.0.0/0            md5

Regeln matchar alla IPv4-adresser, databaser och roller och använder den äldre metoden md5. Använd inte regeln oförändrad: ersätt den med snäva CIDR-intervall och specifika roller och databaser samt en aktuell autentiseringsmetod.

2-4. Kontrollera att PostgreSQL startar

När grundkonfigurationen är klar byter originalproceduren till operativsystemkontot postgres och startar databasen.

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

Kontrollera därefter som postgres att psql kan ansluta och lista databaserna.

-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)

Utdata ska innehålla standarddatabaserna postgres, template0 och template1 utan anslutningsfel.

2-5. Automatisk start

PostgreSQL ska normalt hanteras av den systemd-enhet som paketet tillhandahåller och aktiveras för automatisk start om tjänsten ska köras efter omstart.

Originalartikeln kontrollerar /usr/lib/systemd/system/postgresql.service och skapar annars den egna enheten nedan. På en aktuell installation bör vendor-enheten användas och anpassas med en systemd-override.

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

Den bevarade enhetsfilen innehåller följande.

postgresql.service


[Unit]
#Beskrivning.
Description=PostgreSQL
#Kontroll före och efter utförandet.
#Before=xxx.service
After=network.target

[Service]
#Användar- och gruppbeteckning
User=postgres
Group=postgres
#När den är aktiverad, sätts statusen till Aktiverad.
Type=oneshot
RemainAfterExit=yes
#Starta, stoppa och ladda om.
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]
#Motsvarande inställningar för Runlevel 3.
WantedBy=multi-user.target

Därefter aktiverades enheten med systemctl och systemd-konfigurationen lästes in på nytt.

[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. Ange lösenord för administratörsrollen

PostgreSQL-rollen postgres är en databassuperanvändare och skiljer sig från operativsystemkontot med samma namn. Originalproceduren anger ett lösenord för rollen för administration via pgAdmin. Använd separata roller med minsta privilegium för applikationer.

Kör följande kommando lokalt som operativsystemkontot postgres.

-bash-4.2$ psql
postgres=# alter role postgres with password 'Lösenord (dator)';
postgres=# \q

Obs: Ersätt platshållaren med ett unikt, starkt lösenord som hanteras i en betrodd hemlighetslösning.

2-7. Begränsa brandväggsåtkomsten

Originalproceduren öppnar PostgreSQLs standardport 5432 permanent i firewalld. Begränsa i stället regeln till de betrodda klientnät som behöver ansluta och exponera aldrig porten direkt mot internet.

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

Kontrollera att 5432/tcp visas endast i den avsedda zonen och att källbegränsningen är korrekt.

Verifiera sedan från en betrodd klient att pgAdmin kan ansluta med den avsedda databasrollen och att anslutningen använder TLS.

pgAdmin-panel med postgres-databasen på servern centos_test

3. Sammanfattning

Den historiska proceduren installerar PostgreSQL 9.2, initierar databasklustret och konfigurerar fjärråtkomst, systemd, en administratörsroll och brandväggen.

I en aktuell miljö ska en version som stöds användas, och lyssningsadresser, pg_hba.conf, roller, SCRAM, TLS och brandvägg ska tillsammans begränsa åtkomsten till minsta nödvändiga omfattning.