Installer PostgreSQL sur CentOS avec un accès distant sécurisé


Date de publication:

Mise à jour :


Articles > Installer PostgreSQL sur CentOS avec un accès distant sécurisé

Statut 2026 et utilisation sûre

Conclusion : Installez une version de PostgreSQL prise en charge, initialisez le cluster prévu, écoutez uniquement sur les interfaces requises et accordez l'accès dans pg_hba.conf à des bases de données, des rôles et des réseaux de confiance spécifiques. Utilisez l'authentification par mot de passe SCRAM et TLS lorsque les mots de passe traversent un réseau.

Ce que vous apprendrez

  • Comment interagissent la source du package, le répertoire de données, l'initialisation, systemd, les sockets d'écoute et l'authentification client.
  • Pourquoi listen_addresses='*' plus host all all 0.0.0.0/0 md5 expose bien plus que ce dont la plupart des applications ont besoin.
  • Comment tester les règles d'accès sans verrouiller l'administration locale.

À qui s'adresse : Administrateurs migrant un simple runbook CentOS/PostgreSQL vers un déploiement en réseau pris en charge.

Note de mise à jour (2026) : La règle générale MD5 ci-dessous est retenue uniquement à titre d'exemple historique porteur d'avertissement. PostgreSQL documente les mots de passe cryptés par MD5 comme étant obsolètes ; préférez scram-sha-256, les CIDR étroits, les rôles de moindre privilège, les contrôles de pare-feu, TLS, les sauvegardes et une version majeure prise en charge.

Note de sécurité : les commandes et exemples de configuration de l'article d'origine n'ont pas été rejoués dans un environnement de production actuel. Avant toute application, vérifiez les versions prises en charge, les sauvegardes, les contrôles d'accès et la procédure de retour arrière dans un environnement de test isolé.

Sources primaires officielles

Vue d’ensemble

Cette procédure historique installe et initialise PostgreSQL sur CentOS 7, puis configure le démarrage du service et l’accès réseau. Pour un nouveau serveur, utilisez une version encore prise en charge et adaptez les commandes à sa documentation.

La partie réseau mérite une attention particulière : limitez les interfaces d’écoute, les plages CIDR, les bases et les rôles autorisés au strict nécessaire.

Les versions sont les suivantes.

Version de CentOS7.6 (1810)
Version de PostgreSQL9.2.24

Table des matières

  1. installer
  2. Détails de la configuration
  3. résumé

1. Installation

Cette section décrit la procédure d'installation de PostgreSQL.

1-1. Installation de PostgreSQL

Effectuez l'installation de PostgreSQL au moyen de la commande yum. Effectuez le travail en tant qu'utilisateur root.

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

2. Détails de la configuration

Cette section décrit la configuration jusqu'au démarrage de PostgreSQL.

2-1. Créez un utilisateur PostgreSQL dédié.

Le paquet crée normalement le compte système "postgres", utilisé pour administrer l’instance avec psql. Vérifiez sa présence avant d’en créer un autre.

Essayez de passer à un utilisateur avec la commande suivante.

[root@hostname ~]# su - postgres

Comme certaines personnes utilisent peut-être une ancienne version de PostgreSQL, il convient de mentionner que la procédure de définition des variables d'environnement en modifiant le fichier ".bashrc" suivant n'est plus nécessaire.

.bashrc


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

Le PGDATA par défaut pour les utilisateurs de postgres semble maintenant être '/var/lib/pgsql/data'. Il est décrit comme faisant référence à "/usr/lib/systemd/system/postgresql.service".

2-2. Préparation des données PostgreSQL

Créer des données PostgreSQL. L'encodage est UNICODE. Le répertoire "/var/lib/pgsql/data" a été créé par défaut, mais ceux qui ne l'ont pas fait sont également invités à créer un dossier.

-bash-4.2$ initdb --encoding=UNICODE

Comme "PGDATA=/var/lib/pgsql/data" est défini dans "/usr/lib/systemd/system/postgresql.service", "initdb --encoding=UNICODE" construira une BD sous "/var/lib/pgsql/". data/", la BD est construite sous "/var/lib/pgsql/data/".

2-3. Modifier le fichier de configuration

Autoriser les adresses IP à accéder à PostgreSQL. Configurez le système de manière à ce qu'il soit authentifié par un mot de passe pour l'accès non local.

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

Modifiez le fichier 'postgresql.conf' comme suit.

postgresql.conf【Avant le changement】


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

# - Connection Settings -

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

postgresql.conf【après le changement】


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

# - Connection Settings -

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

La valeur "*" fait écouter PostgreSQL sur toutes les interfaces disponibles ; elle n’accorde pas, à elle seule, l’accès au client. Si l’application utilise une interface déterminée, indiquez son adresse plutôt que d’élargir inutilement l’exposition.

Une connexion distante, par exemple depuis pgAdmin, nécessite à la fois une adresse d’écoute, une règle pg_hba.conf appropriée et une autorisation du pare-feu. Une connexion locale via psql peut continuer à utiliser localhost ou un socket Unix.

Il s'agit d'un paramètre de sécurité important, aussi réduisez autant que possible le nombre d'utilisateurs qui peuvent y accéder.

Puis modifiez 'pg_hba.conf'.

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

Ajoutez les informations suivantes à la fin du document.

pg_hba.conf


#Authentification du mot de passe depuis l'extérieur.
host    all             all             0.0.0.0/0            md5

En incluant ce paramètre, un mot de passe est requis lors de la connexion depuis l'extérieur. Ces zones peuvent constituer de graves failles de sécurité si elles ne sont pas configurées ou si elles sont configurées de manière incorrecte, alors veuillez les configurer avec le plus grand soin.

2-4. contrôle du bootstrap

Maintenant que la préconfiguration est terminée, vérifiez que PostgreSQL démarre. Comme la BD a été construite en tant qu'utilisateur postgres, passez à l'utilisateur postgres avant de commencer.

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

Après que PostgreSQL ait été démarré avec succès, vérifiez que la commande psql fonctionne sans problème. Exécutez la commande psql en tant qu'utilisateur de 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)

Il n'y a pas de problème si les résultats ci-dessus sont renvoyés.

2-5. Réglage du démarrage automatique

Bien que ce ne soit pas obligatoire, il est difficile de démarrer PostgreSQL à chaque fois que le serveur est redémarré, c'est pourquoi il est configuré pour que PostgreSQL démarre automatiquement au démarrage du serveur. Il s'inscrit également à la commande systemctl. Veuillez noter que cette procédure est pour CentOS7, donc si vous utilisez autre chose que CentOS7, vous devrez utiliser la commande Service pour gérer cela.

Vérifiez si '/usr/lib/systemd/system/postgresql.service' existe. Sinon, créez 'postgresql.service' en utilisant la procédure suivante. Exécuter en tant qu'utilisateur root.

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

Les informations suivantes sont fournies.

postgresql.service


[Unit]
#Description.
Description=PostgreSQL
#Contrôle avant et après l'exécution.
#Before=xxx.service
After=network.target

[Service]
#Désignation des utilisateurs et des groupes
User=postgres
Group=postgres
#Une fois activé, mettez le statut sur Activé.
Type=oneshot
RemainAfterExit=yes
#Démarrer, arrêter et recharger.
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]
#Paramètres équivalents au Runlevel 3.
WantedBy=multi-user.target

Ensuite, enregistrez-vous avec la commande 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. Ajout d'un utilisateur administratif à PostgreSQL

Créez un utilisateur à utiliser dans l'application PostgreSQL, distinct de l'utilisateur qui exploite PostgreSQL depuis Linux. Il s'agit de l'utilisateur lors des opérations avec pgadmin, etc. Je voudrais changer le mot de passe de l'utilisateur postgres qui existe par défaut et l'utiliser.

Exécutez la commande suivante en tant qu'utilisateur de postgres.

-bash-4.2$ psql
postgres=# alter role postgres with password 'Mot de passe (ordinateur)';
postgres=# \q

Remarque : Saisissez le mot de passe que vous souhaitez définir dans le champ "Mot de passe".

2-7. Perçage des pare-feu

Autoriser l'accès au port PostgreSQL car le pare-feu (iptables pour CentOS6 et antérieurs) n'autorise que l'accès ssh par défaut sur CentOS7. Ajoutez également l'option "permanent" pour rendre la configuration permanente.

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

S'il est indiqué "ports : 5432/tcp", tout va bien.

Accès via pgadmin. Vous devriez pouvoir vous connecter en tant qu'utilisateur postgres avec le mot de passe que vous venez de définir.

Tableau de bord pgAdmin affichant la base postgres sur le serveur centos_test

3. résumé

Nous avons décrit la configuration initiale requise lors de l'installation de PostgreSQL. La mise en place initiale de PostgreSQL peut être difficile, aussi veuillez vous référer à cette section.

■INFORMATION

Articles


■PROFILE

Profil


■Contact

Contact