Bonjour,

Pourrais-je soliciter votre expérience svp, car Je voudrais avoir votre avis sur ce que je pense avoir compris concernant la fichier pg_hba.conf.
Mon but est de n'autorisé l'accès en écriture qu'à l'admin, donc l'utilisateur postgres et si j'ai bien compris, je dois aussi autorisé l'accès à l'utisateur système (de Fedora, "nomUtilisateur")

En d'autres mots, voyez-vous une incohérence svp ?
# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             postgres                               	ident nomUtilisateur
# IPv4 local connections:
host    all             postgres        127.0.0.1/32          ident nomUtilisateur
# IPv6 local connections:
host    all             postgres        ::1/128                 ident nomUtilisateur
# Allow replication connections from localhost, by a user with the
# replication privilege.

#lignes désactivés à titre d'exemple, si bétise
#local   replication    	all                                     peer #peer to peer ?
#host    replication     all             127.0.0.1/32        ident
#host    replication     all             ::1/128                 ident
#
local	replication	postgres				        ident nomUtilisateur
host	replication	postgres	127.0.0.1/32		ident nomUtilisateur
host	replication	postgres	::1/128			ident nomUtilisateur
Merci !
Bonjour,

A la base, je ne voudrais apprendre postgresql, qu'avec le nom d'utilisateur postgres (bonne ou mauvaise idée, je ne sais pas), mais dans mes tentative précédentes, lors de la connexion (de mémoire), je recevais un message du type nomUtilisateur par exemple toto n'est pas autorisé....(puis je ne sais plus) (c'était une question d'accès à un répertoire...)

Donc, du coup, je me dis que je dois autorisé à postgres et toto... ?
Merci pour le lien, un peu de lecture me sera utile 🙂

Ceci dit, l'installation de postgresql s'est bien passé... j'en suis encore à la configuration de sécurité (de base)
avant de lancer :
## Start PostgreSQL 10 ##
systemctl start postgresql-10.service
Idéalement, dans mon esprit, toto devrait être un utilisateur avec des pouvoirs limités...
Peut-être qu'il serait plus juste d'écrire ceci :
local   all             postgres                               	md5 #utiliser la méthoe de md5 partout ?
La ligne que tu cite, ne parle que de l'utilisateur postgres. Tu la dupliques, tu change postgres par toto, et ça serait mieux non? Si tu cherches à autoriser l'accès à postgresql via l'utilisateur toto bien sûr.
local   all             postgres                      	md5
local   all             toto                           	md5
La doc indique aussi que tu peux séparer les user avec une virgule
local   all             postgres,toto                           	md5
Ce qui se lit, "j'autorise en local (OS) l'accès à toutes les bases (all) pour l'utilisateur postgres et toto, avec la méthode d'authentification md5 (mot de passe en gros).

C'est bien ce que tu veux faire ?

Ne pas oublier de relancer le service de l'instance postgres en rapport avec le pg_hba.conf modifié.
Un grand merci madko ! Tu me fais gagner beaucoup de temps et je suis impatient d'apprendre le postgresql !
Je clôturerai la discussion plus tard, lorsque je reprendrai la configuration, car là j'ai de la visite !

Encore merci pour ton aide !
Bonjour, pourrais-je avoir un éclaircissement s'il vous plaît ? Sur ce forum, il est dit (au post 4) :
rjuju wrote:Postgres ne peut pas démarrer en tant que root pour raison de sécurité. Vous devriez utiliser un autre utilisateur.
Hors, dans la doc de Fedora, disponible ici, dans la rubrique "Activation (2.2)", le service est démarré en passant par la commande :
su -lc
Aujourd'hui, sous F28, il faut passer par sudo...
Je tape ceci :
sudo systemctl start postgresql-10.service
Job for postgresql-10.service failed because the control process exited with error code.
See "systemctl status postgresql-10.service" and "journalctl -xe" for details.
que je passe par
sudo -i
par l'utilisateur "toto" (super user)

J'ai continuellement le message décrit plus haut :

Soit, "Job for postgresql-10.service failed because the control process exited with error code.
See "systemctl status postgresql-10.service" and "journalctl -xe" for details."


Voici le retour de
systemctl status postgresql-10.service
[toto@localhost ~]$ systemctl status postgresql-10.service
 postgresql-10.service - PostgreSQL 10 database server
   Loaded: loaded (/usr/lib/systemd/system/postgresql-10.service; disabled; ven>
   Active: failed (Result: exit-code) since Mon 2018-05-21 16:09:54 CEST; 7min >
     Docs: https://www.postgresql.org/docs/10/static/
  Process: 5811 ExecStart=/usr/pgsql-10/bin/postmaster -D ${PGDATA} (code=exite>
  Process: 5804 ExecStartPre=/usr/pgsql-10/bin/postgresql-10-check-db-dir ${PGD>
 Main PID: 5811 (code=exited, status=1/FAILURE)
Voici le retour de :
journalctl -xe
mai 21 16:18:09 localhost.localdomain org.gnome.Shell.desktop[1804]: #1 0x7ffdcf527000 b   resource:///org/gnome/shell/ui/tweener.js:105 (0>
mai 21 16:18:09 localhost.localdomain org.gnome.Shell.desktop[1804]: #2 0x7ffdcf5270a0 b   resource:///org/gnome/shell/ui/tweener.js:92 (0x>
mai 21 16:18:09 localhost.localdomain org.gnome.Shell.desktop[1804]: #3 0x7ffdcf527fa0 b   resource:///org/gnome/gjs/modules/tweener/tweene>
mai 21 16:18:09 localhost.localdomain org.gnome.Shell.desktop[1804]: #4 0x7ffdcf5280f0 b   resource:///org/gnome/gjs/modules/tweener/tweene>
mai 21 16:18:09 localhost.localdomain org.gnome.Shell.desktop[1804]: #5 0x7ffdcf5281a0 b   resource:///org/gnome/gjs/modules/tweener/tweene>
mai 21 16:18:09 localhost.localdomain org.gnome.Shell.desktop[1804]: #6 0x7ffdcf528230 b   resource:///org/gnome/gjs/modules/tweener/tweene>
mai 21 16:18:09 localhost.localdomain org.gnome.Shell.desktop[1804]: #7 0x7ffdcf5282b0 I   resource:///org/gnome/gjs/modules/signals.js:128>
mai 21 16:18:09 localhost.localdomain org.gnome.Shell.desktop[1804]: #8 0x7ffdcf528360 b   resource:///org/gnome/shell/ui/tweener.js:207 (0>
mai 21 16:18:09 localhost.localdomain org.gnome.Shell.desktop[1804]: #9 0x7ffdcf5283d0 I   resource:///org/gnome/gjs/modules/_legacy.js:82 >
mai 21 16:18:09 localhost.localdomain org.gnome.Shell.desktop[1804]: #10 0x7ffdcf5283d0 I   resource:///org/gnome/shell/ui/tweener.js:182 (>
mai 21 16:18:09 localhost.localdomain org.gnome.Shell.desktop[1804]: == Stack trace for context 0x56534547b1c0 ==
mai 21 16:18:09 localhost.localdomain org.gnome.Shell.desktop[1804]: #0 0x7ffdcf526f60 b   resource:///org/gnome/shell/ui/tweener.js:80 (0x>
mai 21 16:18:09 localhost.localdomain org.gnome.Shell.desktop[1804]: #1 0x7ffdcf527000 b   resource:///org/gnome/shell/ui/tweener.js:105 (0>
mai 21 16:18:09 localhost.localdomain org.gnome.Shell.desktop[1804]: #2 0x7ffdcf5270a0 b   resource:///org/gnome/shell/ui/tweener.js:92 (0x>
mai 21 16:18:09 localhost.localdomain org.gnome.Shell.desktop[1804]: #3 0x7ffdcf527fa0 b   resource:///org/gnome/gjs/modules/tweener/tweene>
mai 21 16:18:09 localhost.localdomain org.gnome.Shell.desktop[1804]: #4 0x7ffdcf5280f0 b   resource:///org/gnome/gjs/modules/tweener/tweene>
mai 21 16:18:09 localhost.localdomain org.gnome.Shell.desktop[1804]: #5 0x7ffdcf5281a0 b   resource:///org/gnome/gjs/modules/tweener/tweene>
mai 21 16:18:09 localhost.localdomain org.gnome.Shell.desktop[1804]: #6 0x7ffdcf528230 b   resource:///org/gnome/gjs/modules/tweener/tweene>
mai 21 16:18:09 localhost.localdomain org.gnome.Shell.desktop[1804]: #7 0x7ffdcf5282b0 I   resource:///org/gnome/gjs/modules/signals.js:128>
mai 21 16:18:09 localhost.localdomain org.gnome.Shell.desktop[1804]: #8 0x7ffdcf528360 b   resource:///org/gnome/shell/ui/tweener.js:207 (0>
mai 21 16:18:09 localhost.localdomain gnome-shell[1804]: Object Shell.GenericContainer (0x565348eb9a80), has been already finalized. Imposs>
mai 21 16:18:09 localhost.localdomain org.gnome.Shell.desktop[1804]: #9 0x7ffdcf5283d0 I   resource:///org/gnome/gjs/modules/_legacy.js:82 >
mai 21 16:18:09 localhost.localdomain org.gnome.Shell.desktop[1804]: #10 0x7ffdcf5283d0 I   resource:///org/gnome/shell/ui/tweener.js:182 (>

mai 21 16:09:54 localhost.localdomain systemd[1]: Starting PostgreSQL 10 databa>
mai 21 16:09:54 localhost.localdomain postmaster[5811]: 2018-05-21 14:09:54.596>
mai 21 16:09:54 localhost.localdomain postmaster[5811]: 2018-05-21 14:09:54.596>
mai 21 16:09:54 localhost.localdomain systemd[1]: postgresql-10.service: Main p>
mai 21 16:09:54 localhost.localdomain systemd[1]: postgresql-10.service: Failed>
mai 21 16:09:54 localhost.localdomain systemd[1]: Failed to start PostgreSQL 10
Enfin, pour être complet, le contenu de :
 /var/lib/pgsql/10/data/pg_hba.conf 
# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             postgres,toto				md5
# IPv4 local connections:
host    all             postgres,toto        127.0.0.1/32      md5
# IPv6 local connections:
host    all             postgres,toto        ::1/128		md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication    	all                                     peer
host    replication     all             127.0.0.1/32            ident
host    replication     all             ::1/128                 ident
Pour éviter les erreurs (si d'autres personnes voulaient copier/coller):

https://docs.postgresql.fr/9.0/client-authentication.html
docs.postgresql.fr/ wrote:Le format général du fichier pg_hba.conf est un ensemble d'enregistrements, un par ligne. Les lignes vides sont ignorées tout comme n'importe quel texte placé après le caractère de commentaire #. Un enregistrement est constitué d'un certain nombre de champs séparés par des espace et/ou des tabulations. Les enregistrements ne peuvent pas être continués sur plusieurs lignes. Les champs peuvent contenir des espaces si la valeur du champ est mise entre guillemets. Mettre entre guillemets un des mots-clés dans un champ base de données ou utilisateur (par exemple, all ou replication) fait que le mot perd son interprétation spéciale, ou correspond à la base de données ou à l'utilisateur ayant ce nom.
Au poste 12, il est dit ceci :
rjuju wrote:Il s'agit d'une autre erreur. Le répertoire de données (et tous les autres ficihers à l'intérieurs) doivent être accessible à l'utilisateur postgres uniquement. Grosso modo quelquechose comme « chmod go-rwx -R /data/pgsql/donnees »
Qu'en pensez-vous svp ?

Merci !
Alors il ne faut pas confondre avoir les droits pour lancer un service (il faut souvent être root en effet), et les droits d'execution d'un service. En gros sous quel utilisateur tourne le démon. Pour postgres, rien ne l'empeche de tourner en root, c'est juste fortement déconseillé. Habituellement il tourne avec l'utilisateur postgres (tu peux faire un ps aux pour voir ça).

Par défaut, tu as juste à installer le paquet postgresql-server, basculer en utilisateur postgres
su - postgres
(si ça demande un mot de passe, lance sudo -i avant pour être root, puis faire le su - postgres)

Sous l'utilisateur postgres, tu lance le initdb. Celà va initialiser les fichiers pour ton instance. C'est important de le faire sous l'utilisateur postgres pour que ces fichiers aient les bons droits et permissions. Du coup pas besoin du chmod.

Enfin, le service peut être demarré comme tu as fait, avec le sudo systemctl start service.

Ne fait pas d'autres modifications, essaye déjà d'avoir un postgres qui tourne et qui fonctionne. Le pg_hba se modifiera plus tard.
Bonjour madko,

Merci pour ton aide !
madko wrote:Sous l'utilisateur postgres, tu lance le initdb. Celà va initialiser les fichiers pour ton instance. C'est important de le faire sous l'utilisateur postgres pour que ces fichiers aient les bons droits et permissions. Du coup pas besoin du chmod.
Gràce à la commande "history" j'ai retrouvé sous quel nom d'utilisateur j'ai lancé initdb, je crains d'avoir commis une erreur, car je l'ai lancé sous :
sudo -i
et non sous postgres

Ce qui impliquerait que je recommence l'installation, car si je relance initdb, sauf erreur de ma part, cela générera une erreur (initdb ne peut se lancer qu'une seule fois)
Tu peux supprimer les fichiers générés par l'initdb si tu n'as aucune données importantes dans tes bases.

J'utilise le paquet postgresql officiel fedora, et le initdb de celui-ci génère par défaut des fichiers dans /var/lib/pgsql/data/.
Tu peux les supprimer et relancer un initdb sous l'utilisateur postgres.
Bonjour,

Pour info, je préfère suivre ton exemple, c'est à dire installer de dépot officiel de fedora (posgresql 10...)
Soit, l'installation est faite.

J'essaye donc d'initialiser postgres comme tu l'as décrit au post 8.

Mais je me heurte à ceci :
[root@localhost ~]# su - postgres
[postgres@localhost ~]$ postgresql-setup initdb
WARNING: using obsoleted argument syntax, try --help
WARNING: arguments transformed to: postgresql-setup --initdb --unit postgresql
 * Initializing database in '/var/lib/pgsql/data'
ERROR: Data directory /var/lib/pgsql/data is not empty!
ERROR: Initializing database failed, possibly see /var/lib/pgsql/initdb_postgresql.log
au post 10 tu me suggères de supprimer les fichiers présent dans /var/lib/pgsql/data

Voici ce qui s'y trouve :
[root@localhost ~]# ls /var/lib/pgsql/data
base          pg_dynshmem    pg_log        pg_notify    pg_snapshots  pg_subtrans  PG_VERSION  postgresql.auto.conf
global        pg_hba.conf    pg_logical    pg_replslot  pg_stat       pg_tblspc    pg_wal      postgresql.conf
pg_commit_ts  pg_ident.conf  pg_multixact  pg_serial    pg_stat_tmp   pg_twophase  pg_xact
J'imagine que je ne dois pas toucher aux répertoires ?

Les fichiers sont :

PG-VERSION
postgresql.auto.conf
postgresql.conf
pg_hba.conf
pg_ident.conf

Pour le reste, ce sont des répertoires.
En root tu peux faire un
rm -Rf /var/lib/pgsql/data/*
puis relancer ton initdb depuis l'utilisateur postgres.
Salut,

Voici ce que ça donne :
[root@localhost ~]# rm -Rf /var/lib/pgsql/data/*
[root@localhost ~]# su - postgres
[postgres@localhost ~]$ postgresql-setup initdb
WARNING: using obsoleted argument syntax, try --help
WARNING: arguments transformed to: postgresql-setup --initdb --unit postgresql
 * Initializing database in '/var/lib/pgsql/data'
 * Initialized, logs are in /var/lib/pgsql/initdb_postgresql.log
Je m'attendais à ce qu'il me donne un message comme : "base de données : [ ok ]"

D'après ce que je comprends, il invite à revoir la syntaxe... puis dit qu'il que "les arguments ont changés", ensuite, il me semble qu'il initialise quand même la database "Initializing database in '/var/lib/pgsql/data". Finalement, il invite à voir le journal : " /var/lib/pgsql/initdb_postgresql.log"

Voici le contenu du journal :
[root@localhost ~]# cat /var/lib/pgsql/initdb_postgresql.log
Les fichiers de ce cluster appartiendront à l'utilisateur « postgres ».
Le processus serveur doit également lui appartenir.

L'instance sera initialisée avec la locale « fr_BE.UTF-8 ».
L'encodage par défaut des bases de données a été configuré en conséquence
avec « UTF8 ».
La configuration de la recherche plein texte a été initialisée à « french ».

Les sommes de contrôles des pages de données sont désactivées.

correction des droits sur le répertoire existant /var/lib/pgsql/data... ok
création des sous-répertoires... ok
sélection de la valeur par défaut de max_connections... 100
sélection de la valeur par défaut pour shared_buffers... 128MB
sélection de l'implémentation de la mémoire partagée dynamique...posix
création des fichiers de configuration... ok
lancement du script bootstrap...ok
exécution de l'initialisation après bootstrap...ok
synchronisation des données sur disqueok

Succès. Vous pouvez maintenant lancer le serveur de bases de données en utilisant :

    /usr/bin/pg_ctl -D /var/lib/pgsql/data -l fichier de trace start

Les fichiers de ce cluster appartiendront à l'utilisateur « postgres ».
Le processus serveur doit également lui appartenir.

L'instance sera initialisée avec la locale « fr_BE.UTF-8 ».
L'encodage par défaut des bases de données a été configuré en conséquence
avec « UTF8 ».
La configuration de la recherche plein texte a été initialisée à « french ».

Les sommes de contrôles des pages de données sont désactivées.

correction des droits sur le répertoire existant /var/lib/pgsql/data... ok
création des sous-répertoires... ok
sélection de la valeur par défaut de max_connections... 100
sélection de la valeur par défaut pour shared_buffers... 128MB
sélection de l'implémentation de la mémoire partagée dynamique...posix
création des fichiers de configuration... ok
lancement du script bootstrap...ok
exécution de l'initialisation après bootstrap...ok
synchronisation des données sur disqueok

Succès. Vous pouvez maintenant lancer le serveur de bases de données en utilisant :

    /usr/bin/pg_ctl -D /var/lib/pgsql/data -l fichier de trace start
A ce stade, je dirais que je peux démarrer le service via la commande :
systemctl start postgresql.service
mais en root ou sous postgres ?

J'essaie avec postgres :
[root@localhost ~]# su - postgres
[postgres@localhost ~]$ systemctl start postgresql.service
pas de message d'erreur, ça semble fonctionner.
Tout est bon. Tu peux démarrer ton instance avec la commande:
systemctl start postgresql
En root bien sûr! (ou via sudo/su comme tu veux)

ps: le .service est optionnel, ça t'économiseras certaines frappes.
Je pense qu'il n'y a pas de message d'erreur, car par défaut, il me demande le mot de passe du premier utilisateur créé lors de l'installation de fedora qui est dans le groupe sudo...

J'imagine que je peux continuer ?
[root@localhost ~]# su - postgres
[postgres@localhost ~]$ ps
  PID TTY          TIME CMD
 3575 pts/0    00:00:00 bash
 3639 pts/0    00:00:00 ps
[postgres@localhost ~]$ su postgres
Mot de passe : 
bash-4.4$ ps
  PID TTY          TIME CMD
 3575 pts/0    00:00:00 bash
 3657 pts/0    00:00:00 bash
 3658 pts/0    00:00:00 ps
je ne vois pas de trace du service
bash-4.4$ psql
psql (10.4)
Saisissez « help » pour l'aide.

postgres=# 
ça à l'air de fonctionner ?

pas sûr car :
systemctl list-unit-files

....................
postgresql.service                                   disabled       
postgresql@.service                                  disabled  
euh finalement on dirait qu'il est actif :
bash-4.4$ service postgresql status
Redirecting to /bin/systemctl status postgresql.service
● postgresql.service - PostgreSQL database server
   Loaded: loaded (/usr/lib/systemd/system/postgresql.service; disabled; vendor>
   Active: active (running) since Wed 2018-05-23 16:55:06 CEST; 1h 24min ago
  Process: 3296 ExecStartPre=/usr/libexec/postgresql-check-db-dir postgresql (c>
 Main PID: 3303 (postmaster)
    Tasks: 9 (limit: 4915)
   Memory: 19.7M
   CGroup: /system.slice/postgresql.service
           ├─3303 /usr/bin/postmaster -D /var/lib/pgsql/data
           ├─3304 postgres: logger process   
           ├─3306 postgres: checkpointer process   
           ├─3307 postgres: writer process   
           ├─3308 postgres: wal writer process
Je peux cloturer la discution car j'ai pu suivre le tuto suivant jusqu'au chapitre 2.5.1 inclu

Il me reste pas mal de documentation à lire... et surtout à comprendre ! Comme celui de systemd par exemple...

Encore merci pour ton aide madko !
Pas de soucis.

Le disabled t'indique juste que le service n'est pas actif au démarrage. Si tu veux que le service postgresql démarre tout seul au boot de la machine, tu peux faire
systemctl enable postgresql
Bonne continuation