PostgreSQL na CentOS: bezpečná inštalácia a vzdialený prístup


Dátum vydania:

Aktualizované:


Technické články > PostgreSQL na CentOS: bezpečná inštalácia a vzdialený prístup

Stav a bezpečné používanie v roku 2026

Záver: Nainštalujte podporovanú verziu PostgreSQL, inicializujte určený klaster, nastavte PostgreSQL tak, aby počúval iba na potrebných rozhraniach, a v pg_hba.conf povoľte prístup len konkrétnym databázam, rolám a dôveryhodným sieťam. Pri prenose hesiel po sieti používajte SCRAM a TLS.

Čo sa naučíte

  • Ako spolu súvisia zdroj balíka, dátový adresár, inicializácia, systemd, sieťové rozhrania a overovanie klienta.
  • Prečo kombinácia listen_addresses='*' a host all all 0.0.0.0/0 md5 sprístupňuje oveľa viac, než väčšina aplikácií vyžaduje.
  • Ako otestovať pravidlá prístupu bez zablokovania lokálnej správy.

Pre koho je to určené: Administrátori, ktorí prenášajú jednoduchý prevádzkový postup pre CentOS a PostgreSQL na podporované sieťové nasadenie.

Kontext v roku 2026: Široké pravidlo MD5 uvedené nižšie zostáva iba ako historický príklad s varovaním. PostgreSQL označuje heslá šifrované pomocou MD5 za zastarané; uprednostnite scram-sha-256, úzke rozsahy CIDR, roly s najnižšími oprávneniami, pravidlá firewallu, TLS, zálohy a podporovanú hlavnú verziu.

Bezpečnostná poznámka: Príkazy a príklady konfigurácie v pôvodnom článku neboli znovu spustené v aktuálnom produkčnom prostredí. Pred ich použitím overte podporované verzie, zálohy, prístupové oprávnenia a postup obnovy v oddelenom testovacom prostredí.

Hlavné oficiálne zdroje

Prehľad

Tento historický postup opisuje inštaláciu a spustenie PostgreSQL v systéme CentOS 7 vrátane vtedajších nastavení sieťového prístupu.

PostgreSQL je otvorený relačný databázový systém s rozsiahlymi funkciami. Výber databázy má vychádzať z požiadaviek aplikácie, skúseností tímu, podpory, prevádzkových potrieb a nameraného zaťaženia, nie zo všeobecného tvrdenia o výkone.

V pôvodnom prostredí boli použité tieto verzie:

Verzia systému CentOS7.6 (1810)
Verzia PostgreSQL9.2.24

Obsah

  1. Inštalácia
  2. Historický postup konfigurácie PostgreSQL
  3. Zhrnutie

1. Inštalácia

Táto časť zachytáva inštaláciu PostgreSQL v pôvodnom prostredí CentOS 7.

1-1. Inštalácia PostgreSQL

Pôvodný systém nainštaloval PostgreSQL pomocou správcu yum pod účtom root.

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

2. Historický postup konfigurácie PostgreSQL

Nasledujú kroky od kontroly systémového používateľa po spustenie databázovej služby a povolenie vzdialeného prístupu.

2-1. Systémový používateľ postgres

Balík v tomto prostredí už vytvoril systémového používateľa postgres určeného na správu databázovej služby a spúšťanie nástroja psql. Nebolo preto potrebné vytvárať ďalší linuxový účet.

Nasledujúci príkaz sa prepne na používateľa postgres.

[root@hostname ~]# su - postgres

V použitej verzii už nebolo potrebné nastavovať premenné prostredia ručnou úpravou súboru ".bashrc". Staršie balíky sa mohli správať inak.

.bashrc


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

Jednotka "/usr/lib/systemd/system/postgresql.service" v tomto balíku nastavovala predvolenú hodnotu PGDATA na "/var/lib/pgsql/data".

2-2. Inicializácia dátového adresára

Dátový adresár PostgreSQL sa inicializuje s kódovaním Unicode. Balík zvyčajne pripraví adresár "/var/lib/pgsql/data" so správnym vlastníkom a kontextom SELinux; nevytvárajte ani nepreznačujte ho ručne bez postupu z dokumentácie daného balíka.

-bash-4.2$ initdb --encoding=UNICODE

Keďže jednotka nastavovala "PGDATA=/var/lib/pgsql/data", príkaz "initdb --encoding=UNICODE" inicializoval databázový klaster v adresári "/var/lib/pgsql/data/".

2-3. Úprava konfiguračných súborov

Ak je potrebný vzdialený prístup, nastavte sieťové rozhrania, na ktorých PostgreSQL počúva, a samostatne určte pravidlá overovania klientov.

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

Pôvodný postup upravil súbor "postgresql.conf" takto.

postgresql.conf【Pred zmenou】


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

# - Connection Settings -

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

postgresql.conf【po zmene】


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

# - Connection Settings -

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

Hodnota "*" spôsobí, že server počúva na všetkých dostupných adresách. Sama osebe databázový prístup nepovolí, ale výrazne rozšíri sieťovú plochu. Naviažte službu iba na potrebné rozhrania a skombinujte nastavenie s firewallom a úzko vymedzenými pravidlami v "pg_hba.conf".

Vzdialené počúvanie je potrebné napríklad pri prístupe z pgAdminu na inom hostiteľovi. Pri lokálnom spustení psql na databázovom serveri zvyčajne postačuje lokálne pripojenie.

Sprístupnite iba nevyhnutné databázy, roly a zdrojové siete podľa zásady najnižších oprávnení.

Pravidlá overovania klientov sa potom upravujú v súbore "pg_hba.conf".

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

Historický príklad pridal na koniec súboru nasledujúce pravidlo.

pg_hba.conf


#Overovanie hesla zvonku.
host    all             all             0.0.0.0/0            md5

Toto pravidlo zodpovedá každej adrese IPv4 a používa staršiu metódu MD5. Do aktuálneho nasadenia ho nekopírujte: obmedzte rozsah adries, použite metódu odporúčanú podporovanou verziou PostgreSQL, pri nedôveryhodnej sieti vyžadujte TLS a starostlivo otestujte poradie pravidiel.

2-4. Overenie spustenia

Po dokončení konfigurácie pôvodný postup prepol na systémového používateľa postgres a overil spustenie servera.

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

Po spustení PostgreSQL overte pod používateľom postgres aj lokálne pripojenie nástrojom psql.

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

Uvedený výstup potvrdzuje spustenie procesu v testovacom prostredí. Pred pokračovaním skontrolujte protokol PostgreSQL, či neobsahuje varovania.

2-5. Automatické spustenie služby

Spustenie pri štarte systému spravujte jednotkou služby dodanou balíkom PostgreSQL. Názvy jednotiek sa medzi distribúciami a spôsobmi balenia líšia, preto overte skutočne nainštalovanú jednotku a nepredpokladajte historický názov z CentOS 7.

Pôvodný postup skontroloval súbor "/usr/lib/systemd/system/postgresql.service" a pri jeho absencii vytvoril vlastnú jednotku "postgresql.service" pod účtom root.

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

Do súboru zapísal nasledujúcu historickú konfiguráciu.

postgresql.service


[Unit]
#Popis.
Description=PostgreSQL
#Kontrola pred a po vykonaní.
#Before=xxx.service
After=network.target

[Service]
#Označenie používateľa a skupiny
User=postgres
Group=postgres
#Po aktivácii nastavte stav na možnosť Aktivované.
Type=oneshot
RemainAfterExit=yes
#Spustenie, zastavenie a opätovné načítanie.
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]
#Ekvivalentné nastavenia úrovne Runlevel 3.
WantedBy=multi-user.target

Jednotku následne zaregistroval a povolil pomocou systemctl. V aktuálnom prostredí používajte jednotku a inicializačný postup dodané zvoleným balíkom.

[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. Nastavenie databázového hesla

Databázové roly sú odlišné od linuxových účtov. Pôvodný postup nastavil heslo predvolenej superpoužívateľskej role postgres na prístup z pgAdminu; v aktuálnej aplikácii vytvorte samostatnú rolu iba s potrebnými oprávneniami a superpoužívateľa na bežné pripojenia nepoužívajte.

Historický príkaz sa spúšťal pod systémovým používateľom postgres.

-bash-4.2$ psql
postgres=# alter role postgres with password '(počítačové) heslo';
postgres=# \q

Poznámka: Zástupnú hodnotu v poli "Heslo" nahraďte silným chráneným databázovým heslom. Nevkladajte ho do histórie shellu ani do dokumentácie.

2-7. Povolenie prístupu vo firewalle

Ak je vzdialený prístup skutočne potrebný, povoľte vo firewalle port PostgreSQL. Pôvodný CentOS 7 štandardne povoľoval iba SSH a voľba "--permanent" zachovala nové pravidlo aj po reštarte.

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

Port "5432/tcp" má byť v zozname iba vtedy, keď je vzdialený databázový prístup potrebný. Rozsah zdrojových adries vo firewalle obmedzte namiesto globálneho sprístupnenia portu.

Potom otestujte pripojenie z pgAdminu pomocou určenej databázovej role a overte aj TLS, databázu a rozsah jej oprávnení.

Pripojenie k databáze postgres na serveri centos_test v pgAdmine

3. Zhrnutie

Historický postup zahŕňa inicializáciu dátového adresára, adresy počúvania, overovanie klientov, správu služby, heslo databázovej role a pravidlo firewallu.

Aktuálne nasadenie má vychádzať z podporovanej verzie PostgreSQL a používať úzko vymedzené sieťové aj autentifikačné pravidlá, SCRAM, TLS, roly s najnižšími oprávneniami a overené zálohy.