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


Datum för offentliggörande:

Uppdaterad:


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

2026 status och säker användning

Slutsats: Installera en PostgreSQL-version som stöds, initiera det avsedda klustret, lyssna endast på nödvändiga gränssnitt och ge åtkomst i pg_hba.conf till specifika databaser, roller och betrodda nätverk. Använd SCRAM-lösenordsautentisering och TLS där lösenord korsar ett nätverk.

Vad du kommer att lära dig

  • Hur paketkälla, datakatalog, initiering, systemd, lyssningssockets och klientautentisering samverkar.
  • Varför listen_addresses='*' plus host all all 0.0.0.0/0 md5 visar mycket mer än de flesta applikationer kräver.
  • Hur man testar åtkomstregler utan att låsa lokal administration.

Vem är det här för: Administratörer som migrerar en enkel CentOS/PostgreSQL-runbook till en nätverksbaserad distribution som stöds.

2026-kontext: Den breda MD5-regeln nedan behålls endast som ett varningsbärande historiskt exempel. PostgreSQL dokumenterar MD5-krypterade lösenord som föråldrat; föredrar scram-sha-256, smala CIDR:er, minst privilegierade roller, brandväggskontroller, TLS, säkerhetskopior och en större version som stöds.

Säkerhetsanmärkning: Kommandona och konfigurationsexemplen i den ursprungliga artikeln har inte körts om i en aktuell produktionsmiljö. Verifiera versioner som stöds, säkerhetskopior, åtkomstkontroller och återställningssteg i en separat testmiljö innan du använder dem.

Viktiga officiella källor

Översikt.

Detta är den inledande konfigurationsproceduren som krävs för att installera och starta PostgreSQL på CentOS. Informationen bygger på antagandet att CentOS7 används. Avsnittet om säkerhet är också inkluderat.

PostgreSQL rekommenderas eftersom det är gratis och mycket funktionellt. Jag har hört att PostgreSQL-funktionerna brukade vara långsamma, men att de senaste funktionerna har förbättrats och är snabbare.

Versionerna är följande.

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

Innehållsförteckning

  1. installera
  2. Uppsättningsinformation
  3. sammanfattning

1. installera

Det här avsnittet beskriver hur du installerar PostgreSQL.

1-1. Installera PostgreSQL

Installera PostgreSQL med hjälp av kommandot yum. Utför arbetet som rotanvändare.

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

2. Uppsättningsinformation

Det här avsnittet beskriver konfigurationen fram till starten av PostgreSQL.

2-1. Skapa en särskild PostgreSQL-användare.

Jag ville skapa en särskild användare för att hantera PostgreSQL (använda psql-kommandon), men användaren hade redan skapats. Jag minns att jag skapade användare när jag skapade dem tidigare, så kanske har specifikationen ändrats.

Försök att byta till en användare med följande kommando.

[root@hostname ~]# su - postgres

Eftersom vissa personer kanske använder en äldre version av PostgreSQL bör det nämnas att förfarandet för att ställa in miljövariabler genom att ändra följande ".bashrc" inte heller längre är nödvändigt.

.bashrc


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

Standard PGDATA för postgres-användare verkar nu vara "/var/lib/pgsql/data". Den beskrivs som en hänvisning till "/usr/lib/systemd/system/postgresql.service".

2-2. Förberedelse av PostgreSQL-data

Skapa PostgreSQL-data. Kodningen är UNICODE. Katalogen "/var/lib/pgsql/data" skapades som standard, men de som inte har gjort det ombeds också att skapa en mapp.

-bash-4.2$ initdb --encoding=UNICODE

Eftersom "PGDATA=/var/lib/pgsql/data" är inställt i "/usr/lib/systemd/system/postgresql.service" kommer "initdb --encoding=UNICODE" att bygga en databas under "/var/lib/pgsql/". data/", DB byggs under "/var/lib/pgsql/data/".

2-3. Ändra konfigurationsfilen

Tillåt IP-adresser att komma åt PostgreSQL. Konfigurera systemet så att det är lösenordsautentiserat för icke-lokal åtkomst.

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

Ändra postgresql.conf på följande sätt.

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;

Om du väljer den här inställningen kan du få tillgång till webbplatsen från vilken IP som helst, eftersom det är en viktig del av säkerheten. Om den IP-adress som ska nås är fast, ange den fasta IP-adressen.

Den här inställningen är nödvändig när du loggar in från en annan server än den där PostgreSQL är installerat, t.ex. pgadmin. Den här inställningen behövs inte om du loggar in på servern och kör kommandot psql. (eftersom anslutningen kommer från honom själv (localhost)).

Detta är en viktig säkerhetsinställning, så minimera antalet användare som kan komma åt den så mycket som möjligt.

Ändra sedan pg_hba.conf.

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

Lägg till följande information i slutet av dokumentet.

pg_hba.conf


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

Genom att inkludera den här inställningen krävs ett lösenord när du ansluter från utsidan. Dessa områden kan utgöra allvarliga säkerhetshål om de inte är konfigurerade eller är felaktigt konfigurerade, så du bör konfigurera dem med största noggrannhet.

2-4. kontroll av uppstartsklämma

Nu när förkonfigurationen är klar kan du kontrollera att PostgreSQL startar. Eftersom databasen byggdes som en postgres-användare ska du byta till postgres-användaren innan du börjar.

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

Efter att PostgreSQL har startats, kontrollera att kommandot psql fungerar utan problem. Kör kommandot psql som postgres-användare.

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

Det är okej om du får ovanstående resultat.

2-5. Inställning för automatisk start

Även om det inte är obligatoriskt är det svårt att starta PostgreSQL varje gång servern startas om, så det är konfigurerat så att PostgreSQL startas automatiskt när servern startas. Den registrerar också kommandot systemctl. Observera att den här proceduren gäller för CentOS7, så om du använder något annat än CentOS7 måste du använda kommandot Service för att hantera detta.

Kontrollera om "/usr/lib/systemd/system/postgresql.service" finns. Om inte, skapa "postgresql.service" med hjälp av följande procedur. Kör som root-användare.

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

Följande information tillhandahålls.

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

Registrera sedan med kommandot 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. Lägga till en administrativ användare till PostgreSQL

Skapa en användare som ska användas i PostgreSQL-programmet, separat från den användare som använder PostgreSQL från Linux. Detta är användaren när du använder pgadmin osv. Jag vill ändra lösenordet för den postgres-användare som finns som standard och använda den.

Kör följande kommando som postgres-användare.

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

Obs: Ange det lösenord som du vill ställa in i fältet "Password" (Lösenord).

2-7. Borrning av brandväggar

Tillåt åtkomst till PostgreSQL-porten eftersom brandväggen (iptables för CentOS6 och tidigare) endast tillåter ssh-åtkomst som standard på CentOS7. Lägg också till alternativet "permanent" för att göra konfigurationen permanent.

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

Om det står "ports: 5432/tcp" är det OK.

Åtkomst via pgadmin. Du bör kunna logga in som postgres-användare med det lösenord som du just har angett.

pgAdmin-panel med postgres-databasen på servern centos_test

3. sammanfattning

Vi har beskrivit den första konfigurationen som krävs när PostgreSQL installeras. Den första builden av PostgreSQL kan vara svår, så läs det här avsnittet.

Tack för att du tittade på till slutet.