PostgreSQL veilig installeren op CentOS met externe toegang
Datum van publicatie:
Bijgewerkt:
Artikelen > PostgreSQL veilig installeren op CentOS met externe toegang
2026 status en veilig gebruik
Conclusie: Installeer een ondersteunde PostgreSQL release, initialiseer de beoogde cluster, luister alleen op de vereiste interfaces, en geef toegang in pg_hba.conf specifieke databanken, rollen en vertrouwde netwerken. Gebruik SCRAM-wachtwoordauthenticatie en TLS waar wachtwoorden een netwerk kruisen.
Wat je zult leren
- Hoe pakketbron, data directory, initialisatie, gesystemeerd, luistercontacten, en client authenticatie interactie.
- Waarom
listen_addresses='*'plushost all all 0.0.0.0/0 md5stelt veel meer bloot dan de meeste toepassingen vereisen. - Hoe de toegangsregels te testen zonder de lokale overheid uit te sluiten.
Voor wie: Beheerders migreren een eenvoudige CentOS/PostgreSQL runbook naar een ondersteunde, netwerkdeployment.
Actualisatie voor 2026: De brede MD5-regel hieronder wordt alleen behouden als een waarschuwend historisch voorbeeld. PostgreSQL documenten MD5-versleutelde wachtwoorden als verouderd; prefer scram-sha-256, smalle CIDR's, minst-privilege rollen, firewall controls, TLS, back-ups, en een ondersteunde grote versie.
Veiligheidsopmerking: de opdrachten en configuratievoorbeelden uit het oorspronkelijke artikel zijn niet opnieuw in een moderne productieomgeving uitgevoerd. Controleer ondersteunde versies, back-ups, toegangsbeheer en terugrolstappen eerst in een afzonderlijke testomgeving.
Officiële primaire bronnen
Overzicht
Deze historische procedure installeert en initialiseert PostgreSQL op CentOS 7 en configureert vervolgens de service en netwerktoegang. Gebruik voor een nieuwe server een nog ondersteunde versie en pas de opdrachten aan de bijbehorende documentatie aan.
De netwerkconfiguratie vraagt extra aandacht: beperk luisterinterfaces, CIDR-bereiken, databases en toegestane rollen tot wat werkelijk nodig is.
De versies zijn als volgt.
| CentOS versie | 7.6 (1810) |
|---|---|
| Versie van PostgreSQL | 9.2.24 |
Inhoudsopgave
1. Installatie
Deze sectie beschrijft de procedure voor het installeren van PostgreSQL.
1-1. PostgreSQL installeren
Voer de PostgreSQL installatie uit met behulp van het yum commando. Voer het werk uit als root gebruiker.
[username@hostname ~]$ su -
[root@hostname ~]# yum -y install postgresql-server
2. Setup details
Deze sectie beschrijft de configuratie tot aan het opstarten van PostgreSQL.
2-1. Maak een speciale PostgreSQL gebruiker aan.
Het pakket maakt normaal gesproken de systeemaccount "postgres" aan om de instance met psql te beheren. Controleer of die account bestaat voordat je een andere aanmaakt.
Probeer over te schakelen naar een gebruiker met het volgende commando.
[root@hostname ~]# su - postgres
Aangezien sommige mensen mogelijk een oudere versie van PostgreSQL gebruiken, moet worden vermeld dat de procedure voor het instellen van omgevingsvariabelen door het volgende ".bashrc" te wijzigen, ook niet langer nodig is.
export PGHOME=/var/lib/pgsql
export PGDATA=/var/lib/pgsql/data
export PGHOST=localhost
De standaard PGDATA voor postgres gebruikers lijkt nu '/var/lib/pgsql/data' te zijn. Het wordt beschreven als verwijzend naar "/usr/lib/systemd/system/postgresql.service".
2-2. PostgreSQL gegevens voorbereiding
Maak PostgreSQL gegevens. De codering is UNICODE. De map "/var/lib/pgsql/data" is standaard aangemaakt, maar wie dat niet heeft gedaan wordt ook verzocht een map aan te maken.
-bash-4.2$ initdb --encoding=UNICODE
Aangezien "PGDATA=/var/lib/pgsql/data" is ingesteld in "/usr/lib/systemd/system/postgresql.service", zal "initdb --encoding=UNICODE" een DB bouwen onder "/var/lib/pgsql/ data/", de DB is gebouwd onder "/var/lib/pgsql/data/".
2-3. Wijzigen van het configuratiebestand
Sta IP adressen toe om PostgreSQL te benaderen. Stel het systeem zo in dat het geauthenticeerd is met een wachtwoord voor niet-lokale toegang.
[root@hostname ~]# vi /var/lib/pgsql/data/postgresql.conf
Wijzig 'postgresql.conf' als volgt.
#------------------------------------------------------------------------------
# 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;
De waarde "*" laat PostgreSQL op alle beschikbare interfaces luisteren, maar verleent clients niet zelfstandig toegang. Geef het adres van een bekende applicatie-interface op om onnodige blootstelling te voorkomen.
Een externe verbinding, bijvoorbeeld vanuit pgAdmin, vereist een luisteradres, een passende pg_hba.conf-regel en toestemming in de firewall. Een lokale psql-verbinding kan localhost of een Unix-socket gebruiken.
Dit is een belangrijke veiligheidsinstelling, dus beperk het aantal gebruikers dat er toegang toe heeft zo veel mogelijk.
Wijzig dan 'pg_hba.conf'.
[root@hostname ~]# vi /var/lib/pgsql/data/pg_hba.conf
Voeg de volgende informatie toe aan het einde van het document.
#Wachtwoord authenticatie van buitenaf.
host all all 0.0.0.0/0 md5
Door deze instelling op te nemen, is een wachtwoord vereist bij verbinding van buitenaf. Deze gebieden kunnen ernstige veiligheidslekken zijn als ze niet of verkeerd zijn ingesteld, dus stel ze met de laatste zorg in.
2-4. opstartcontrole
Nu de voorconfiguratie voltooid is, controleer of PostgreSQL start. Aangezien de DB werd gebouwd als een postgres gebruiker, schakel over naar de postgres gebruiker alvorens te starten.
[root@hostname ~]# su - postgres
-bash-4.2$ pg_ctl start
Nadat PostgreSQL met succes is gestart, controleer dan of het psql commando zonder problemen werkt. Voer het psql commando uit als de postgres gebruiker.
-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)
Het is OK als de bovenstaande resultaten worden geretourneerd.
2-5. Automatische opstart instelling
Hoewel het niet verplicht is, is het moeilijk om PostgreSQL te starten telkens als de server opnieuw wordt opgestart, dus wordt het zo geconfigureerd dat PostgreSQL automatisch start wanneer de server wordt opgestart. Het registreert ook op het systemctl commando. Merk op dat deze procedure is voor CentOS7, dus als u iets anders gebruikt dan CentOS7, zult u het Service commando moeten gebruiken om dit af te handelen.
Controleer of '/usr/lib/systemd/system/postgresql.service' bestaat. Zo niet, maak dan "postgresql.service" aan met de volgende procedure. Start als root gebruiker.
[root@hostname ~]# touch /etc/systemd/system/postgresql.service
[root@hostname ~]# vi /etc/systemd/system/postgresql.service
De volgende informatie wordt verstrekt.
[Unit]
#Beschrijving.
Description=PostgreSQL
#Controle voor en na de uitvoering.
#Before=xxx.service
After=network.target
[Service]
#Aanwijzing gebruiker en groep
User=postgres
Group=postgres
#Eenmaal geactiveerd, zet de status op Geactiveerd.
Type=oneshot
RemainAfterExit=yes
#Starten, stoppen en herladen.
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 gelijkwaardige instellingen.
WantedBy=multi-user.target
Vervolgens, registreer met het systemctl commando.
[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. Een administratieve gebruiker toevoegen aan PostgreSQL
Maak een gebruiker aan die binnen de PostgreSQL applicatie gebruikt wordt, los van de gebruiker die PostgreSQL vanuit Linux bedient. Dit is de gebruiker wanneer gewerkt wordt met pgadmin, enz. Ik wil het wachtwoord veranderen van de postgres gebruiker die standaard bestaat en deze gebruiken.
Voer het volgende commando uit als de postgres gebruiker.
-bash-4.2$ psql
postgres=# alter role postgres with password '(computer) wachtwoord';
postgres=# \q
Opmerking: Voer het wachtwoord in dat u wilt instellen in het veld "Wachtwoord".
2-7. Boren van firewalls
Geef toegang tot de PostgreSQL poort omdat de firewall (iptables voor CentOS6 en eerder) standaard alleen ssh toegang toestaat op CentOS7. Voeg ook de optie 'permanent' toe om de configuratie permanent te maken.
[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:
Als er 'poorten: 5432/tcp' staat, is het OK.
Toegang via pgadmin. U zou moeten kunnen inloggen als een postgres gebruiker met het wachtwoord dat u zojuist hebt ingesteld.
3. samenvatting
We hebben de initiële configuratie beschreven die nodig is wanneer PostgreSQL wordt geïnstalleerd. De initiële opbouw van PostgreSQL kan een worsteling zijn, dus raadpleeg deze sectie.
