Installera PostgreSQL på CentOS med säker fjärråtkomst
Datum för offentliggörande:
Uppdaterad:
Tekniska artiklar > Installera PostgreSQL på CentOS med säker fjärråtkomst
2026 status och säker användning
Slutsats: Installera en PostgreSQL-version som stöds, initiera det avsedda klustret, lyssna endast på nödvändiga gränssnitt och ge åtkomst i pg_hba.conf till specifika databaser, roller och betrodda nätverk. Använd SCRAM-lösenordsautentisering och TLS där lösenord korsar ett nätverk.
Vad du kommer att lära dig
- Hur paketkälla, datakatalog, initiering, systemd, lyssningssockets och klientautentisering samverkar.
- Varför
listen_addresses='*'plushost all all 0.0.0.0/0 md5visar mycket mer än de flesta applikationer kräver. - Hur man testar åtkomstregler utan att låsa lokal administration.
Vem är det här för: Administratörer som migrerar en enkel CentOS/PostgreSQL-runbook till en nätverksbaserad distribution som stöds.
2026-kontext: Den breda MD5-regeln nedan behålls endast som ett varningsbärande historiskt exempel. PostgreSQL dokumenterar MD5-krypterade lösenord som föråldrat; föredrar scram-sha-256, smala CIDR:er, minst privilegierade roller, brandväggskontroller, TLS, säkerhetskopior och en större version som stöds.
Säkerhetsanmärkning: Kommandona och konfigurationsexemplen i den ursprungliga artikeln har inte körts om i en aktuell produktionsmiljö. Verifiera versioner som stöds, säkerhetskopior, åtkomstkontroller och återställningssteg i en separat testmiljö innan du använder dem.
Viktiga officiella källor
Översikt.
Detta är den inledande konfigurationsproceduren som krävs för att installera och starta PostgreSQL på CentOS. Informationen bygger på antagandet att CentOS7 används. Avsnittet om säkerhet är också inkluderat.
PostgreSQL rekommenderas eftersom det är gratis och mycket funktionellt. Jag har hört att PostgreSQL-funktionerna brukade vara långsamma, men att de senaste funktionerna har förbättrats och är snabbare.
Versionerna är följande.
| CentOS-version | 7.6 (1810) |
|---|---|
| Version av PostgreSQL | 9.2.24 |
Innehållsförteckning
1. installera
Det här avsnittet beskriver hur du installerar PostgreSQL.
1-1. Installera PostgreSQL
Installera PostgreSQL med hjälp av kommandot yum. Utför arbetet som rotanvändare.
[username@hostname ~]$ su -
[root@hostname ~]# yum -y install postgresql-server
2. Uppsättningsinformation
Det här avsnittet beskriver konfigurationen fram till starten av PostgreSQL.
2-1. Skapa en särskild PostgreSQL-användare.
Jag ville skapa en särskild användare för att hantera PostgreSQL (använda psql-kommandon), men användaren hade redan skapats. Jag minns att jag skapade användare när jag skapade dem tidigare, så kanske har specifikationen ändrats.
Försök att byta till en användare med följande kommando.
[root@hostname ~]# su - postgres
Eftersom vissa personer kanske använder en äldre version av PostgreSQL bör det nämnas att förfarandet för att ställa in miljövariabler genom att ändra följande ".bashrc" inte heller längre är nödvändigt.
export PGHOME=/var/lib/pgsql
export PGDATA=/var/lib/pgsql/data
export PGHOST=localhost
Standard PGDATA för postgres-användare verkar nu vara "/var/lib/pgsql/data". Den beskrivs som en hänvisning till "/usr/lib/systemd/system/postgresql.service".
2-2. Förberedelse av PostgreSQL-data
Skapa PostgreSQL-data. Kodningen är UNICODE. Katalogen "/var/lib/pgsql/data" skapades som standard, men de som inte har gjort det ombeds också att skapa en mapp.
-bash-4.2$ initdb --encoding=UNICODE
Eftersom "PGDATA=/var/lib/pgsql/data" är inställt i "/usr/lib/systemd/system/postgresql.service" kommer "initdb --encoding=UNICODE" att bygga en databas under "/var/lib/pgsql/". data/", DB byggs under "/var/lib/pgsql/data/".
2-3. Ändra konfigurationsfilen
Tillåt IP-adresser att komma åt PostgreSQL. Konfigurera systemet så att det är lösenordsautentiserat för icke-lokal åtkomst.
[root@hostname ~]# vi /var/lib/pgsql/data/postgresql.conf
Ändra postgresql.conf på följande sätt.
#------------------------------------------------------------------------------
# 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;
Om du väljer den här inställningen kan du få tillgång till webbplatsen från vilken IP som helst, eftersom det är en viktig del av säkerheten. Om den IP-adress som ska nås är fast, ange den fasta IP-adressen.
Den här inställningen är nödvändig när du loggar in från en annan server än den där PostgreSQL är installerat, t.ex. pgadmin. Den här inställningen behövs inte om du loggar in på servern och kör kommandot psql. (eftersom anslutningen kommer från honom själv (localhost)).
Detta är en viktig säkerhetsinställning, så minimera antalet användare som kan komma åt den så mycket som möjligt.
Ändra sedan pg_hba.conf.
[root@hostname ~]# vi /var/lib/pgsql/data/pg_hba.conf
Lägg till följande information i slutet av dokumentet.
#Lösenordsautentisering utifrån.
host all all 0.0.0.0/0 md5
Genom att inkludera den här inställningen krävs ett lösenord när du ansluter från utsidan. Dessa områden kan utgöra allvarliga säkerhetshål om de inte är konfigurerade eller är felaktigt konfigurerade, så du bör konfigurera dem med största noggrannhet.
2-4. kontroll av uppstartsklämma
Nu när förkonfigurationen är klar kan du kontrollera att PostgreSQL startar. Eftersom databasen byggdes som en postgres-användare ska du byta till postgres-användaren innan du börjar.
[root@hostname ~]# su - postgres
-bash-4.2$ pg_ctl start
Efter att PostgreSQL har startats, kontrollera att kommandot psql fungerar utan problem. Kör kommandot psql som postgres-användare.
-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)
Det är okej om du får ovanstående resultat.
2-5. Inställning för automatisk start
Även om det inte är obligatoriskt är det svårt att starta PostgreSQL varje gång servern startas om, så det är konfigurerat så att PostgreSQL startas automatiskt när servern startas. Den registrerar också kommandot systemctl. Observera att den här proceduren gäller för CentOS7, så om du använder något annat än CentOS7 måste du använda kommandot Service för att hantera detta.
Kontrollera om "/usr/lib/systemd/system/postgresql.service" finns. Om inte, skapa "postgresql.service" med hjälp av följande procedur. Kör som root-användare.
[root@hostname ~]# touch /etc/systemd/system/postgresql.service
[root@hostname ~]# vi /etc/systemd/system/postgresql.service
Följande information tillhandahålls.
[Unit]
#Beskrivning.
Description=PostgreSQL
#Kontroll före och efter utförandet.
#Before=xxx.service
After=network.target
[Service]
#Användar- och gruppbeteckning
User=postgres
Group=postgres
#När den är aktiverad, sätts statusen till Aktiverad.
Type=oneshot
RemainAfterExit=yes
#Starta, stoppa och ladda om.
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]
#Motsvarande inställningar för Runlevel 3.
WantedBy=multi-user.target
Registrera sedan med kommandot 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. Lägga till en administrativ användare till PostgreSQL
Skapa en användare som ska användas i PostgreSQL-programmet, separat från den användare som använder PostgreSQL från Linux. Detta är användaren när du använder pgadmin osv. Jag vill ändra lösenordet för den postgres-användare som finns som standard och använda den.
Kör följande kommando som postgres-användare.
-bash-4.2$ psql
postgres=# alter role postgres with password 'Lösenord (dator)';
postgres=# \q
Obs: Ange det lösenord som du vill ställa in i fältet "Password" (Lösenord).
2-7. Borrning av brandväggar
Tillåt åtkomst till PostgreSQL-porten eftersom brandväggen (iptables för CentOS6 och tidigare) endast tillåter ssh-åtkomst som standard på CentOS7. Lägg också till alternativet "permanent" för att göra konfigurationen permanent.
[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:
Om det står "ports: 5432/tcp" är det OK.
Åtkomst via pgadmin. Du bör kunna logga in som postgres-användare med det lösenord som du just har angett.
3. sammanfattning
Vi har beskrivit den första konfigurationen som krävs när PostgreSQL installeras. Den första builden av PostgreSQL kan vara svår, så läs det här avsnittet.
Tack för att du tittade på till slutet.
