Forum Linux.debian/ubuntu mot de passe psql??? postgresql sous ubuntu

Posté par  .
Étiquettes : aucune
-1
5
août
2010
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  (site web personnel, Mastodon) . Évalué à 1.

    http://www.google.ch/search?hl=fr&q=reset+psql+password

    Peut-être?

    La gelée de coings est une chose à ne pas avaler de travers.

    • [^] # Re: HY

      Posté par  . Évalué à 1.

      merci pour votre réponse.

      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  . Évalué à 2.

    Salut,

    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  . Évalué à 1.

      merci de répondre
      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  . Évalué à 2.

        Bonsoir !
        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  . Évalué à 3.

          Je ne suis pas tout à fait d'accord pour la nécessité du mot de passe postgres :

          [...] 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  . Évalué à 1.

            nan tu as raison, en etant obligé d'être root pour se logger en postgres ca evite a nimportequi de pouvoir se connecter en tant que postgres.

            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  . Évalué à 1.

            En effet, je me suis un peu mélangé entre le mot de passe du compte postgres qui a un compte sur la machine et celui qui a un accès aux bases de données, l'utilisateur de postgresql lui-même.

            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  . Évalué à 1.

              Donc, après renseignements, voici une combine que l'on vient de me donner, et qui me satisfait pleinement :
              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  . É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  . Évalué à 1.

              En fait en ayant tout bien relu et fait des petits test, pour avoir un accès via l'utilisateur postgres sans problème de sécurité, il faut mettre

              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  . Évalué à 1.

                effectivement moi j'ai le
                local all postgres ident sameuser et pas le local all postgres trust je ne l'avait pas vu a la première lecture

                Je 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  . Évalué à 1.

          Merci t'avais raison pour le trust!!
          • [^] # Re: Plus d'infos

            Posté par  . Évalué à 1.

            pour savoir si ça vraiment de là j'ai enlevé le trust et remis le ident et ça marche il me demande plus de mot de passe!!! pfffffffffff j'avoue que je ne comprends plus rien!!! en tout cas merci à tous pour vos éclaircissement ça va me servir par la suite!

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.