PostgreSQL v sistemu CentOS: varna namestitev in oddaljeni dostop
Datum objave:
Posodobljeno:
Tehnični članki > PostgreSQL v sistemu CentOS: varna namestitev in oddaljeni dostop
Stanje in varna uporaba v letu 2026
Sklep: Namestite podprto različico PostgreSQL, inicializirajte izbrano gručo, poslušajte samo na potrebnih vmesnikih ter v pg_hba.conf dovolite dostop le določenim zbirkam podatkov, vlogam in zaupanja vrednim omrežjem. Za gesla uporabite SCRAM, omrežne povezave pa zaščitite s TLS.
Kaj boste izvedeli
- Kako se povezujejo vir paketov, podatkovni imenik, inicializacija, systemd, poslušanje na vmesnikih in preverjanje pristnosti odjemalcev.
- Zakaj kombinacija
listen_addresses='*'inhost all all 0.0.0.0/0 md5izpostavi precej več, kot zahteva večina aplikacij. - Kako preizkusiti pravila dostopa, ne da bi zaklenili lokalno skrbniško povezavo.
Komu je članek namenjen? Skrbnikom, ki preprost stari priročnik za CentOS in PostgreSQL prenašajo v podprto omrežno uvedbo.
Opomba za leto 2026: Široko pravilo MD5 spodaj je ohranjeno samo kot opozorilni zgodovinski primer. PostgreSQL označuje šifrirana gesla MD5 kot opuščena; uporabite scram-sha-256, ozke obsege CIDR, vloge z najmanjšimi privilegiji, omejitve požarnega zidu, TLS, preverjene varnostne kopije in podprto glavno različico.
Varnostna opomba: Ukazi in konfiguracijski primeri iz prvotnega članka niso bili znova preizkušeni v sodobnem produkcijskem okolju. Pred uporabo v ločenem preizkusnem okolju preverite podprte različice, izdelajte varnostne kopije ter določite nadzor dostopa in postopek povrnitve.
Uradni viri
Pregled
Članek prikazuje prvotni postopek namestitve in zagona PostgreSQL v sistemu CentOS 7, vključno z oddaljenim dostopom. Ker sta uporabljeni različici zastareli, ukaze in varnostne nastavitve prilagodite podprtemu okolju.
PostgreSQL je odprtokoden in zmogljiv sistem za upravljanje relacijskih zbirk podatkov. Zmogljivost je odvisna od različice, podatkovnega modela, poizvedb, nastavitev in strojne opreme, zato jo ocenite z meritvami svoje delovne obremenitve.
Prvotni primer uporablja naslednji različici:
| Različica sistema CentOS | 7.6 (1810) |
|---|---|
| Različica strežnika PostgreSQL | 9.2.24 |
Kazalo vsebine
1. Namestitev
Ta razdelek prikazuje namestitev stare različice strežnika PostgreSQL iz distribucijskega paketa.
1-1. Namestitev strežnika PostgreSQL
Stari postopek namesti paket postgresql-server z ukazom yum in skrbniškimi pravicami. Na podprtem sistemu izberite repozitorij in različico z veljavno podporo.
[username@hostname ~]$ su -
[root@hostname ~]# yum -y install postgresql-server
2. Osnovna nastavitev
V nadaljevanju so opisani inicializacija gruče, omrežni dostop, storitev in vloge.
2-1. Sistemski uporabnik postgres
Paket v tem okolju samodejno ustvari sistemskega uporabnika postgres za izvajanje storitve in lokalna skrbniška opravila. Ne zamenjujte ga z vlogami zbirke podatkov, ki jih uporabljajo aplikacije.
Stari postopek na uporabnika postgres preklopi z naslednjim ukazom.
[root@hostname ~]# su - postgres
V uporabljenem paketu naslednjih nastavitev v .bashrc ni bilo treba dodajati ročno. Ohranjen blok prikazuje starejši način.
export PGHOME=/var/lib/pgsql
export PGDATA=/var/lib/pgsql/data
export PGHOST=localhost
V prvotnem paketu je PGDATA nastavljen na '/var/lib/pgsql/data' v enoti "/usr/lib/systemd/system/postgresql.service". Na drugi različici ali repozitoriju se lahko pot in ime enote razlikujeta.
2-2. Inicializacija podatkovne gruče
Ukaz initdb ustvari novo podatkovno gručo s kodiranjem UTF-8. Ciljni imenik mora biti prazen, v lasti uporabnika postgres in zaščiten z ustreznimi dovoljenji; ne inicializirajte ga čez obstoječe podatke.
-bash-4.2$ initdb --encoding=UNICODE
Ker je v prvotnem okolju "PGDATA=/var/lib/pgsql/data", ukaz "initdb --encoding=UNICODE" ustvari podatkovno gručo v imeniku "/var/lib/pgsql/data/".
2-3. Omrežje in preverjanje pristnosti
Za oddaljeni dostop je treba določiti poslušalne vmesnike ter ločeno dovoliti odjemalce v pg_hba.conf. Obe nastavitvi omejite na dejanske potrebe aplikacije.
[root@hostname ~]# vi /var/lib/pgsql/data/postgresql.conf
Stari primer spremeni 'postgresql.conf' na naslednji način.
#------------------------------------------------------------------------------
# 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;
Vrednost '*' pomeni poslušanje na vseh razpoložljivih vmesnikih, ne dovoljenja za vse odjemalce. Varneje je navesti samo zahtevane naslove, zlasti če je zbirka podatkov na namenskem notranjem omrežju.
Oddaljeno poslušanje je potrebno za odjemalce na drugih gostiteljih, na primer pgAdmin. Za lokalni psql prek lokalne vtičnice ali localhost ga praviloma ni treba razširiti.
Omrežno izpostavljenost zmanjšajte na potrebne vmesnike, odjemalce in vrata ter dostop dodatno omejite s požarnim zidom.
Nato spremenite 'pg_hba.conf'.
[root@hostname ~]# vi /var/lib/pgsql/data/pg_hba.conf
Stari primer na konec datoteke doda naslednje široko pravilo.
#Preverjanje pristnosti gesla od zunaj.
host all all 0.0.0.0/0 md5
Pravilo zahteva geslo MD5, vendar hkrati dovoljuje vse zbirke, vse vloge in vsak naslov IPv4. Ne uporabljajte ga kot produkcijsko privzeto nastavitev: navedite konkretno zbirko, vlogo in zaupanja vreden CIDR, uporabite SCRAM in po potrebi zahtevajte TLS. Pravila se obravnavajo po vrstnem redu, zato spremembo preizkusite v ločeni seji.
2-4. Preverjanje zagona
Po konfiguraciji preverite zagon PostgreSQL. Stari postopek preklopi na uporabnika postgres in storitev zažene neposredno z ukazom pg_ctl; v paketnem okolju ima praviloma prednost upravljanje prek systemd.
[root@hostname ~]# su - postgres
-bash-4.2$ pg_ctl start
Po uspešnem zagonu kot uporabnik postgres z ukazom psql preverite seznam zbirk in dnevnike strežnika.
-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)
Izpis treh privzetih zbirk potrjuje, da je lokalna povezava uspešna. Kodiranje in krajevne nastavitve preverite glede na zahteve aplikacije.
2-5. Nastavitev samodejnega zagona
Produkcijska zbirka podatkov se praviloma zažene samodejno prek upravljalnika storitev. Postopek je odvisen od distribucije in paketa.
Najprej preverite, ali paket že vsebuje '/usr/lib/systemd/system/postgresql.service'. Lastne enote ne ustvarjajte, dokler ne preverite paketne dokumentacije, pravilnega tipa storitve, časovnih omejitev in postopka zaustavitve. Spodnji blok je zgodovinski primer.
[root@hostname ~]# touch /etc/systemd/system/postgresql.service
[root@hostname ~]# vi /etc/systemd/system/postgresql.service
Stara lastna enota vsebuje naslednje nastavitve.
[Unit]
#Opis.
Description=PostgreSQL
#Nadzor pred in po izvedbi.
#Before=xxx.service
After=network.target
[Service]
#Imenovanje uporabnikov in skupin
User=postgres
Group=postgres
#Ko je aktivirano, nastavite stanje na Aktivirano.
Type=oneshot
RemainAfterExit=yes
#Zagon, zaustavitev in ponovno polnjenje.
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]
#Enakovredne nastavitve na ravni Runlevel 3.
WantedBy=multi-user.target
Stari postopek nato enoto omogoči z ukazom systemctl. Pred tem preverite, da se ne prekriva z enoto, ki jo zagotavlja paket.
[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. Vloge in gesla v PostgreSQL
Aplikacija naj uporablja namensko vlogo PostgreSQL z najmanjšimi potrebnimi dovoljenji, ločeno od sistemskega uporabnika in skrbniške vloge postgres. Spodnji zgodovinski primer spremeni geslo superuporabnika postgres; tega računa ne uporabljajte kot običajni račun aplikacije.
Stari primer se izvede kot uporabnik postgres.
-bash-4.2$ psql
postgres=# alter role postgres with password '(računalniško) geslo';
postgres=# \q
Opomba: nadomestite označeno vrednost z dolgim, enkratnim geslom iz odobrene shrambe skrivnosti. Za aplikacijo ustvarite ločeno vlogo in ji dodelite samo potrebne pravice.
2-7. Pravilo požarnega zidu
Oddaljeni odjemalci potrebujejo dostop do vrat PostgreSQL, privzeto 5432. Spodnji stari ukaz vrata trajno odpre v javnem območju; v produkciji pravilo omejite na zaupanja vredne izvorne naslove ali zasebno omrežje.
[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:
Vrednost 'ports: 5432/tcp' potrjuje, da je pravilo dodano, ne pa tudi, da je ustrezno omejeno. Preverite območje, izvorne naslove in omrežno pot.
Nato iz zaupanja vrednega odjemalca preizkusite pgAdmin z namensko vlogo. Preverite TLS, ime strežnika, uporabljeno pravilo pg_hba.conf in zavrnitev povezav iz nedovoljenih omrežij.
3. Povzetek
Prvotni postopek zajema namestitev PostgreSQL, inicializacijo podatkovne gruče, lokalni zagon, oddaljeni dostop, systemd, geslo in požarni zid.
Za sodobno uvedbo izberite podprto različico, uporabite namensko aplikacijsko vlogo, poslušajte samo na potrebnih vmesnikih, pravila pg_hba.conf in požarnega zidu omejite na zaupanja vredna omrežja ter omogočite SCRAM, TLS, spremljanje in preverjene varnostne kopije. Pri uporabi v novejšem okolju upoštevajte tudi opombe o različicah in varnosti na začetku članka.
