Aucune invite de mot de passe pour le super-utilisateur postgresql
Après que j'ai installé PostgreSQL 9.1 sur Ubuntu 12.04 j'ai mis le mot de passe pour le "postgres" compte super-utilisateur. Je veux que tous les utilisateurs doivent entrer leur mot de passe lors de loging. C'est pourquoi j'ai configuré pg_hba.conf comme suit:
#Database administrative login by Unix domain socket
local all postgres md5
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all md5
J'ai redémarré postgresql après avoir fait ces changements. Quand je fais ce psql -U testuser
je me demande un mot de passe, mais lorsque je me connecte avec le "postgres" compte comme psql -U postgres
je n'ai pas de mot de passe rapide et suis connecté.
Si je force l'invite de mot de passe avec psql -U postgres -W
je peux me connecter en tapant le mot de passe correct ou en tapant rien du tout. En tapant un mot de passe erroné est rejeté.
Quelqu'un peut-il m'expliquer pourquoi ce qui se passe?
Sur une remarque: je vois beaucoup d'exemple où les gens utilisent ident que la méthode d'authentification pour le "postgres" de l'utilisateur, en faisant valoir que, pour devenir le "postgres" un utilisateur a besoin du mot de passe root de la machine. Je suppose que le raisonnement est que si un attaquant obtient un accès root, votre faire de toute façon. Je préfère de se connecter avec un mot de passe si, celui qui n'est pas le même que le mot de passe root. Je visez plutôt d'avoir des mots de passe différents pour différentes choses. Est-ce raisonnable?
Sortie de grep '^[^#]' pg_hba.conf
local all postgres md5
local all all md5
host all all 127.0.0.1/32 md5
OriginalL'auteur Basil | 2012-08-14
Vous devez vous connecter pour publier un commentaire.
Votre
pg_hba.conf
devrait en effet besoin d'un mot de passe pour les connexions socket unix, mais il y a toujours des moyens de contourner cela que vous devez vérifier:un
.pgpass
fichier dans la postgres maison répertoire contenant le mot de passe (également vérifier la PGPASSFILE variable d'environnement pour un chemin non-standard).la PGPASSWORD variable d'environnement peut être défini.
Et il y a aussi la possibilité que vous modifiez le mauvais pg_hba.fichier conf.
Lorsqu'il est connecté en tant que postgres, le chemin d'accès peut être obtenu pour la vérification avec la
SHOW hba_file
commande SQL.Aussi, vous pouvez consulter le fichier journal,
/var/log/postgresql/postgresql-9.1-main.log
la confirmation que les fichiers de configuration sont rechargées lorsque vous demandez pour elle, et de regarder pour tout message suspect au moment de l'authentification.Que la raison pourquoi sans mot de passe des connexions avec l'utilisateur postgres sont communs, la debian PG-9.1
pg_hba.conf
a ce commentaire lorsque vous interdisez:Depuis Debian et Ubuntu utiliser le même postgres des paquets, cela s'applique à Ubuntu.
l'authentification d'hôte devrait être de trouver pour cela, en supposant que vous ne laissez pas les gens de se connecter au serveur sous la postgres compte.
J'ai constaté le même comportement dans Windows. Après l'ajout de nouvelles connexions dans PgAdminIII, je n'étais pas invité à entrer un mot de passe par psql lors de la connexion avec postgres. Le coupable était pgpass.conf, créé automatiquement par PgAdminIII dans %APPDATA%\postgresql dossier. Merci Daniel.
OriginalL'auteur Daniel Vérité
Re votre comportement bizarre, je pense que vous avez manqué une ligne de
pg_hba.conf
qui est spécifique à l'postgres
de l'utilisateur. S'il vous plaît montrer la sortie de:Comme pour ident vs md5; personnellement, je préfère ident pour l'utilisation interactive en développement, et c'est bien pour les utilisateurs normaux, mais je ne pense pas que donner l'accès à la
postgres
utilisateur par l'intermédiaire desudo
est une excellente idée. Les deuxsudo -u postgres psql
etpsql -U postgres -W
accorder l'accès à la super-utilisateur postgres rôle et donc l'accès au système de fichiers que l'utilisateur de base de données. Ni exiger un mot de passe root, etsudo
peut facilement être limité parsudoers
à la limite de l'invocation de l'utilisateur à courir justepsql
. Cependant, avecsudo -u postgres psql
la client code s'exécute en tant quepostgres
trop, c'est donc une plus grande surface d'attaque, et il y a toujours la possibilité à l'utilisateur de trouver un moyen de contourner votresudoer
limites.- Je utiliser
ident
en dev,md5
dans la production.OriginalL'auteur Craig Ringer