PostgreSQL Linux PAM Authentication Error

authenticationlinuxpostgresql

I'm using PSQL version 12.5 on Ubuntu 20.04.1. My pg_hba.conf file looks like this:

# DO NOT DISABLE!
# If you change this first entry you will need to make sure that the
# database superuser can access the database using some other method.
# Noninteractive access to all databases is required during automatic
# maintenance (custom daily cronjobs, replication, and similar tasks).
#
# Database administrative login by Unix domain socket
local   all             postgres                                peer

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# PAM Authentication
host    all             all             0.0.0.0/0               pam
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     peer
host    replication     all             127.0.0.1/32            md5
host    replication     all             ::1/128                 md5

I create a USER\Role with:

CREATE USER test WITH LOGIN;

Where test is a Linux user and is working fine. But when I run:

psql -U test 

I get the error:

postgres@ubuntu2004:~$ psql -U test
psql: error: FATAL:  Peer authentication failed for user "test"

Am I missing something?

Best Answer

Since you didn't specify the -h option, PostgreSQL connects via local Unix socket. This is governed by the local entry in pg_hba.conf. Hence you are authenticated with "peer" authentication. But since you are not operating system user test, peer authentication fails.

To get PAM authentication, connect with -h 127.0.0.1.