Thread: MD5 password issue

MD5 password issue

From
Andreas Wenk
Date:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi everybody,

I posted this allready to the ADMIN list but recieved no reply (what is for sure ok in a
way ;-) ). So I thought I'll give it a try here. Sorry for any inconvenience.

We are trying to understand an issue concerning the md5 password encryption. The situation
is as follows.

In pg_hba.conf we have:

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD

# "local" is for Unix domain socket connections only
local   all         all                               ident sameuser

# IPv4 local connections:
host    all         all         127.0.0.1/32          md5
host    all         all         192.168.97.0/24       md5

in pg_authid we get:

postgres=# SELECT rolname,rolpassword from pg_authid;
  rolname  |             rolpassword
- -----------+-------------------------------------
 postgres  |
 pgadmin   | plaintext
 odie      | md5passswwwwooooorrrd

The user odie was created with:
CREATE ROLE odie LOGIN ENCRYPTED PASSWORD 'feedme';

The user pgadmin was created with:
$ createuser -a -d -P -N -U postgres pgadmin

The -N parameter forces not to encrypt the password - what we can see as a result in
pg_authid (if this makes sense or not is another question  ;-)  ).

Now the question: why is the user pgadmin able to connect to the database using pgAdmin
III from 192.168.97.30? That sould not be possible ... or am I wrong?

Thanks for any advice

Cheers

Andy

- --
St.Pauli - Hamburg - Germany

Andreas Wenk

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFJb2y+Va7znmSP9AwRAmGlAKCaingauIMGRvIqAqMBVdiBfhkoXwCeM1kR
M/fZSYeJKq9tMe791MhN2J8=
=V7hS
-----END PGP SIGNATURE-----

Re: MD5 password issue

From
"Joshua D. Drake"
Date:
On Thu, 2009-01-15 at 18:05 +0100, Andreas Wenk wrote:

> postgres=# SELECT rolname,rolpassword from pg_authid;
>   rolname  |             rolpassword
> - -----------+-------------------------------------
>  postgres  |
>  pgadmin   | plaintext
>  odie      | md5passswwwwooooorrrd
>
> The user odie was created with:
> CREATE ROLE odie LOGIN ENCRYPTED PASSWORD 'feedme';
>
> The user pgadmin was created with:
> $ createuser -a -d -P -N -U postgres pgadmin
>

Per the help. You need to pass -E to have it be an encrypted (md5 hash)
style password. What version of PostgreSQL is this as I recall all newer
versions do this by default.

Usage:
  createuser [OPTION]... [ROLENAME]

Options:
  -s, --superuser           role will be superuser
  -S, --no-superuser        role will not be superuser
  -d, --createdb            role can create new databases
  -D, --no-createdb         role cannot create databases
  -r, --createrole          role can create new roles
  -R, --no-createrole       role cannot create roles
  -l, --login               role can login (default)
  -L, --no-login            role cannot login
  -i, --inherit             role inherits privileges of roles it is a
                            member of (default)
  -I, --no-inherit          role does not inherit privileges
  -c, --connection-limit=N  connection limit for role (default: no
limit)
  -P, --pwprompt            assign a password to new role
  -E, --encrypted           encrypt stored password
  -N, --unencrypted         do not encrypt stored password
  -e, --echo                show the commands being sent to the server
  --help                    show this help, then exit
  --version                 output version information, then exit

Connection options:
  -h, --host=HOSTNAME       database server host or socket directory
  -p, --port=PORT           database server port
  -U, --username=USERNAME   user name to connect as (not the one to
create)
  -W, --password            force password prompt

If one of -s, -S, -d, -D, -r, -R and ROLENAME is not specified, you will
be prompted interactively.


Joshua D. Drake


--
PostgreSQL - XMPP: jdrake@jabber.postgresql.org
   Consulting, Development, Support, Training
   503-667-4564 - http://www.commandprompt.com/
   The PostgreSQL Company, serving since 1997


Re: MD5 password issue

From
Tom Lane
Date:
Andreas Wenk <a.wenk@netzmeister-st-pauli.de> writes:
> In pg_hba.conf we have:

> # TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD

> # "local" is for Unix domain socket connections only
> local   all         all                               ident sameuser

> # IPv4 local connections:
> host    all         all         127.0.0.1/32          md5
> host    all         all         192.168.97.0/24       md5

> Now the question: why is the user pgadmin able to connect to the database using pgAdmin
> III from 192.168.97.30? That sould not be possible ... or am I wrong?

Why shouldn't it be possible?  You've specifically allowed connections
from that IP range.

(If you're wondering why he didn't have to type his password,
it's likely because pgAdmin is getting it out of ~/.pgpass or
some private settings file.)

            regards, tom lane

Re: MD5 password issue

From
Andreas Wenk
Date:
Hi Joshua

Joshua D. Drake schrieb:
> On Thu, 2009-01-15 at 18:05 +0100, Andreas Wenk wrote:
>
>> postgres=# SELECT rolname,rolpassword from pg_authid;
>>   rolname  |             rolpassword
>> - -----------+-------------------------------------
>>  postgres  |
>>  pgadmin   | plaintext
>>  odie      | md5passswwwwooooorrrd
>>
>> The user odie was created with:
>> CREATE ROLE odie LOGIN ENCRYPTED PASSWORD 'feedme';
>>
>> The user pgadmin was created with:
>> $ createuser -a -d -P -N -U postgres pgadmin
>>
>
> Per the help. You need to pass -E to have it be an encrypted (md5 hash)
> style password.

Sure - I know .... we added -N so that the password is not encrypted

What version of PostgreSQL is this as I recall all newer
> versions do this by default.
>
this was made with a 8.1 version ...

> Usage:
>   createuser [OPTION]... [ROLENAME]
>
> Options:
>   -s, --superuser           role will be superuser
>   -S, --no-superuser        role will not be superuser
>   -d, --createdb            role can create new databases
>   -D, --no-createdb         role cannot create databases
>   -r, --createrole          role can create new roles
>   -R, --no-createrole       role cannot create roles
>   -l, --login               role can login (default)
>   -L, --no-login            role cannot login
>   -i, --inherit             role inherits privileges of roles it is a
>                             member of (default)
>   -I, --no-inherit          role does not inherit privileges
>   -c, --connection-limit=N  connection limit for role (default: no
> limit)
>   -P, --pwprompt            assign a password to new role
>   -E, --encrypted           encrypt stored password
>   -N, --unencrypted         do not encrypt stored password
>   -e, --echo                show the commands being sent to the server
>   --help                    show this help, then exit
>   --version                 output version information, then exit
>
> Connection options:
>   -h, --host=HOSTNAME       database server host or socket directory
>   -p, --port=PORT           database server port
>   -U, --username=USERNAME   user name to connect as (not the one to
> create)
>   -W, --password            force password prompt
>
> If one of -s, -S, -d, -D, -r, -R and ROLENAME is not specified, you will
> be prompted interactively.
>
>
> Joshua D. Drake
>
>

--

St.Pauli - Hamburg - Germany

Andreas Wenk


Re: MD5 password issue

From
Andreas Wenk
Date:
Hi Tom,

Tom Lane schrieb:
> Andreas Wenk <a.wenk@netzmeister-st-pauli.de> writes:
>> In pg_hba.conf we have:
>
>> # TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
>
>> # "local" is for Unix domain socket connections only
>> local   all         all                               ident sameuser
>
>> # IPv4 local connections:
>> host    all         all         127.0.0.1/32          md5
>> host    all         all         192.168.97.0/24       md5
>
>> Now the question: why is the user pgadmin able to connect to the database using pgAdmin
>> III from 192.168.97.30? That sould not be possible ... or am I wrong?
>
> Why shouldn't it be possible?  You've specifically allowed connections
> from that IP range.

Yes thats correct with the IP address range. Maybe I did not understand
the auth concept yet. I thought, that with METHOD set to md5, a md5
hashed password is required. The password is submitted with the PHP 5
pg_connect function - as plain text.

> (If you're wondering why he didn't have to type his password,
> it's likely because pgAdmin is getting it out of ~/.pgpass or
> some private settings file.)
>
 >             regards, tom lane

Also to Peter. It is like that - the pasword is stored in ~/.pgpass as
expected.

So maybe the better question is: what is the difference between METHOD
password and md5? As I assume now because of your answers, it has
nothing to do with either the password is md5 hashed or not?

Thanks to everybody!

cheers

Andy

--

St.Pauli - Hamburg - Germany

Andreas Wenk


Re: MD5 password issue

From
Alvaro Herrera
Date:
Andreas Wenk wrote:

> Yes thats correct with the IP address range. Maybe I did not understand
> the auth concept yet. I thought, that with METHOD set to md5, a md5
> hashed password is required. The password is submitted with the PHP 5
> pg_connect function - as plain text.

It is specified to pg_connect as plain text, but it is sent over the
wire md5-hashed.

> So maybe the better question is: what is the difference between METHOD
> password and md5? As I assume now because of your answers, it has
> nothing to do with either the password is md5 hashed or not?

The difference is what travels on the wire.

--
Alvaro Herrera                                http://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 support

Re: MD5 password issue

From
Andreas Wenk
Date:

Alvaro Herrera schrieb:
> Andreas Wenk wrote:
>
>> Yes thats correct with the IP address range. Maybe I did not understand
>> the auth concept yet. I thought, that with METHOD set to md5, a md5
>> hashed password is required. The password is submitted with the PHP 5
>> pg_connect function - as plain text.
>
> It is specified to pg_connect as plain text, but it is sent over the
> wire md5-hashed.
>
>> So maybe the better question is: what is the difference between METHOD
>> password and md5? As I assume now because of your answers, it has
>> nothing to do with either the password is md5 hashed or not?
>
> The difference is what travels on the wire.
>

ok thanks - I think I got it now ... ;-)

Cheers

Andy

--

St.Pauli - Hamburg - Germany

Andreas Wenk