2017-10-19 27 views
3

.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) 
  1. je me suis connecté au serveur de CentOS en tant qu'utilisateur 'frank'
  2. 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) 
    
  3. 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. 
  1. 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. 
    
  2. 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 
    
  3. 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 
  1. J'ai changé le mot de passe de l'utilisateur postgres comme celui-ci.

    postgres=# ALTER USER postgres WITH PASSWORD 'pwd'; 
    
  2. Contenu du fichier .pgpass.

    localhost:5432:postgres:postgres:pwd 
    
  3. 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 
  1. 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=# 
    
  2. 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

  1. 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.

Répondre

0

J'ai eu le même problème avec CentOS 7. Ma solution pour vous est la suivante:
comme d'abord, vérifiez certaines variables dans le script de service:

cat/usr/lib/systemd/system/pgagent_96.Service

1) par défaut utilisateur = pgagent et Group = pgagent - c'est propriétaire/groupe de votre fichier .pgpass,
vous devez définir
chown pgagent: pgagent .pgpass
chmod 0600 .pgpass
2) ensuite, déplacez .pgpass fichier dans le répertoire où pgagent utilisateur peut lire ce fichier
(/ home/frank est redable pas pour l'utilisateur pg agent, essayez, par exemple, votre répertoire d'installation postgres /var/lib/pgsql/9.6 ou/var/lib/pgsql)
3) vérifiez la variable d'emplacement de la configuration de pgagent_96,
par défaut EnvironmentFile =/etc/pgagent/pgagent_96.conf - vous avez besoin d'éditer ce fichier.

Prochaine étape, ouverte pgagent_96.conf dans un éditeur et faire des changements:
a) la valeur de changement de variable DBHost = localhost (ce qui est important)
b) ajouter une variable PGPASSFILE =/path/votre/pgpasfile/.pgpass (PGPASSFILE =/var/lib/pgsql/.pgpass)

Dans mon cas, pgagent a commencé à fonctionner sans problème.

+0

Pouvez-vous ajouter une explication de la raison pour laquelle vous pensez que c'est une solution au problème? –

+0

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