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='*'plushost all all 0.0.0.0/0 md5expose 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 CentOS | 7.6 (1810) |
|---|---|
| Version de PostgreSQL | 9.2.24 |
Table des matières
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.
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.
#------------------------------------------------------------------------------
# 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;
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.
#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.
[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.
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.
