PostgreSQL na CentOS: bezpieczna instalacja i dostęp zdalny


Data publikacji:

Aktualizacja:


Artykuły > PostgreSQL na CentOS: bezpieczna instalacja i dostęp zdalny

Stan na rok 2026 i bezpieczne użytkowanie

Wniosek: zainstaluj obsługiwaną wersję PostgreSQL, zainicjuj zamierzony klaster, nasłuchuj tylko na wymaganych interfejsach i przyznaj dostęp w pg_hba.conf określonym bazom danych, rolom i zaufanym sieciom. Używaj uwierzytelniania hasłem SCRAM i TLS, gdy hasła przesyłane są przez sieć.

Czego się nauczysz

  • Jak współdziałają źródło pakietu, katalog danych, inicjalizacja, systemd, gniazda nasłuchiwania i uwierzytelnianie klienta.
  • Dlaczego listen_addresses='*' plus host all all 0.0.0.0/0 md5 ujawnia znacznie więcej, niż wymaga tego większość aplikacji.
  • Jak przetestować reguły dostępu bez blokowania lokalnej administracji.

Dla kogo: Administratorzy migrujący prosty element Runbook CentOS/PostgreSQL do obsługiwanego wdrożenia sieciowego.

Stanowisko na rok 2026: Ogólną zasadę MD5 przedstawioną poniżej zachowano jedynie jako historyczny przykład niosący ostrzeżenie. PostgreSQL dokumentuje hasła zaszyfrowane MD5 jako przestarzałe; preferuj scram-sha-256, wąskie CIDR, role o najniższych uprawnieniach, kontrolę zapory ogniowej, TLS, kopie zapasowe i obsługiwaną wersję główną.

Uwaga dotycząca bezpieczeństwa: polecenia i przykłady konfiguracji z pierwotnego artykułu nie zostały ponownie uruchomione we współczesnym środowisku produkcyjnym. Przed użyciem sprawdź wspierane wersje, kopie zapasowe, kontrolę dostępu i procedurę wycofania w oddzielnym środowisku testowym.

Oficjalne źródła pierwotne

Przegląd

Ta historyczna procedura instaluje i inicjalizuje PostgreSQL w systemie CentOS 7, a następnie konfiguruje uruchamianie usługi i dostęp sieciowy. Na nowym serwerze użyj nadal wspieranej wersji i dostosuj polecenia do jej dokumentacji.

Konfiguracja sieci wymaga szczególnej uwagi: ogranicz interfejsy nasłuchiwania, zakresy CIDR, bazy danych i uprawnione role do niezbędnego minimum.

Wersje są następujące.

Wersja CentOS7.6 (1810)
Wersja PostgreSQL9.2.24

Spis treści

  1. zainstalować
  2. Szczegóły konfiguracji
  3. streszczenie

1. Instalacja

W tym rozdziale opisano procedurę instalacji PostgreSQL.

1-1. Instalacja PostgreSQL

Wykonaj instalację PostgreSQL za pomocą polecenia yum. Wykonaj pracę jako użytkownik root.

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

2. Szczegóły konfiguracji

W tym rozdziale opisano konfigurację aż do uruchomienia PostgreSQL.

2-1. Utwórz dedykowanego użytkownika PostgreSQL.

Pakiet zwykle tworzy konto systemowe "postgres", używane do administrowania instancją za pomocą psql. Sprawdź jego obecność przed utworzeniem kolejnego konta.

Spróbuj przełączyć się na użytkownika za pomocą następującego polecenia.

[root@hostname ~]# su - postgres

Ponieważ niektóre osoby mogą używać starszej wersji PostgreSQL, należy wspomnieć, że procedura ustawiania zmiennych środowiskowych poprzez zmianę pliku ".bashrc" również nie jest już konieczna.

.bashrc


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

Domyślnym PGDATA dla użytkowników postgresa jest teraz '/var/lib/pgsql/data'. Jest on opisany jako odwołujący się do "/usr/lib/systemd/system/postgresql.service".

2-2. Przygotowanie danych PostgreSQL

Tworzenie danych PostgreSQL. Kodowanie to UNICODE. Katalog "/var/lib/pgsql/data" został utworzony domyślnie, ale osoby, które tego nie zrobiły, są również proszone o utworzenie katalogu.

-bash-4.2$ initdb --encoding=UNICODE

Ponieważ "PGDATA=/var/lib/pgsql/data" jest ustawione w "/usr/lib/systemd/system/postgresql.service", "initdb --encoding=UNICODE" utworzy DB w "/var/lib/pgsql/ data/", DB jest tworzony w katalogu "/var/lib/pgsql/data/".

2-3. Modyfikowanie pliku konfiguracyjnego

Zezwalaj adresom IP na dostęp do serwera PostgreSQL. Skonfiguruj system tak, aby był uwierzytelniany hasłem w przypadku dostępu nielokalnego.

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

Zmodyfikuj plik 'postgresql.conf' w następujący sposób.

postgresql.conf【Przed zmianą】


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

# - Connection Settings -

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

postgresql.conf【po zmianie】


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

# - Connection Settings -

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

Wartość "*" powoduje nasłuchiwanie PostgreSQL na wszystkich dostępnych interfejsach, lecz sama nie przyznaje klientom dostępu. Jeśli aplikacja korzysta ze znanego interfejsu, podaj jego adres i uniknij zbędnej ekspozycji.

Połączenie zdalne, na przykład z pgAdmin, wymaga adresu nasłuchiwania, odpowiedniej reguły pg_hba.conf i zezwolenia zapory. Lokalne połączenie psql może używać localhost lub gniazda Unix.

Jest to ważne ustawienie zabezpieczeń, dlatego należy jak najbardziej ograniczyć liczbę użytkowników, którzy mogą uzyskać do niego dostęp.

Następnie należy zmodyfikować plik 'pg_hba.conf'.

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

Na końcu dokumentu należy dodać następujące informacje.

pg_hba.conf


#Uwierzytelnianie hasłem z zewnątrz.
host    all             all             0.0.0.0/0            md5

Włączenie tego ustawienia powoduje, że podczas łączenia się z zewnątrz wymagane jest podanie hasła. Obszary te mogą stanowić poważne luki w zabezpieczeniach, jeśli nie zostaną skonfigurowane lub zostaną skonfigurowane niepoprawnie, dlatego należy je skonfigurować z należytą starannością.

2-4. kontrola bootstrapu

Po zakończeniu konfiguracji wstępnej sprawdź, czy PostgreSQL został uruchomiony. Ponieważ baza danych została zbudowana jako użytkownik postgres, przed rozpoczęciem należy przełączyć się na użytkownika postgres.

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

Po pomyślnym uruchomieniu PostgreSQL sprawdź, czy polecenie psql działa bez problemów. Uruchom polecenie psql jako użytkownik postgres.

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

Jeśli zostaną zwrócone powyższe wyniki, jest to w porządku.

2-5. Ustawienie automatycznego rozruchu

Mimo że nie jest to obowiązkowe, trudno jest uruchamiać PostgreSQL przy każdym ponownym uruchomieniu serwera, dlatego jest on skonfigurowany w taki sposób, aby PostgreSQL był uruchamiany automatycznie przy starcie serwera. Rejestruje się również do polecenia systemctl. Należy pamiętać, że ta procedura dotyczy systemu CentOS7, więc jeśli używasz systemu innego niż CentOS7, będziesz musiał użyć polecenia Service, aby poradzić sobie z tym problemem.

Sprawdź, czy istnieje usługa '/usr/lib/systemd/system/postgresql.service'. Jeśli nie, utwórz "postgresql.service", korzystając z poniższej procedury. Uruchom jako użytkownik root.

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

Podane są następujące informacje.

postgresql.service


[Unit]
#Opis.
Description=PostgreSQL
#Kontrola przed- i porealizacyjna.
#Before=xxx.service
After=network.target

[Service]
#Oznaczenie użytkownika i grupy
User=postgres
Group=postgres
#Po aktywacji należy ustawić status na Aktywny.
Type=oneshot
RemainAfterExit=yes
#Uruchomienie, zatrzymanie i przeładowanie.
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]
#Ustawienia równoważne Runlevel 3.
WantedBy=multi-user.target

Następnie należy zarejestrować się za pomocą polecenia 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. Dodawanie użytkownika administracyjnego do PostgreSQL

Utwórz użytkownika, który będzie używany w aplikacji PostgreSQL, oddzielnie od użytkownika, który obsługuje PostgreSQL z poziomu systemu Linux. Jest to użytkownik używany podczas pracy z programem pgadmin itp. Chciałbym zmienić hasło użytkownika postgres, który istnieje domyślnie, i użyć go.

Wykonaj następujące polecenie jako użytkownik postgres.

-bash-4.2$ psql
postgres=# alter role postgres with password '(komputer) hasło';
postgres=# \q

Uwaga: W polu "Hasło" wpisz hasło, które chcesz ustawić.

2-7. Wiercenie zapór ogniowych

Zezwól na dostęp do portu PostgreSQL, ponieważ zapora sieciowa (iptables w systemie CentOS6 i wcześniejszych) domyślnie zezwala na dostęp tylko przez ssh w systemie CentOS7. Dodaj także opcję "permanent", aby konfiguracja była trwała.

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

Jeśli widnieje na nim napis "ports: 5432/tcp", to znaczy, że wszystko jest w porządku.

Dostęp za pomocą programu pgadmin. Powinieneś być w stanie zalogować się jako użytkownik postgres z hasłem, które właśnie ustawiłeś.

Panel pgAdmin z bazą danych postgres na serwerze centos_test

3. streszczenie

Opisaliśmy wstępną konfigurację wymaganą podczas instalacji PostgreSQL. Początkowa konfiguracja PostgreSQL może być trudna, dlatego należy zapoznać się z tym rozdziałem.

■INFORMATION

Artykuły


■PROFILE

Profil


■Kontakt

Kontakt