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='*'ahost all all 0.0.0.0/0 md5sprí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 CentOS | 7.6 (1810) |
|---|---|
| Verzia PostgreSQL | 9.2.24 |
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.
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.
#------------------------------------------------------------------------------
# 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;
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.
#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.
[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í.
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.
Technické články
Profil
Kontakt
