Thread: source of connection fails at pg startup?

source of connection fails at pg startup?

From
Stuart McGraw
Date:
When I start my postgresql server I get 11 messages reporting that "password
authentication failed for user 'postgres'" spaced about ~.5sec apart.
I increased the logging level to INFO, and added the application name to the
message format (after the pid) which resulted in:

   2018-05-21 23:04:44.395 MDT [20232][[unknown]] [unknown]@[unknown] LOG:  connection received: host=[local]
   2018-05-21 23:04:44.395 MDT [20232][[unknown]] postgres@postgres FATAL:  password authentication failed for user
"postgres"
   2018-05-21 23:04:44.395 MDT [20232][[unknown]] postgres@postgres DETAIL:  Password does not match for user
"postgres".
    Connection matched pg_hba.conf line 90: "local   all   all   md5"

This is on a Ububuntu-18.04 machine with postgresql-10.3 from Ubuntu.  As distributed
the pg_hba.conf line mentioned used "peer" authentication method, I have changed to
"md5".  When I change back to "peer" the error messages go away.  The processes are
too short-lived for me to catch with ps.  Successful connect message example:

   2018-05-21 23:25:13.577 MDT [21080][[unknown]] [unknown]@[unknown] LOG:  connection received: host=[local]
   2018-05-21 23:25:13.578 MDT [21080][[unknown]] postgres@postgres LOG:  connection authorized: user=postgres
database=postgres
   2018-05-21 23:25:13.579 MDT [21080][psql] postgres@postgres LOG:  disconnection: session time: 0:00:00.002
user=postgresdatabase=postgres host=[local]
 

My question is, how can I find out where the connections are coming from so I can
modify them to provide passwords (so I can go back to "md5")?  Are there startup-
time connections made by postgresql itself or is this likely from some Ubuntu-
specific configuration?

Thanks.


Re: source of connection fails at pg startup?

From
Luan Huynh
Date:
Hi Stuart McGraw,

How about your "log_line_prefix" ?

On Tue, May 22, 2018 at 7:48 AM, Stuart McGraw <smcg4191@mtneva.com> wrote:
When I start my postgresql server I get 11 messages reporting that "password
authentication failed for user 'postgres'" spaced about ~.5sec apart.
I increased the logging level to INFO, and added the application name to the
message format (after the pid) which resulted in:

  2018-05-21 23:04:44.395 MDT [20232][[unknown]] [unknown]@[unknown] LOG:  connection received: host=[local]
  2018-05-21 23:04:44.395 MDT [20232][[unknown]] postgres@postgres FATAL:  password authentication failed for user "postgres"
  2018-05-21 23:04:44.395 MDT [20232][[unknown]] postgres@postgres DETAIL:  Password does not match for user "postgres".
        Connection matched pg_hba.conf line 90: "local   all   all   md5"

This is on a Ububuntu-18.04 machine with postgresql-10.3 from Ubuntu.  As distributed
the pg_hba.conf line mentioned used "peer" authentication method, I have changed to
"md5".  When I change back to "peer" the error messages go away.  The processes are
too short-lived for me to catch with ps.  Successful connect message example:

  2018-05-21 23:25:13.577 MDT [21080][[unknown]] [unknown]@[unknown] LOG:  connection received: host=[local]
  2018-05-21 23:25:13.578 MDT [21080][[unknown]] postgres@postgres LOG:  connection authorized: user=postgres database=postgres
  2018-05-21 23:25:13.579 MDT [21080][psql] postgres@postgres LOG:  disconnection: session time: 0:00:00.002 user=postgres database=postgres host=[local]

My question is, how can I find out where the connections are coming from so I can
modify them to provide passwords (so I can go back to "md5")?  Are there startup-
time connections made by postgresql itself or is this likely from some Ubuntu-
specific configuration?

Thanks.


Re: source of connection fails at pg startup?

From
Adrian Klaver
Date:
On 05/21/2018 10:48 PM, Stuart McGraw wrote:
> When I start my postgresql server I get 11 messages reporting that 
> "password
> authentication failed for user 'postgres'" spaced about ~.5sec apart.
> I increased the logging level to INFO, and added the application name to 
> the
> message format (after the pid) which resulted in:
> 
>    2018-05-21 23:04:44.395 MDT [20232][[unknown]] [unknown]@[unknown] 
> LOG:  connection received: host=[local]
>    2018-05-21 23:04:44.395 MDT [20232][[unknown]] postgres@postgres 
> FATAL:  password authentication failed for user "postgres"
>    2018-05-21 23:04:44.395 MDT [20232][[unknown]] postgres@postgres 
> DETAIL:  Password does not match for user "postgres".
>      Connection matched pg_hba.conf line 90: "local   all   all   md5"
> 
> This is on a Ububuntu-18.04 machine with postgresql-10.3 from Ubuntu.  
> As distributed
> the pg_hba.conf line mentioned used "peer" authentication method, I have 
> changed to
> "md5".  When I change back to "peer" the error messages go away.  The 
> processes are
> too short-lived for me to catch with ps.  Successful connect message 
> example:
> 
>    2018-05-21 23:25:13.577 MDT [21080][[unknown]] [unknown]@[unknown] 
> LOG:  connection received: host=[local]
>    2018-05-21 23:25:13.578 MDT [21080][[unknown]] postgres@postgres 
> LOG:  connection authorized: user=postgres database=postgres
>    2018-05-21 23:25:13.579 MDT [21080][psql] postgres@postgres LOG:  
> disconnection: session time: 0:00:00.002 user=postgres database=postgres 
> host=[local]
> 
> My question is, how can I find out where the connections are coming from 
> so I can
> modify them to provide passwords (so I can go back to "md5")?  Are there 

 From the error messages it looks like your connections are already 
supplying passwords. I am guessing that the issue is that you have not 
created a password for the database user postgres. See the below:

https://help.ubuntu.com/community/PostgreSQL

Basic Server Setup

for how to do that. If you have set up a password then the connections 
are using the wrong one. For catching the connections uncomment and set 
to on:

log_connections
log_disconnections

in postgresql.conf.

You might also try something like:

watch -n 0.5 'ps aux|grep post'

to see if you catch the connections from the system end.

> startup-
> time connections made by postgresql itself or is this likely from some 
> Ubuntu-
> specific configuration?
> 
> Thanks.
> 
> 


-- 
Adrian Klaver
adrian.klaver@aklaver.com


Re: source of connection fails at pg startup?

From
Tom Lane
Date:
Stuart McGraw <smcg4191@mtneva.com> writes:
> When I start my postgresql server I get 11 messages reporting that "password
> authentication failed for user 'postgres'" spaced about ~.5sec apart.

Sounds like the trace of something probing the postmaster to see if it's
ready yet.  Pre-v10 versions of pg_ctl did exactly that, but with a
1-second wait interval, so this couldn't be pg_ctl itself (even if you
hadn't specified this is v10).

> This is on a Ububuntu-18.04 machine with postgresql-10.3 from Ubuntu.  As distributed
> the pg_hba.conf line mentioned used "peer" authentication method, I have changed to
> "md5".  When I change back to "peer" the error messages go away.

In that case, whatever is doing it is running as the postgres user.

Putting all this together, I'd bet on the connections coming from an
Ubuntu-specific startup script.  Poke around in their PG start script
for something like a pg_isready call in a loop with an 0.5 second wait.

I imagine that undoing that would be rather difficult, even if you
wanted to run with a locally-modified script.  They probably had a
reason why they didn't want to leave it to pg_ctl to do the waiting.

Personally, my recommendation would be to go back to "peer" auth,
at least for local connections by postgres.  There is no reason
to think that passwords are a more secure approach: password
management is a hard problem, especially for automated connections
like these.

            regards, tom lane


Re: source of connection fails at pg startup?

From
Stuart McGraw
Date:
On 05/22/2018 07:58 AM, Tom Lane wrote:
> Stuart McGraw <smcg4191@mtneva.com> writes:
>> When I start my postgresql server I get 11 messages reporting that "password
>> authentication failed for user 'postgres'" spaced about ~.5sec apart.
> 
> Sounds like the trace of something probing the postmaster to see if it's
> ready yet.  Pre-v10 versions of pg_ctl did exactly that, but with a
> 1-second wait interval, so this couldn't be pg_ctl itself (even if you
> hadn't specified this is v10).
> 
>> This is on a Ububuntu-18.04 machine with postgresql-10.3 from Ubuntu.  As distributed
>> the pg_hba.conf line mentioned used "peer" authentication method, I have changed to
>> "md5".  When I change back to "peer" the error messages go away.
> 
> In that case, whatever is doing it is running as the postgres user.
> 
> Putting all this together, I'd bet on the connections coming from an
> Ubuntu-specific startup script.  Poke around in their PG start script
> for something like a pg_isready call in a loop with an 0.5 second wait.
> 
> I imagine that undoing that would be rather difficult, even if you
> wanted to run with a locally-modified script.  They probably had a
> reason why they didn't want to leave it to pg_ctl to do the waiting.
> 
> Personally, my recommendation would be to go back to "peer" auth,
> at least for local connections by postgres.  There is no reason
> to think that passwords are a more secure approach: password
> management is a hard problem, especially for automated connections
> like these.

Thanks, you were right, the issue is indeed from a Ubuntu (or Debian)
specific startup script.  I eventually found that they use a Perl
script, /usr/bin/pg_ctlcluster, to run postgresql, and in there I
found a function that runs psql up to 10 times at .5 second intervals
to check if the server is ready.

There didn't seem to be any obvious way to give it a password.  The
script intentionally sets the PGPASSWORD environment variable to a
bogus value.  Giving both OS users root and postgres .pgpass files
didn't help, I guess because of the bogus PGPASSWORD value takes
precedence.

The reason for a password is not so much better security but that I
have bunch of scripts that set up and manipulate databases that came
over from my former Fedora system and that were written expecting the
postgres account has a password.  I made a couple stabs at changing
some of them a while ago but it involved running the commands with
"su - postgres ...".  Some are embedded in yaml, involve variable
substitution, and the multiple layers of quoting was just too much
for my meager scripting skills.  :-(

Given that I understand the problem now thanks to you, Adrian and
Luan Huynh, and that the errors don't seem to have any bad effects on
the server's operation, I think I will just live with them for now.

Thanks very much for everyone's help.