PostgreSQL uz CentOS: droša instalēšana un attālināta piekļuve


Publikācijas datums:

Atjaunināts:


Tehniskie raksti > PostgreSQL uz CentOS: droša instalēšana un attālināta piekļuve

2026. gada statuss un droša lietošana

Galvenais: instalējiet atbalstītu PostgreSQL laidienu, inicializējiet paredzēto klasteri, klausieties tikai nepieciešamajās saskarnēs un failā pg_hba.conf piešķiriet piekļuvi tikai noteiktām datubāzēm, lomām un uzticamiem tīkliem. Ja paroles tiek pārsūtītas tīklā, izmantojiet SCRAM autentifikāciju un TLS.

Ko jūs uzzināsiet

  • Kā mijiedarbojas pakotnes avots, datu direktorijs, inicializācija, systemd, klausīšanās ligzdas un klienta autentifikācija.
  • Kāpēc listen_addresses='*' un host all all 0.0.0.0/0 md5 atklāj daudz vairāk, nekā prasa lielākā daļa lietojumprogrammu.
  • Kā pārbaudīt piekļuves noteikumus, nebloķējot vietējo administrāciju.

Kam tas paredzēts: administratoriem, kuri vienkāršu CentOS un PostgreSQL uzstādīšanas aprakstu pielāgo atbalstītai, tīklam pieslēgtai videi.

2026. gada konteksts: tālāk redzamais plašais MD5 noteikums ir saglabāts tikai kā vēsturisks piemērs ar brīdinājumu. PostgreSQL dokumentācijā ar MD5 šifrētas paroles ir atzītas par novecojušām; dodiet priekšroku scram-sha-256, šauriem CIDR diapazoniem, lomām ar minimālām privilēģijām, ugunsmūra ierobežojumiem, TLS, dublējumkopijām un atbalstītai PostgreSQL pamatversijai.

Drošības piezīme. Sākotnējā rakstā esošās komandas un konfigurācijas piemēri nav atkārtoti izpildīti pašreizējā ražošanas vidē. Pirms to lietošanas pārbaudiet atbalstītās versijas, dublējumus, piekļuves vadīklas un atcelšanas darbības atsevišķā testa vidē.

Galvenie oficiālie avoti

Pārskats

Šajā vēsturiskajā aprakstā parādītas sākotnējās darbības, ar kurām PostgreSQL instalē un palaiž sistēmā CentOS 7. Tajā aplūkoti arī svarīgākie drošības iestatījumi.

PostgreSQL ir atvērtā pirmkoda relāciju datubāze ar plašām iespējām. Datubāzi izvēlieties atbilstoši lietotnes prasībām, komandas pieredzei, atbalsta un ekspluatācijas nosacījumiem un izmērītai darba slodzei, nevis vispārīgiem apgalvojumiem par veiktspēju.

Aprakstā izmantotās versijas:

CentOS versija7.6 (1810)
PostgreSQL versija9.2.24

Satura rādītājs

  1. Instalēšana
  2. Vēsturiskā PostgreSQL konfigurēšana
  3. Kopsavilkums

1. Instalēšana

Šajā sadaļā parādīta vēsturiskā PostgreSQL instalēšanas procedūra.

1-1. PostgreSQL instalēšana

Vēsturiskajā CentOS vidē PostgreSQL instalēja ar yum, izmantojot administratora kontu.

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

2. Vēsturiskā PostgreSQL konfigurēšana

Šajā sadaļā aprakstīti iestatījumi, kas tika veikti pirms PostgreSQL palaišanas.

2-1. Pārslēgšanās uz PostgreSQL sistēmas kontu

Pakotne jau bija izveidojusi sistēmas kontu postgres, ar kuru varēja pārvaldīt datubāzi un izpildīt psql komandas. Atsevišķs konts nebija jāveido.

Pārslēdzieties uz šo kontu ar tālāk norādīto komandu.

[root@hostname ~]# su - postgres

Vecākās instalācijās vides mainīgos mēdza norādīt failā ".bashrc", taču šajā pakotnes versijā tas vairs nebija nepieciešams.

.bashrc


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

Kontam postgres noklusējuma PGDATA bija "/var/lib/pgsql/data"; šo vērtību varēja pārbaudīt failā "/usr/lib/systemd/system/postgresql.service".

2-2. PostgreSQL datu direktorija inicializēšana

Inicializējiet PostgreSQL datu direktoriju ar UTF-8 kodējumu. Pakotne parasti sagatavo "/var/lib/pgsql/data" ar pareizo īpašnieku un SELinux marķējumu; neveidojiet un nepārmarķējiet šo direktoriju manuāli, nepārbaudot izmantotās pakotnes dokumentāciju.

-bash-4.2$ initdb --encoding=UNICODE

Tā kā failā "/usr/lib/systemd/system/postgresql.service" bija iestatīts "PGDATA=/var/lib/pgsql/data", inicializēšana izveidoja datubāzes klasteri direktorijā "/var/lib/pgsql/data/".

2-3. Konfigurācijas failu pielāgošana

Lai atļautu attālinātus savienojumus, jānorāda klausīšanās saskarnes un klientu autentifikācijas noteikumi. Nelokāliem savienojumiem izmantojiet drošu autentifikāciju.

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

Vēsturiskajā piemērā "postgresql.conf" tika mainīts šādi.

postgresql.conf【Pirms pārmaiņām】


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

# - Connection Settings -

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

postgresql.conf【pēc izmaiņām】


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

# - Connection Settings -

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

Šis iestatījums liek serverim klausīties visās pieejamajās adresēs. Tas pats par sevi nepiešķir piekļuvi datubāzei, tomēr paplašina tīkla ekspozīciju. Norādiet tikai vajadzīgās saskarnes un papildiniet iestatījumu ar resursdatora ugunsmūri un šauri definētiem pg_hba.conf noteikumiem.

Attālinātai piekļuvei, piemēram, no pgAdmin, ir jāatļauj atbilstoša tīkla saskarne. Lokāli izpildot psql tajā pašā serverī, visu saskarņu klausīšanās nav vajadzīga.

Šis ir svarīgs drošības iestatījums, tāpēc atļaujiet tikai nepieciešamos avotus un lietotājus.

Pēc tam pielāgojiet "pg_hba.conf".

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

Vēsturiskajā piemērā faila beigās tika pievienots šāds noteikums.

pg_hba.conf


#Paroles autentificēšana no ārpuses.
host    all             all             0.0.0.0/0            md5

Šis noteikums atbilst jebkurai IPv4 adresei un izmanto novecojušo MD5 autentifikāciju. Nekopējiet to mūsdienīgā izvietojumā: ierobežojiet adrešu diapazonu, izmantojiet atbalstītajai PostgreSQL versijai ieteikto autentifikācijas metodi, neuzticamā tīklā pieprasiet TLS un rūpīgi pārbaudiet noteikumu secību.

2-4. Palaišanas pārbaude

Pēc sākotnējās konfigurēšanas pārbaudiet, vai PostgreSQL tiek palaists. Tā kā datubāzes klasteris inicializēts ar kontu postgres, pirms palaišanas pārslēdzieties uz šo kontu.

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

Kad PostgreSQL ir palaists, ar kontu postgres izpildiet psql un pārbaudiet datubāzu sarakstu.

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

Šāda izvade apstiprina, ka testa servera process ir palaists. Pirms turpināt, pārbaudiet, vai PostgreSQL žurnālā nav brīdinājumu.

2-5. Automātiskās palaišanas iestatīšana

Automātiskai palaišanai izmantojiet PostgreSQL pakotnes nodrošināto systemd servisa vienību. Vienības nosaukums atšķiras atkarībā no izplatījuma un pakotnes, tāpēc pārbaudiet instalēto vienību, nevis pieņemiet, ka tai ir vēsturiskais CentOS 7 nosaukums.

Vēsturiskajā procedūrā pārbaudīja, vai pastāv "/usr/lib/systemd/system/postgresql.service". Ja faila nebija, administratora kontā izveidoja "postgresql.service" ar tālāk norādīto saturu.

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

Servisa vienībā tika norādīti šādi iestatījumi.

postgresql.service


[Unit]
#Apraksts.
Description=PostgreSQL
#Kontrole pirms un pēc izpildes.
#Before=xxx.service
After=network.target

[Service]
#Lietotāja un grupas apzīmējums
User=postgres
Group=postgres
#Pēc aktivizēšanas iestatiet statusu Aktivizēts.
Type=oneshot
RemainAfterExit=yes
#Uzsākt, apturēt un atkārtoti ielādēt.
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]
#Runlevel 3 līdzvērtīgi iestatījumi.
WantedBy=multi-user.target

Pēc tam servisa vienību iespējoja un pārbaudīja ar 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. PostgreSQL administratora paroles iestatīšana

PostgreSQL lomas nav tas pats, kas Linux sistēmas konti. Vēsturiskajā piemērā noklusējuma datubāzes lomai postgres tika iestatīta parole, lai ar to varētu pieslēgties, piemēram, no pgAdmin.

Ar sistēmas kontu postgres tika izpildītas šādas komandas.

-bash-4.2$ psql
postgres=# alter role postgres with password '(datora) parole';
postgres=# \q

Piezīme: aizstājiet vietturi ar stipru un droši glabātu datubāzes paroli; neizpaudiet to čaulas vēsturē vai dokumentācijā.

2-7. Ugunsmūra iestatīšana

Ja attālināta piekļuve datubāzei tiešām ir vajadzīga, ugunsmūrī atļaujiet PostgreSQL portu. Vēsturiskajā CentOS 7 piemērā pastāvīgais noteikums tika pievienots ar firewall-cmd; vecākās CentOS versijās izmantoja iptables.

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

Pārbaudiet, vai 5432/tcp ir redzams tikai tad, ja attālināta piekļuve tiešām nepieciešama, un ierobežojiet atļautos avotus, nevis atveriet portu visam tīklam.

Pēc tam pārbaudiet savienojumu no pgAdmin ar lomu postgres un tikko iestatīto paroli.

pgAdmin informācijas panelis ar postgres datubāzi serverī centos_test

3. Kopsavilkums

Vēsturiskās darbības aptver datu direktorija inicializēšanu, klausīšanās adreses, klientu autentifikāciju, servisa pārvaldību, paroli un ugunsmūra piekļuvi. Mūsdienīgā vidē sāciet ar atbalstītu PostgreSQL versiju un piemērojiet tīkla un autentifikācijas noteikumiem minimālo privilēģiju principu.