Skip to content
Snippets Groups Projects
  • Bruce Momjian's avatar
    04c1f729
    PAM authentication: · 04c1f729
    Bruce Momjian authored
    > pam_strerror() should be used a few more times, rather than just saying
    > "Error!".  Also, the configure.in snippet seems wrong.  You add
    > -I$pam_prefix/include/security to $INCLUDES and then you #include
    > <security/pam_appl.h>.  This whole thing is probably unnecessary, since
    > PAM is a system library on the systems where it exists, so the headers
    > and libraries are found automatically, unlike OpenSSL and
    > Kerberos.
    
    See attached revised patch. (I'm sure the configure.in stuff can be done
    right/better, I'm just not enough of a autoconf guru to know what to
    change it to.)
    
    Dominic J. Eidson
    04c1f729
    History
    PAM authentication:
    Bruce Momjian authored
    > pam_strerror() should be used a few more times, rather than just saying
    > "Error!".  Also, the configure.in snippet seems wrong.  You add
    > -I$pam_prefix/include/security to $INCLUDES and then you #include
    > <security/pam_appl.h>.  This whole thing is probably unnecessary, since
    > PAM is a system library on the systems where it exists, so the headers
    > and libraries are found automatically, unlike OpenSSL and
    > Kerberos.
    
    See attached revised patch. (I'm sure the configure.in stuff can be done
    right/better, I'm just not enough of a autoconf guru to know what to
    change it to.)
    
    Dominic J. Eidson
pg_hba.conf.sample 8.85 KiB
# 
#		  PostgreSQL HOST-BASED ACCESS (HBA) CONTROL FILE
# 
# 
# This file controls:
# 	o which hosts are allowed to connect
# 	o how users are authenticated on each host
# 	o databases accessible by each host
# 
# It is read on postmaster startup and when the postmaster receives a SIGHUP.
# If you edit the file on a running system, you have to SIGHUP the postmaster
# for the changes to take effect.
# 
# Each line is a new record. Records cannot be continued across multiple
# lines. Comments begin with # and continue to the end of the line. 
# Blank lines are ignored. A record consists of tokens separated by 
# multiple spaces or tabs.
# 
# The first token of a record indicates its type. The remainder of the
# record is interpreted based on its type.
# 
# Record Types
# ============
# 
# There are three types of records:
# 	o host
# 	o hostssl
# 	o local
# 
# host
# ----
# 
# This record identifies the networked hosts that are permitted to connect
# via IP connections.
# 
# Format:
# 
#   host  DBNAME  IP_ADDRESS  ADDRESS_MASK  AUTH_TYPE  [AUTH_ARGUMENT]
# 
# DBNAME can be:
# 	o the name of a PostgreSQL database
# 	o "all" to indicate all databases
# 	o "sameuser" to allow access only to databases with the same
# 	  name as the connecting user
# 
# IP_ADDRESS and ADDRESS_MASK are standard dotted decimal IP address and
# mask values. IP addresses can only be specified numerically, not as
# domain or host names.
# 
# AUTH_TYPE and AUTH_ARGUMENT are described below.
# 
# There can be multiple "host" records, possibly with overlapping sets of
# host addresses. The postmaster finds the first entry that matches the
# connecting host IP address and the requested database name. If no entry
# matches the database/hostname combination, the connection is rejected.
# 
# 
# hostssl
# -------
# 
# The format of this record is identical to "host".
# 
# This record identifies a set of network hosts that are permitted to
# connect to databases over secure SSL IP connections. Note that a "host"
# record will also allow SSL connections.  "hostssl" forces these
# hosts to use *only* SSL-secured connections.
# 
# This keyword is only available if the server was compiled with SSL
# support enabled.
# 
# 
# local
# -----
# 
# This record identifies the authentication to use when connecting to
# the server via a local UNIX domain socket.  UNIX-socket connections are
# allowed only if this record type appears.
# 
# Format:
#   local  DBNAME  AUTH_TYPE  [AUTH_ARGUMENT]
# 
# This format is identical to the "host" record type except the IP_ADDRESS
# and ADDRESS_MASK fields are omitted.
# 
# As with "host" records, the first "local" record matching the requested
# database name is used.
# 
# 
# 
# Authentication Types (AUTH_TYPE)
# ================================
# 
# AUTH_TYPE indicates the method used to authenticate users. The username
# is specified in the connection request.  A different AUTH_TYPE can be
# specified for each record in the file.
# 
#   trust:  	No authentication is done. Any valid username is accepted,
# 		including the PostgreSQL superuser. This option should
# 		be used only for hosts where all users are trusted.
# 
#   password:	Authentication is done by matching a password supplied
#		in clear by the host. If no AUTH_ARGUMENT is used, the
#		password is compared with the user's entry in the
#		pg_shadow table.
# 
# 		If AUTH_ARGUMENT is specified, the username is looked up
# 		in that file in the $PGDATA directory. If the username
# 		exists but there is no password, the password is looked
# 		up in pg_shadow. If a password exists in the file, it is
# 		it used instead. These secondary files allow fine-grained
# 		control over who can access which databases and whether
# 		a non-default passwords are required. The same file can be
# 		used in multiple records for easier administration.
# 		Password files can be maintained with the pg_passwd(1)
# 		utility. Remember, these passwords override pg_shadow
# 		passwords.
# 
#   md5:  	Same as "password", but authentication is done by
#		encrypting the password sent over the network. This is
#		always preferable to "password" except for old clients
#		that don't support it. Also, md5 can use usernames stored
#		in secondary password files but not secondary passwords.
# 
#   crypt:  	Same as "md5", but uses crypt for pre-7.2 clients.  You can
#		not store encrypted passwords if you use this option.
#
#   ident:	For TCP/IP connections, authentication is done by contacting
#		the ident server on the client host.  (CAUTION: this is only
#		as secure as the client machine!)  On machines that support
#		SO_PEERCRED or SCM_CREDS socket requests, this method also
#		works for local Unix-domain connections.  AUTH_ARGUMENT is 
#		required: it determines how to map remote user names to
#		Postgres user names.  The AUTH_ARGUMENT is a map name found
#		in the $PGDATA/pg_ident.conf file. The connection is accepted
#		if that file contains an entry for this map name with the
#		ident-supplied username and the requested Postgres username.
#		The special map name "sameuser" indicates an implied map
#		(not in pg_ident.conf) that maps each ident username to the
#		identical PostgreSQL username.
# 
#   krb4:	Kerberos V4 authentication is used.  Allowed only for
#		TCP/IP connections, not for local UNIX-domain sockets.
# 
#   krb5:	Kerberos V5 authentication is used.  Allowed only for
#		TCP/IP connections, not for local UNIX-domain sockets.
# 
#   reject: 	Reject the connection. This is used to reject certain hosts
#		that are part of a network specified later in the file.
#		To be effective, "reject" must appear before the later
#		entries.
#
#   pam:        Authentication is passed off to PAM (PostgreSQL must be
#               configured --with-pam), using the default service name
#               "postgresql" - you can specify your own service name, by
#               setting AUTH_ARGUMENT to the desired service name.
#
# 
# 
# Examples
# ========
# 
# 
# Allow any user on the local system to connect to any database under any
# username using Unix-domain sockets (the default for local connections):
# TYPE       DATABASE    IP_ADDRESS    MASK               AUTH_TYPE  AUTH_ARGUMENT
# local      all                                          trust
# 
# The same using IP connections on the same machine:
# TYPE       DATABASE    IP_ADDRESS    MASK               AUTH_TYPE  AUTH_ARGUMENT
# host       all         127.0.0.1     255.255.255.255    trust     
# 
# Allow any user from any host with IP address 192.168.93.x to
# connect to database "template1" as the same username that ident reports
# for the connection (typically his Unix username):
# 
# TYPE       DATABASE    IP_ADDRESS    MASK               AUTH_TYPE  AUTH_ARGUMENT
# host       template1   192.168.93.0  255.255.255.0      ident      sameuser
# 
# Allow a user from host 192.168.12.10 to connect to database "template1"
# if the user's password in pg_shadow is correctly supplied:
# 
# TYPE       DATABASE    IP_ADDRESS    MASK               AUTH_TYPE  AUTH_ARGUMENT
# host       template1   192.168.12.10 255.255.255.255    md5
# 
# In the absence of preceding "host" lines, these two lines will reject
# all connection from 192.168.54.1 (since that entry will be matched
# first), but allow Kerberos V5-validated connections from anywhere else
# on the Internet. The zero mask means that no bits of the host IP address
# are considered, so it matches any host:
# 
# 
# TYPE       DATABASE    IP_ADDRESS    MASK               AUTH_TYPE  AUTH_ARGUMENT
# host       all        192.168.54.1   255.255.255.255    reject
# host       all        0.0.0.0        0.0.0.0            krb5
# 
# Allow users from 192.168.x.x hosts to connect to any database if they
# pass the ident check. For example, if ident says the user is "james" and
# he requests to connect as PostgreSQL user "guest", the connection is
# allowed if there is an entry in $PGDATA/pg_ident.conf with map name 
# "phoenix" that says "james" is allowed to connect as "guest":
# 
# TYPE       DATABASE    IP_ADDRESS    MASK               AUTH_TYPE  AUTH_ARGUMENT
# host       all        192.168.0.0    255.255.0.0        ident      phoenix
# 
# See $PGDATA/pg_ident.conf for more information on Ident maps.
# 
# Put your actual configuration here
# ==================================
# 
# This default configuration allows any local user to connect with any
# PostgreSQL username, over either UNIX domain sockets or IP:
# 
# If you want to allow non-local connections, you will need to add more
# "host" records. Also, remember IP connections are only enabled if you
# start the postmaster with the -i option.
# 
# CAUTION: if you are on a multiple-user machine, the default
# configuration is probably too liberal for you. Change it to use
# something other than "trust" authentication.
# 
# TYPE     DATABASE    IP_ADDRESS    MASK               AUTH_TYPE  AUTH_ARGUMENT

local      all                                          trust
host       all         127.0.0.1     255.255.255.255    trust