Bonjour à tous,
J'ai installé postgresql sur une machine sous Lucid. Au moment où je lance la commande psql, il me demande un mot de passe. je ne sait pas trop ce que ce mot de passe peut être.
Autre précision: Au départ ça marchait bien et il ne me demandait pas de mot de passe mais j'ai fait quelques bidouillages: j'ai modifié le fichier pg_hba.conf dans /etc/postgresql/8.4/main pour rajouter l'option de cryptage (md5) et je crois que suite à ceci les problèmes ont commencé alors j'ai désinstallé postgresql, et j'ai supprimé les répertoires postgresql et postgresql_common de l'/etc/ chose que j'aurais jamais dû faire parce qu'après la réinstallation ils n'ont jamais pu être recréés.
Même si je remets les fichiers supprimés, il me demande encore un mot de passe quand je tape la commande psql.
Merci.
# HY
Posté par Lol Zimmerli (site web personnel, Mastodon) . Évalué à 1.
Peut-être?
La gelée de coings est une chose à ne pas avaler de travers.
[^] # Re: HY
Posté par lans843 . Évalué à 1.
changer le mot de passe semble une bonne idée
mais le mot de passe est demandé quand je tape la commande psql, donc avant que je ne puisse modifier le password!!
root@P4MATI60G:/# sudo -s -u postgres
bash: /root/.bashrc: Permission non accordée
postgres@P4MATI60G:/$ psql
Mot de passe :
psql: fe_sendauth: no password supplied
donc
Je crois qu'il faut modifier le fichier pg_hba.conf, j'ai essayé de mettre "trust" au lieu de md5 mais ça ne résout pas le problème.
# Plus d'infos
Posté par zedS . Évalué à 2.
Est ce que tu peux copier ton fichier pg_hba.conf , sans le lire c'est un peu difficile de t'aider ...
Par défaut l'utilisateur postgresql n'a pas de mot de passe (et il vaut mieux laisser comme ça).
Pour l'utiliser, "su postgres" en root, ensuite tu peux te connecter à la base de données.
[^] # Re: Plus d'infos
Posté par lans843 . Évalué à 1.
voici mon fichier pg_hba.conf, normalement c'est le même par défaut
# Database administrative login by UNIX sockets
local all postgres ident
# TYPE DATABASE USER CIDR-ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all ident
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
[^] # Re: Plus d'infos
Posté par Gyro Gearllose . Évalué à 2.
La réponse à ton problème est dans ton post :
la première ligne de ton pg_hba.conf n'est pas bonne (ou en tout cas, c'est elle qui te bloque) :
local all postgres ident
Elle devrait être :
local all postgres trust
ou
local all all trust
Quoi qu'il en soit, l'une comme l'autre n'est pas à conseiller, car quiconque a soit un accès au compte postgres (première modif) ou quiconque a un accès à la machine (seconde modif) a alors accès à psql.
Je te conseille donc de :
1) changer la ligne incriminée en
local all postgres trust
2) te connecter à la base template1 avec le compte postgres et changer son mot de passe :
$ psql template1 -u postgres
=> alter user postgres with password 'plop';
3) remettre la ligne dans l'état initial :
local all all ident
ou local all all md5...
de façon à éviter les connexions locales sans demandes de mot de passe.
Voilà, j'espère que ce commentaire te sera utile.
[^] # Re: Plus d'infos
Posté par zedS . Évalué à 3.
[...] car quiconque a soit un accès au compte postgres (première modif) [...]
Vu que l'utilisateur postgres n'a pas de mot de passe (compte local), il faut obligatoirement passer par root pour utiliser l'utilisateur postgres (si la personne est root, mot de passe ou pas ça change pas grand chose ...)
De plus ne pas mettre de mot de passe sur postgres permet par exemple de lancer des cron de sauvegarde des bases sans le mot de passe postgres dans les fichiers et par expérience c'est très pratique.
Je suis peut être complètement à coté de la plaque, si c'est le cas je veux bien des explications ...
[^] # Re: Plus d'infos
Posté par bibitte . Évalué à 1.
Mais dans la pratique tu peux avoir besoin de te connecter en tant que postgres sans passer par root (par exemple un BDA a qui on refuse de donner les droits root), du coup dans la pratique ca arrive souvent qu'on lui mette un mot de passe.
Par contre je ne voi pas le rapport entre le mot de pass et le cron, même si y'a un mot de passe rien ne t'empêche de faire un crontab -e ?
[^] # Re: Plus d'infos
Posté par Gyro Gearllose . Évalué à 1.
Donc, je reprends mes explications en espérant ni me tromper, ni être clair comme de l'eau de boudin ce coup-ci.
Sur mes machines (parce que je fous postgresql partout), je donne un mot de passe au compte postgres, celui qui se connecte au login. Je place les scripts de sauvegardes dans le fcrontab de cet utilisateur ensuite.
Dans le pg_hba.conf, j'ai mis ces deux lignes :
local all postgres trust
local all all md5
Mais ton commentaire (très intéressant au demeurant) m'a poussé à faire quelques tentatives, et je dois dire que c'est un trou de sécurité énorme. En effet, pour peu que tu aies un accès à la machine (comprendre un compte, avec lequel tu es identifié au login et que tu aies un shell), tu peux ensuite faire la chose suivante :
$ psql template1 -U postgres
il ne te demande aucun mot de passe !!!!!!
Je vais donc rechercher un peu comment sécuriser tout ça, de façon à ce que seul l'utilisateur postgres connecté au système n'ait pas de mot de passe à entrer, mais que la commande donnée ci-dessus soit giclée automatiquement (ou en tout cas, demande le mot de passe du compte postgres).
[^] # Re: Plus d'infos
Posté par Gyro Gearllose . Évalué à 1.
dans le pg_hba.conf, virer le trust.
Ensuite, dans la home du compte postgres, créer un fichier nommé .pgpass mode 0600 contenant le mot de passe du compte postgres (compte de base de donnée, hein, pas le compte de login).
Et laisser le crontab tel quel.
Du coup, plus moyen de se connecter aux bases de données avec le compte superutilisateur sauf quand on est le superutilisateur lui-même.
J'ai quelques machines à modifier maintenant, au boulot !
Et j'espère que ces remarques seront utiles.
[^] # Re: Plus d'infos
Posté par zedS . Évalué à 1.
Mais dans la pratique tu peux avoir besoin de te connecter en tant que postgres sans passer par root (par exemple un BDA a qui on refuse de donner les droits root), du coup dans la pratique ca arrive souvent qu'on lui mette un mot de passe.
Il faut lui créer un nouveau role super utilisateur !
En pratique, je n'en mets jamais (du coup je m'interroge la ...)
Pour revenir au cron, ce n'est pas le problème de pouvoir créer un cron, mais qu'avec un mot de passe pour le compte postgres (compte db), tu devras mettre le mot de passe en clair dans ta commande cron ou alors dans un fichier .pgpass
(je sais pas si je suis compréhensible ..)
local all postgres trust
local all all md5
[...]
$ psql template1 -U postgres
il ne te demande aucun mot de passe !!!!!!
Uniquement si tu es loguer en postgres sur le serveur (compte local) ! Il n'y a pas de trou de sécurité avec une installation de postgres sans configuration
[^] # Re: Plus d'infos
Posté par zedS . Évalué à 1.
local all postgres ident sameuser
et non
local all postgres trust
C'est d'ailleurs la config par défaut.
Un petit test sur une vm toute propre :
Debian Lenny, install de postgresql, configuration de pg_hba par défaut :
local all postgres ident sameuser
local all all ident sameuser
host all all 127.0.0.1/32 md5
host all all ::1/128 md5
On test en root :
test:~# psql
psql: FATAL: Ident authentication failed for user "root"
test:~# psql template1 -U postgres
psql: FATAL: Ident authentication failed for user "postgres"
test:~# psql -U postgres
psql: FATAL: Ident authentication failed for user "postgres"
On test en postgres
postgres@test:/root$ psql
Welcome to psql 8.3.11, the PostgreSQL interactive terminal.
Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit
postgres=#
Je fais la petite modification dans le fichier hba :
local all postgres ident sameuser
local all all md5
local all all ident sameuser
host all all 127.0.0.1/32 md5
host all all ::1/128 md5
On reteste le tout.
En root :
test:~# psql
psql: FATAL: Ident authentication failed for user "root"
test:~# psql template1 -U postgres
psql: FATAL: Ident authentication failed for user "postgres"
test:~# psql -U postgres
psql: FATAL: Ident authentication failed for user "postgres"
En postgres
postgres@test:/root$ psql
Welcome to psql 8.3.11, the PostgreSQL interactive terminal.
Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit
postgres=#
On crée et test avec un autre user pour voir :
toto@test:/root$ psql
psql: FATAL: Ident authentication failed for user "toto"
toto@test:/root$ psql template1 -U postgres
psql: FATAL: Ident authentication failed for user "postgres"
toto@test:/root$ psql template1
psql: FATAL: Ident authentication failed for user "toto"
Voila, pas de problèmes de trou de sécurité ou autre ...
Je maintiens qu'il n'est pas nécessaire de mettre un mot de passe à l'utilisateur postgres (utilisateur db)
[^] # Re: Plus d'infos
Posté par bibitte . Évalué à 1.
local all postgres ident sameuser
et pas lelocal all postgres trust
je ne l'avait pas vu a la première lectureJe maintiens qu'il n'est pas nécessaire de mettre un mot de passe à l'utilisateur postgres (utilisateur db)
je suis d'accord moi je parlai de l'utilisateur système (decidément).
Mais tu peux aussi en mettre un password sur utilisateur DB si tu a besoin d'y (accéder depuis l'extérieur avec pgadmi3 par exemple) mais pour cela, il faut rajouter des truc du style dans le pg_hba.conf:
hostssl all postgres [x.x.x.x ip] [x.x.x.x mask] md5
le ssl étant fortement conseillé dans ce cas.
[^] # Re: Plus d'infos
Posté par lans843 . Évalué à 1.
[^] # Re: Plus d'infos
Posté par lans843 . Évalué à 1.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.