.pgpass ne semble pas fonctionner. Pourriez-vous vérifier mon paramètre pgagent?Puis-je utiliser .pgpass dans SELinux? [centos7, pgagent_96, postgresql 9.6.5]
OS : centos 7 (I did NOT disable selinux)
Database : postgresql 9.6.5
pgagent : pgagent_96 3.4.0-9.rhel7 (installed package using yum)
- je me suis connecté au serveur de CentOS en tant qu'utilisateur 'frank'
Avant de commencer pgagent, j'ai vérifié l'état de pgagent. (Je ne l'ai pas activer le service pgagent_96.)
[[email protected]]$ systemctl status pgagent_96.service ● pgagent_96.service - PgAgent for PostgreSQL 9.6 Loaded: loaded (/usr/lib/systemd/system/pgagent_96.service; disabled; vendor preset: disabled) Active: inactive (dead)
J'ai commencé pgagent. Au début, ça a l'air réussi. Mais après des dizaines de secondes, il a échoué à créer une connexion et est mort. (Lors du démarrage CentOS m'a demandé le mot de passe OS Frank.)
[[email protected]]$ systemctl start pgagent_96.service [[email protected]]$ systemctl status pgagent_96.service ● pgagent_96.service - PgAgent for PostgreSQL 9.6 Loaded: loaded (/usr/lib/systemd/system/pgagent_96.service; disabled; vendor preset: disabled) Active: active (running) since 2017-10-16 16:42:11 KST; 5s ago Process: 9507 ExecStart=/usr/bin/pgagent_96 -s ${LOGFILE} hostaddr=${DBHOST} dbname=${DBNAME} user=${DBUSER} port=${DBPORT} (code=exited, status=0/SUCCESS) Main PID: 9510 (pgagent_96) CGroup: /system.slice/pgagent_96.service └─9510 /usr/bin/pgagent_96 -s /var/log/pgagent_96.log hostaddr=127.0.0.1 dbname=postgres user=postgres port=5432 16 Oct 16:42:11 web.frank.net systemd[1]: Starting PgAgent for PostgreSQL 9.6... 16 Oct 16:42:11 web.frank.net systemd[1]: Started PgAgent for PostgreSQL 9.6.
(Après quelques dizaines de secondes ...)
[[email protected]]$ systemctl status pgagent_96.service
● pgagent_96.service - PgAgent for PostgreSQL 9.6
Loaded: loaded (/usr/lib/systemd/system/pgagent_96.service; disabled; vendor preset: disabled)
Active: failed (Result: exit-code) since 2017-10-16 16:42:56 KST; 4min 9s ago
Process: 9507 ExecStart=/usr/bin/pgagent_96 -s ${LOGFILE} hostaddr=${DBHOST} dbname=${DBNAME} user=${DBUSER} port=${DBPORT} (code=exited, status=0/SUCCESS)
Main PID: 9510 (code=exited, status=1/FAILURE)
16 Oct 16:42:11 web.frank.net systemd[1]: Starting PgAgent for PostgreSQL 9.6...
16 Oct 16:42:11 web.frank.net systemd[1]: Started PgAgent for PostgreSQL 9.6.
16 Oct 16:42:56 web.frank.net systemd[1]: pgagent_96.service: main process exited, code=exited, status=1/FAILURE
16 Oct 16:42:56 web.frank.net systemd[1]: Unit pgagent_96.service entered failed state.
16 Oct 16:42:56 web.frank.net systemd[1]: pgagent_96.service failed.
J'ai vérifié journal pgagent. (Connectez-vous /var/log/pgagent_96.log)
WARNING: Couldn't create the primary connection (attempt 1): fe_sendauth: no password supplied WARNING: Couldn't create the primary connection (attempt 2): fe_sendauth: no password supplied WARNING: Couldn't create the primary connection (attempt 3): fe_sendauth: no password supplied WARNING: Couldn't create the primary connection (attempt 4): fe_sendauth: no password supplied WARNING: Couldn't create the primary connection (attempt 5): fe_sendauth: no password supplied WARNING: Couldn't create the primary connection (attempt 6): fe_sendauth: no password supplied WARNING: Couldn't create the primary connection (attempt 7): fe_sendauth: no password supplied WARNING: Couldn't create the primary connection (attempt 8): fe_sendauth: no password supplied WARNING: Couldn't create the primary connection (attempt 9): fe_sendauth: no password supplied WARNING: Couldn't create the primary connection (attempt 10): fe_sendauth: no password supplied ERROR: Stopping pgAgent: Couldn't establish the primary connection with the database server.
vérifié mon fichier .pgpass. (.pgpass est dans le répertoire de Frank./Home/frank)
[[email protected]]$ ls -alZ .pgpass -rw-------. frank frank unconfined_u:object_r:user_home_t:s0 .pgpass [[email protected]]$ ls -al .pgpass -rw-------. 1 frank frank 43 16 Oct 16:23 .pgpass [[email protected]]$ id -Z unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 [[email protected]]$ id uid=1000(frank) gid=1000(frank) groups=1000(frank),10(wheel) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
vérifié mon pg_hba.conf.
[[email protected]]$ su - postgres -bash-4.2$ pwd /var/lib/pgsql/9.6/data -bash-4.2$ ls -alZ pg_hba.conf -rw-------. postgres postgres unconfined_u:object_r:postgresql_db_t:s0 pg_hba.conf(pg_hba.conf)
[Contenu de pg_hba.conf]
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
#local all all peer
local all all md5
# IPv4 local connections:
#host all all 127.0.0.1/32 ident
host all all 122.32.2.21/32 md5 (122.32.2.21 is my server's IP)
# IPv6 local connections:
#host all all ::1/128 ident
host all all ::1/128 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local replication postgres peer
#host replication postgres 127.0.0.1/32 ident
#host replication postgres ::1/128 ident
J'ai changé le mot de passe de l'utilisateur postgres comme celui-ci.
postgres=# ALTER USER postgres WITH PASSWORD 'pwd';
Contenu du fichier .pgpass.
localhost:5432:postgres:postgres:pwd
J'ai changé de propriétaire, groupe de .pgpass de frank à postgres. Mais le résultat était le même. J'ai testé la même chose pour l'utilisateur OS 'root' (/ root), 'postgres' (/ var/lib/pgsql), et deux autres utilisateurs normaux qui ont un répertoire personnel dans/home.
(1) Essayez de démarrer comme OS utilisateur 'root'
[[email protected] frank]# ls -al .pgpass
-rw-------. 1 postgres postgres 43 10월 16 17:08 .pgpass
[[email protected] frank]# ls -alZ .pgpass
-rw-------. postgres postgres unconfined_u:object_r:user_home_t:s0 .pgpass
[[email protected] frank]# cat .pgpass
localhost:5432:postgres:postgres:pwd
[[email protected] frank]# systemctl start pgagent_96 (Here, centos asked frank's OS password)
[[email protected] frank]# systemctl status pgagent_96
● pgagent_96.service - PgAgent for PostgreSQL 9.6
Loaded: loaded (/usr/lib/systemd/system/pgagent_96.service; disabled; vendor preset: disabled)
Active: failed (Result: exit-code) since 2017-10-16 23:33:15 KST; 3s ago
Process: 25928 ExecStart=/usr/bin/pgagent_96 -s ${LOGFILE} hostaddr=${DBHOST} dbname=${DBNAME} user=${DBUSER} port=${DBPORT} (code=exited, status=0/SUCCESS)
Main PID: 25930 (code=exited, status=1/FAILURE)
16 Oct 23:32:30 web.frank.net systemd[1]: Starting PgAgent for Postgre....
16 Oct 23:32:30 web.frank.net systemd[1]: Started PgAgent for PostgreS....
16 Oct 23:33:15 web.frank.net systemd[1]: pgagent_96.service: main pro...E
16 Oct 23:33:15 web.frank.net systemd[1]: Unit pgagent_96.service ente....
16 Oct 23:33:15 web.frank.net systemd[1]: pgagent_96.service failed.
Hint: Some lines were ellipsized, use -l to show in full.
(2) Essayez de démarrer en tant qu'utilisateur OS 'franc'
[[email protected] ~]$ systemctl start pgagent_96 (Here, centos asked frank's OS password)
[[email protected] ~]$ systemctl status pgagent_96
● pgagent_96.service - PgAgent for PostgreSQL 9.6
Loaded: loaded (/usr/lib/systemd/system/pgagent_96.service; disabled; vendor preset: disabled)
Active: failed (Result: exit-code) since 월 2017-10-16 23:41:03 KST; 1min 21s ago
Process: 26531 ExecStart=/usr/bin/pgagent_96 -s ${LOGFILE} hostaddr=${DBHOST} dbname=${DBNAME} user=${DBUSER} port=${DBPORT} (code=exited, status=0/SUCCESS)
Main PID: 26533 (code=exited, status=1/FAILURE)
16 Oct 23:40:18 web.frank.net systemd[1]: Starting PgAgent for Postgre....
16 Oct 23:40:18 web.frank.net systemd[1]: Started PgAgent for PostgreS....
16 Oct 23:41:03 web.frank.net systemd[1]: pgagent_96.service: main pro...E
16 Oct 23:41:03 web.frank.net systemd[1]: Unit pgagent_96.service ente....
16 Oct 23:41:03 web.frank.net systemd[1]: pgagent_96.service failed.
Hint: Some lines were ellipsized, use -l to show in full.
(3) Essayez de démarrer en tant qu'utilisateur OS 'postgres'
-bash-4.2$ systemctl start pgagent_96 (Here, centos asked frank's OS password)
-bash-4.2$ systemctl status pgagent_96
● pgagent_96.service - PgAgent for PostgreSQL 9.6
Loaded: loaded (/usr/lib/systemd/system/pgagent_96.service; disabled; vendor preset: disabled)
Active: failed (Result: exit-code) since 월 2017-10-16 23:54:22 KST; 21s ago
Process: 27511 ExecStart=/usr/bin/pgagent_96 -s ${LOGFILE} hostaddr=${DBHOST} dbname=${DBNAME} user=${DBUSER} port=${DBPORT} (code=exited, status=0/SUCCESS)
Main PID: 27515 (code=exited, status=1/FAILURE)
(4) Contexte de sécurité de 'root' et 'franc 'Et '' postgres
(racine)
[[email protected] ~]# id
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
(franc)
[[email protected] ~]$ id
uid=1000(frank) gid=1000(frank) groups=1000(frank),10(wheel) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
(postgres)
-bash-4.2$ id
uid=26(postgres) gid=26(postgres) groups=26(postgres) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
de Bien sûr, je peux me connecter à la base de données comme ça. Mais je ne peux pas utiliser le fichier .pgpass.
[[email protected] bin]# su - postgres -bash-4.2$ psql -h localhost -U postgres psql (9.6.5) postgres=#
Actuellement, je pense que ce problème peut être lié au contexte de la sécurité des .pgpass. pgagent_96 ou systemd peut ne pas être autorisé à lire le fichier .pgpass ... (À mon avis ^^) J'ai vérifié si pgagent_96 ou systemd peut lire .pgpass.
(1) I jeu de variables PGPASSFILE dans/etc/profile [Contenu de/etc/profile]
export PGDATA=/var/lib/pgsql/9.6/data
export PGPASSFILE=/var/lib/pgsql/.pgpass
(2) tenté de démarrer pgagent_96 changer .pgpass type de contexte de user_home_t à postgresql_db_t, bin_t, usr_t. Mais j'ai la même erreur.
-bash-4.2$ echo $PGPASSFILE
/var/lib/pgsql/.pgpass
-bash-4.2$ ls -alZ .pgpass
-rw-------. postgres postgres unconfined_u:object_r:postgresql_db_t:s0 .pgpass
-bash-4.2$ systemctl start pgagent_96
====> failed to start pgAgent_96. same error.
-bash-4.2$ chcon --type bin_t .pgpass
-bash-4.2$ ls -alZ .pgpass
-rw-------. postgres postgres unconfined_u:object_r:bin_t:s0 .pgpass
-bash-4.2$ systemctl start pgagent_96
====> failed to start pgAgent_96. same error.
-bash-4.2$ chcon --type usr_t .pgpass
-bash-4.2$ ls -alZ .pgpass
-rw-------. postgres postgres unconfined_u:object_r:usr_t:s0 .pgpass
-bash-4.2$ systemctl start pgagent_96
====> failed to start pgAgent_96. same error.
[Contexte de sécurité de pgagent_96, systemd, pg_hba.conf]
[[email protected] frank]# ls -alZ /usr/bin/pgagent_96
-rwxr-xr-x. root root system_u:object_r:bin_t:s0 /usr/bin/pgagent_96
[[email protected] frank]# ls -alZ /usr/lib/systemd/systemd
-rwxr-xr-x. root root system_u:object_r:init_exec_t:s0 /usr/lib/systemd/systemd
[[email protected] frank]# ls -alZ /var/lib/pgsql/9.6/data/pg_hba.conf
-rw-------. postgres postgres unconfined_u:object_r:postgresql_db_t:s0 /var/lib/pgsql/9.6/data/pg_hba.conf
Maintenant, je ne sais pas ce que je devrais essayer. Aidez-moi s'il vous plaît ...
MISE À JOUR
- J'ai installé postgresql 10, pgagent_10. Mais le résultat est le même ... Je veux démarrer pgagent en utilisant la commande systemctl. J'autoriserai le service pagent à démarrer le service pgagent automatiquement.
Pouvez-vous ajouter une explication de la raison pour laquelle vous pensez que c'est une solution au problème? –
Selon mon expérience, la variable hostadr de pgagent et le nom d'hôte dans le fichier .pgpass doivent avoir la même valeur. Dans mon cas, je l'ai mis à localhost. – Serge