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='*'ochhost all all 0.0.0.0/0 md5exponerar 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-version | 7.6 (1810) |
|---|---|
| Version av PostgreSQL | 9.2.24 |
Innehållsförteckning
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.
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.
#------------------------------------------------------------------------------
# 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;
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.
#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.
[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.
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.
