PostgreSQL CentOS sistemoje: saugus diegimas ir nuotolinis prisijungimas
Paskelbimo data:
Atnaujinta:
Techniniai straipsniai > PostgreSQL CentOS sistemoje: saugus diegimas ir nuotolinis prisijungimas
2026 m. būsena ir saugus naudojimas
Išvada: įdiekite palaikomą „PostgreSQL“ leidimą, inicijuokite numatytą klasterį, klausykite tik būtinose sąsajose, o faile pg_hba.conf suteikite prieigą tik konkrečioms duomenų bazėms, vaidmenims ir patikimiems tinklams. Kai slaptažodžiai perduodami tinklu, naudokite SCRAM autentifikavimą ir TLS.
Ką išmoksite
- Kaip tarpusavyje siejasi paketo šaltinis, duomenų katalogas, inicijavimas, systemd, klausymosi lizdai ir kliento autentifikavimas.
- Kodėl
listen_addresses='*'irhost all all 0.0.0.0/0 md5atskleidžia daug daugiau, nei reikalauja dauguma programų. - Kaip išbandyti prieigos taisykles neužrakinant vietinio administravimo.
Kam tai skirta: administratoriams, perkeliantiems paprastą „CentOS“ ir „PostgreSQL“ diegimo aprašą į palaikomą, tinklu pasiekiamą aplinką.
2026 m. kontekstas: toliau pateikta plati MD5 taisyklė palikta tik kaip nesaugaus istorinio pavyzdžio aptarimas. „PostgreSQL“ MD5 slaptažodžių autentifikavimą žymi kaip nebenaudotiną; rinkitės scram-sha-256, siaurus CIDR diapazonus, mažiausių teisių vaidmenis, ugniasienės apribojimus, TLS, patikrintas atsargines kopijas ir palaikomą pagrindinę versiją.
Saugos pastaba: pradiniame straipsnyje pateiktos komandos ir konfigūracijos pavyzdžiai nebuvo pakartotinai vykdomi dabartinėje gamybos aplinkoje. Prieš taikydami, patikrinkite palaikomas versijas, atsargines kopijas, prieigos valdiklius ir atšaukimo veiksmus atskiroje bandymo aplinkoje.
Pagrindiniai oficialūs šaltiniai
Apžvalga
Šiame straipsnyje aprašyta istorinė „PostgreSQL“ diegimo ir paleidimo procedūra „CentOS 7“ sistemoje. Nuotolinės prieigos pavyzdys yra pernelyg platus gamybai, todėl greta paaiškinama, kaip jį apriboti.
„PostgreSQL“ yra brandi atvirojo kodo reliacinė duomenų bazių sistema. Našumą lemia konkreti užklausa, schema, indeksai, duomenys, konfigūracija ir aparatinė įranga, todėl bendras teiginys, kad senos versijos buvo lėtos, nėra naudingas vertinimo kriterijus.
Pradiniame pavyzdyje naudotos šios versijos:
| CentOS versija | 7.6 (1810) |
|---|---|
| "PostgreSQL" versija | 9.2.24 |
Turinys
1. Diegimas
Šiame skyriuje „PostgreSQL“ serverio paketas įdiegiamas iš „CentOS 7“ saugyklos.
1-1. „PostgreSQL“ diegimas
Įdiekite „PostgreSQL“ naudodami yum. Komandai reikia root teisių. Ši saugyklos versija šiandien nebepalaikoma, todėl naujam serveriui rinkitės palaikomą leidimą.
[username@hostname ~]$ su -
[root@hostname ~]# yum -y install postgresql-server
2. Sąrankos informacija
Šiame skyriuje inicijuojamas duomenų bazės klasteris, nustatoma prieiga ir patikrinamas serverio paleidimas.
2-1. Sistemos naudotojo patikrinimas
Paketas automatiškai sukuria postgres sistemos naudotoją, kurio teisėmis veikia serveris ir atliekamos administravimo komandos. Rankiniu būdu jo kurti nereikia.
Persijunkite į šį naudotoją:
[root@hostname ~]# su - postgres
Šiame paketiniame diegime .bashrc keisti nereikia. Toliau parodytos senesniuose aprašuose sutinkamos reikšmės tik palyginimui:
export PGHOME=/var/lib/pgsql
export PGDATA=/var/lib/pgsql/data
export PGHOST=localhost
PGDATA reikšmė /var/lib/pgsql/data nustatyta paketo systemd vienete /usr/lib/systemd/system/postgresql.service. Tiekėjo vieneto failo tiesiogiai nekeiskite; vietiniams pakeitimams naudokite systemd override.
2-2. Duomenų bazės klasterio inicijavimas
Inicializuokite naują duomenų bazės klasterį UTF-8 koduote. Paketas paruošia /var/lib/pgsql/data vietą; katalogo savininkas ir teisės turi priklausyti postgres paslaugai.
-bash-4.2$ initdb --encoding=UNICODE
Kadangi PGDATA nustatyta į /var/lib/pgsql/data, initdb šiame kataloge sukuria klasterio konfigūraciją ir pradines duomenų bazes.
2-3. Konfigūracijos failo keitimas
Nuotolinei prieigai reikia suderinti du atskirus dalykus: serverio klausymosi adresus postgresql.conf faile ir klientų autentifikavimo taisykles pg_hba.conf faile.
[root@hostname ~]# vi /var/lib/pgsql/data/postgresql.conf
Pakeiskite 'postgresql.conf' taip.
#------------------------------------------------------------------------------
# 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;
Reikšmė * liepia serveriui klausytis visose turimose IP sąsajose, tačiau pati prieigos nesuteikia. Jei klientai jungiasi tik per vieną privatų tinklą, saugiau nurodyti konkretų serverio adresą.
Nuotolinio klausymosi reikia tokiam klientui kaip pgAdmin, veikiančiam kitame kompiuteryje. Jei psql naudojamas tame pačiame serveryje, paprastai pakanka vietinio lizdo arba localhost.
Klausymosi adresą, pg_hba.conf taisykles ir ugniasienę apribokite iki mažiausios būtinos apimties.
Tada pakeiskite "pg_hba.conf".
[root@hostname ~]# vi /var/lib/pgsql/data/pg_hba.conf
Istoriniame pavyzdyje failo pabaigoje pridėta ši taisyklė:
#Slaptažodžio autentiškumo patvirtinimas iš išorės.
host all all 0.0.0.0/0 md5
Ši taisyklė reikalauja slaptažodžio, bet leidžia bet kuriam vaidmeniui bandyti jungtis prie bet kurios duomenų bazės iš bet kurio IPv4 adreso. Gamyboje jos nenaudokite: nurodykite konkrečią duomenų bazę, mažiausių teisių vaidmenį ir patikimo tinklo CIDR, o palaikomoje versijoje rinkitės SCRAM bei TLS.
2-4. Paleidimo patikrinimas
Baigę pradinę konfigūraciją patikrinkite, ar „PostgreSQL“ paleidžiamas. Kadangi klasteris priklauso postgres naudotojui, šiame istoriniame pavyzdyje serveris paleidžiamas jo teisėmis.
[root@hostname ~]# su - postgres
-bash-4.2$ pg_ctl start
Paleidę serverį, postgres naudotojo teisėmis vykdykite psql ir išvardykite duomenų bazes.
-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)
Jei rodomos postgres, template0 ir template1 duomenų bazės, vietinis prisijungimas veikia.
2-5. Automatinio paleidimo nustatymas
Kad „PostgreSQL“ būtų paleistas kartu su sistema, įjunkite paketo pateiktą systemd paslaugą. Toliau pateikta procedūra skirta „CentOS 7“.
Pirmiausia patikrinkite, ar yra /usr/lib/systemd/system/postgresql.service. Jei paketas vieneto nepateikė, istoriniame pavyzdyje sukuriamas /etc/systemd/system/postgresql.service. Naujam diegimui geriau naudoti konkrečios „PostgreSQL“ distribucijos pateiktą ir prižiūrimą vienetą.
[root@hostname ~]# touch /etc/systemd/system/postgresql.service
[root@hostname ~]# vi /etc/systemd/system/postgresql.service
Istoriniame faile įrašyta ši konfigūracija:
[Unit]
#Aprašymas.
Description=PostgreSQL
#kontrolė prieš vykdymą ir po jo.
#Before=xxx.service
After=network.target
[Service]
#Vartotojo ir grupės paskyrimas
User=postgres
Group=postgres
#Suaktyvinus būseną, nustatykite būseną Aktyvuota.
Type=oneshot
RemainAfterExit=yes
#Paleiskite, sustabdykite ir perkraukite.
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]
#3 lygmens lygiaverčiai nustatymai.
WantedBy=multi-user.target
Išsaugoję vienetą, įjunkite jį per systemctl. Jei vieneto failas buvo ką tik sukurtas ar pakeistas, daemon-reload paprastai vykdomas prieš enable arba start.
[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. Administravimo vaidmens slaptažodis
„PostgreSQL“ vaidmuo nėra tas pats, kas „Linux“ sistemos naudotojas. Istoriniame pavyzdyje nustatomas supernaudotojo postgres slaptažodis, kad būtų galima jungtis per pgAdmin. Gamybinei programai sukurkite atskirą mažiausių teisių vaidmenį ir nenaudokite postgres kasdienėms užduotims.
Šią komandą vykdykite kaip postgres sistemos naudotojas.
-bash-4.2$ psql
postgres=# alter role postgres with password '(kompiuterio) slaptažodis';
postgres=# \q
Vietoje pavyzdinio teksto įveskite ilgą, unikalų slaptažodį ir saugokite jį patikimoje paslapčių saugykloje.
2-7. Ugniasienės nustatymas
Nuotoliniam klientui ugniasienėje reikia leisti „PostgreSQL“ 5432/TCP prievadą. Toliau pateikta taisyklė atveria prievadą visai public zonai, todėl gamyboje geriau naudokite šaltinio adresu apribotą rich rule arba atskirą patikimą zoną. Parinktis --permanent išsaugo taisyklę po sistemos paleidimo iš naujo.
[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:
Jei „ports“ eilutėje rodoma 5432/tcp, taisyklė pritaikyta. Taip pat patikrinkite, kad ji būtų pasiekiama tik iš numatytų klientų tinklo.
Tada pgAdmin programoje patikrinkite prisijungimą. Istoriniame pavyzdyje naudojamas postgres vaidmuo ir ką tik nustatytas slaptažodis; gamyboje rinkitės atskirą administravimo vaidmenį ir šifruotą ryšį.
3. Santrauka
Istorinėje procedūroje įdiegiamas „PostgreSQL“ paketas, inicijuojamas klasteris, nustatomas nuotolinis klausymasis ir autentifikavimas, įjungiama paslauga bei ugniasienės prievadas.
Naujam diegimui nesinaudokite plačia 0.0.0.0/0 MD5 taisykle: apribokite adresus, duomenų bazę ir vaidmenį, naudokite SCRAM bei TLS, o programai suteikite tik būtinas teises.
Techniniai straipsniai
Peržiūrėkite visus techninius straipsnius.
Profilis
Peržiūrėkite autoriaus profilį.
Kontaktai
