diff options
author | Bruce Momjian <bruce@momjian.us> | 2002-04-04 04:25:54 +0000 |
---|---|---|
committer | Bruce Momjian <bruce@momjian.us> | 2002-04-04 04:25:54 +0000 |
commit | 43a3543a4eb412a895df911eba9d8671ded45c54 (patch) | |
tree | 0ff55e96c81086081325b8e41b444915f99114f1 /doc/src | |
parent | af10378ab05f7979f0051c09f694709edcee8413 (diff) | |
download | postgresql-43a3543a4eb412a895df911eba9d8671ded45c54.tar.gz postgresql-43a3543a4eb412a895df911eba9d8671ded45c54.zip |
Authentication improvements:
A new pg_hba.conf column, USER
Allow specifiction of lists of users separated by commas
Allow group names specified by +
Allow include files containing lists of users specified by @
Allow lists of databases, and database files
Allow samegroup in database column to match group name matching dbname
Removal of secondary password files
Remove pg_passwd utility
Lots of code cleanup in user.c and hba.c
New data/global/pg_pwd format
New data/global/pg_group file
Diffstat (limited to 'doc/src')
-rw-r--r-- | doc/src/sgml/client-auth.sgml | 593 | ||||
-rw-r--r-- | doc/src/sgml/ref/allfiles.sgml | 3 | ||||
-rw-r--r-- | doc/src/sgml/ref/pg_passwd.sgml | 123 | ||||
-rw-r--r-- | doc/src/sgml/reference.sgml | 3 |
4 files changed, 274 insertions, 448 deletions
diff --git a/doc/src/sgml/client-auth.sgml b/doc/src/sgml/client-auth.sgml index 76542f98720..4afd179a4b1 100644 --- a/doc/src/sgml/client-auth.sgml +++ b/doc/src/sgml/client-auth.sgml @@ -1,5 +1,5 @@ <!-- -$Header: /cvsroot/pgsql/doc/src/sgml/client-auth.sgml,v 1.33 2002/03/22 19:20:06 petere Exp $ +$Header: /cvsroot/pgsql/doc/src/sgml/client-auth.sgml,v 1.34 2002/04/04 04:25:44 momjian Exp $ --> <chapter id="client-authentication"> @@ -10,14 +10,13 @@ $Header: /cvsroot/pgsql/doc/src/sgml/client-auth.sgml,v 1.33 2002/03/22 19:20:06 </indexterm> <para> - When a client application connects to the database server, it specifies which - <productname>PostgreSQL</productname> user name it wants to connect as, - much the same way one logs into a Unix computer as a particular user. - Within the SQL environment the active - database user name determines access privileges to database - objects -- see <xref linkend="user-manag"> for more information - about that. It is therefore obviously essential to restrict which - database user name(s) a given client can connect as. + When a client application connects to the database server, it + specifies which <productname>PostgreSQL</productname> user name it + wants to connect as, much the same way one logs into a Unix computer + as a particular user. Within the SQL environment the active database + user name determines access privileges to database objects -- see + <xref linkend="user-manag"> for more information. Therefore, it is + essential to restrict which database users can connect. </para> <para> @@ -30,20 +29,19 @@ $Header: /cvsroot/pgsql/doc/src/sgml/client-auth.sgml,v 1.33 2002/03/22 19:20:06 <para> <productname>PostgreSQL</productname> offers a number of different - client authentication methods. The method to be used can be selected - on the basis of (client) host and database; some authentication methods - allow you to restrict by user name as well. + client authentication methods. The method to be used can be selected + on the basis of (client) host, database, and user. </para> <para> - <productname>PostgreSQL</productname> database user names are logically + <productname>PostgreSQL</productname> user names are logically separate from user names of the operating system in which the server - runs. If all the users of a particular server also have accounts on + runs. If all the users of a particular server also have accounts on the server's machine, it makes sense to assign database user names - that match their operating system user names. However, a server that accepts remote - connections may have many users who have no local account, and in such - cases there need be no connection between database user names and OS - user names. + that match their operating system user names. However, a server that + accepts remote connections may have many users who have no local + account, and in such cases there need be no connection between + database user names and OS user names. </para> <sect1 id="pg-hba-conf"> @@ -56,39 +54,39 @@ $Header: /cvsroot/pgsql/doc/src/sgml/client-auth.sgml,v 1.33 2002/03/22 19:20:06 <para> Client authentication is controlled by the file <filename>pg_hba.conf</filename> in the data directory, e.g., - <filename>/usr/local/pgsql/data/pg_hba.conf</filename>. (<acronym>HBA</> stands - for host-based authentication.) A default <filename>pg_hba.conf</filename> - file is installed when the - data area is initialized by <command>initdb</command>. + <filename>/usr/local/pgsql/data/pg_hba.conf</filename>. + (<acronym>HBA</> stands for host-based authentication.) A default + <filename>pg_hba.conf</filename> file is installed when the data area + is initialized by <command>initdb</command>. </para> <para> - The general format of the <filename>pg_hba.conf</filename> file is - of a set of records, one per line. Blank lines and lines beginning - with a hash character (<quote>#</quote>) are ignored. A record is - made up of a number of fields which are separated by spaces and/or - tabs. Records cannot be continued across lines. + The general format of the <filename>pg_hba.conf</filename> file is of + a set of records, one per line. Blank lines are ignored, as is any + text after the <quote>#</quote> comment character. A record is made + up of a number of fields which are separated by spaces and/or tabs. + Fields can contain white space if the field value is quoted. Records + cannot be continued across lines. </para> <para> Each record specifies a connection type, a client IP address range - (if relevant for the connection type), a database name or names, + (if relevant for the connection type), a database name, a user name, and the authentication method to be used for connections matching - these parameters. - The first record that matches the type, client address, and requested - database name of a connection attempt is used to do the - authentication step. There is no <quote>fall-through</> or + these parameters. The first record with a matching connection type, + client address, requested database, and user name is used to perform + authentication. There is no <quote>fall-through</> or <quote>backup</>: if one record is chosen and the authentication - fails, the following records are not considered. If no record - matches, the access will be denied. + fails, subsequent records are not considered. If no record matches, + access is denied. </para> <para> A record may have one of the three formats <synopsis> -local <replaceable>database</replaceable> <replaceable>authentication-method</replaceable> [ <replaceable>authentication-option</replaceable> ] -host <replaceable>database</replaceable> <replaceable>IP-address</replaceable> <replaceable>IP-mask</replaceable> <replaceable>authentication-method</replaceable> [ <replaceable>authentication-option</replaceable> ] -hostssl <replaceable>database</replaceable> <replaceable>IP-address</replaceable> <replaceable>IP-mask</replaceable> <replaceable>authentication-method</replaceable> [ <replaceable>authentication-option</replaceable> ] +local <replaceable>database</replaceable> <replaceable>user</replaceable> <replaceable>authentication-method</replaceable> [ <replaceable>authentication-option</replaceable> ] +host <replaceable>database</replaceable> <replaceable>user</replaceable> <replaceable>IP-address</replaceable> <replaceable>IP-mask</replaceable> <replaceable>authentication-method</replaceable> +hostssl <replaceable>database</replaceable> <replaceable>user</replaceable> <replaceable>IP-address</replaceable> <replaceable>IP-mask</replaceable> <replaceable>authentication-method</replaceable> </synopsis> The meaning of the fields is as follows: @@ -97,7 +95,7 @@ hostssl <replaceable>database</replaceable> <replaceable>IP-address</replaceable <term><literal>local</literal></term> <listitem> <para> - This record pertains to connection attempts over Unix domain + This record applies to connection attempts using Unix domain sockets. </para> </listitem> @@ -107,10 +105,11 @@ hostssl <replaceable>database</replaceable> <replaceable>IP-address</replaceable <term><literal>host</literal></term> <listitem> <para> - This record pertains to connection attempts over TCP/IP - networks. Note that TCP/IP connections are completely disabled - unless the server is started with the <option>-i</option> switch or - the equivalent configuration parameter is set. + This record applied to connection attempts using TCP/IP networks. + Note that TCP/IP connections are disabled unless the server is + started with the <option>-i</option> option or the + <literal>tcpip_socket</> <filename>postgresql.conf</> + configuration parameter is enabled. </para> </listitem> </varlistentry> @@ -119,13 +118,13 @@ hostssl <replaceable>database</replaceable> <replaceable>IP-address</replaceable <term><literal>hostssl</literal></term> <listitem> <para> - This record pertains to connection attempts with SSL over + This record applies to connection attempts using SSL over TCP/IP. To make use of this option the server must be built with SSL support enabled. Furthermore, SSL must be enabled with the <option>-l</> option or equivalent configuration setting when the server is started. (Note: <literal>host</literal> records will match either SSL or non-SSL connection attempts, but - <literal>hostssl</literal> records match only SSL connections.) + <literal>hostssl</literal> records requires SSL connections.) </para> </listitem> </varlistentry> @@ -134,12 +133,35 @@ hostssl <replaceable>database</replaceable> <replaceable>IP-address</replaceable <term><replaceable>database</replaceable></term> <listitem> <para> - Specifies the database that this record applies to. The value + Specifies the database for this record. The value <literal>all</literal> specifies that it applies to all databases, while the value <literal>sameuser</> identifies the - database with the same name as the connecting user. Otherwise, - this is the name of a specific <productname>PostgreSQL</productname> - database. + database with the same name as the connecting user. The value + <literal>samegroup</> identifies a group with the same name as + the database name. Only members of this group can connect to the + database. Otherwise, this is the name of a specific + <productname>PostgreSQL</productname> database. Multiple database + names can be supplied by separating them with commas. A file + containing database names can be specified by preceding the file + name with <literal>@</>. The file must be in the same directory + as <filename>pg_hba.conf</>. + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term><replaceable>user</replaceable></term> + <listitem> + <para> + Specifies the user for this record. The value + <literal>all</literal> specifies that it applies to all users. + Otherwise, this is the name of a specific + <productname>PostgreSQL</productname> user. Multiple user names + can be supplied by separating them with commas. Group names can + be specified by preceding the group name with <literal>+</>. A + file containing user names can be specified by preceding the file + name with <literal>@</>. The file must be in the same directory + as <filename>pg_hba.conf</>. </para> </listitem> </varlistentry> @@ -149,10 +171,9 @@ hostssl <replaceable>database</replaceable> <replaceable>IP-address</replaceable <term><replaceable>IP mask</replaceable></term> <listitem> <para> - These two fields specify to which client machines a - <literal>host</literal> or <literal>hostssl</literal> - record applies, based on their IP - address. (Of course IP addresses can be spoofed but this + These two fields specify the client machine IP addresses + (<literal>host</literal> or <literal>hostssl</literal>) for this + record. (Of course IP addresses can be spoofed but this consideration is beyond the scope of <productname>PostgreSQL</productname>.) The precise logic is that <blockquote> @@ -169,10 +190,9 @@ hostssl <replaceable>database</replaceable> <replaceable>IP-address</replaceable <term><replaceable>authentication method</replaceable></term> <listitem> <para> - Specifies the method that users must use to authenticate themselves - when connecting under the control of this authentication record. - The possible choices are summarized here, - details are in <xref linkend="auth-methods">. + Specifies the authentication method to use when connecting via + this record. The possible choices are summarized here; details + are in <xref linkend="auth-methods">. <variablelist> <varlistentry> @@ -190,66 +210,41 @@ hostssl <replaceable>database</replaceable> <replaceable>IP-address</replaceable <term><literal>reject</></term> <listitem> <para> - The connection is rejected unconditionally. This is mostly - useful to <quote>filter out</> certain hosts from a group. + The connection is rejected unconditionally. This is useful for + <quote>filtering out</> certain hosts from a group. </para> </listitem> </varlistentry> <varlistentry> - <term><literal>password</></term> + <term><literal>md5</></term> <listitem> <para> - The client is required to supply a password which is required to - match the database password that was set up for the user. - </para> - - <para> - An optional file name may be specified after the - <literal>password</literal> keyword. This file is expected to - contain a list of users who may connect using this record, - and optionally alternative passwords for them. - </para> - - <para> - The password is sent over the wire in clear text. For better - protection, use the <literal>md5</literal> or - <literal>crypt</literal> methods. + Requires the client to supply an MD5 encrypted password for + authentication. This is the only method that allows encrypted + passwords to be stored in pg_shadow. </para> </listitem> </varlistentry> <varlistentry> - <term><literal>md5</></term> + <term><literal>crypt</></term> <listitem> <para> - Like the <literal>password</literal> method, but the password - is sent over the wire encrypted using a simple - challenge-response protocol. This protects against incidental - wire-sniffing. This is now the recommended choice for - password-based authentication. - </para> - - <para> - The name of a file may follow the - <literal>md5</literal> keyword. It contains a list of users - who may connect using this record. + Like <literal>md5</literal> method but uses older crypt + encryption, which is needed for pre-7.2 clients. + <literal>md5</literal> is preferred for 7.2 and later clients. </para> </listitem> </varlistentry> <varlistentry> - <term><literal>crypt</></term> + <term><literal>password</></term> <listitem> <para> - Like the <literal>md5</literal> method but uses older crypt - encryption, which is needed for pre-7.2 - clients. <literal>md5</literal> is - preferred for 7.2 and later clients. The <literal>crypt</> - method is not compatible with encrypting passwords in - <filename>pg_shadow</>, and may fail if client and server - machines have different implementations of the crypt() library - routine. + Same as "md5", but the password is sent in cleartext over the + network. This should not be used on untrusted networks. + </para> </para> </listitem> </varlistentry> @@ -278,34 +273,36 @@ hostssl <replaceable>database</replaceable> <replaceable>IP-address</replaceable <term><literal>ident</></term> <listitem> <para> - The identity of the user as determined on login to the - operating system is used by <productname>PostgreSQL</productname> - to determine whether the user - is allowed to connect as the requested database user. - For TCP/IP connections the user's identity is determined by - contacting the <firstterm>ident</firstterm> server on the client - host. (Note that this is only as reliable as the remote ident - server; ident authentication should never be used for remote hosts - whose administrators are not trustworthy.) - On operating systems - supporting <symbol>SO_PEERCRED</> requests for Unix domain sockets, - ident authentication is possible for local connections; - the system is then asked for the connecting user's identity. - </para> + For TCP/IP connections, authentication is done by contacting + the <firstterm>ident</firstterm> server on the client host. + This is only as secure as the client machine. You must specify + the map name after the 'ident' keyword. It determines how to + map remote user names to PostgreSQL user names. If you use + "sameuser", the user names are assumed to be identical. If + not, the map name is looked up 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 user name and + the requested PostgreSQL user name. + </para> + <para> + On machines that support unix-domain socket credentials + (currently Linux, FreeBSD, NetBSD, and BSD/OS), ident allows + reliable authentication of 'local' connections without ident + running on the local machine. + </para> <para> - On systems without <symbol>SO_PEERCRED</> requests, ident authentication - is only available for TCP/IP connections. As a workaround, - it is possible to - specify the <systemitem class="systemname">localhost</> address - <systemitem class="systemname">127.0.0.1</> and make connections - to this address. + On systems without <symbol>SO_PEERCRED</> requests, ident + authentication is only available for TCP/IP connections. As a + work around, it is possible to specify the <systemitem + class="systemname">localhost</> address <systemitem + class="systemname">127.0.0.1</> and make connections to this + address. </para> <para> - The <replaceable>authentication option</replaceable> following - the <literal>ident</> keyword specifies the name of an - <firstterm>ident map</firstterm> that specifies which operating - system users equate with which database users. See below for - details. + Following the <literal>ident</> keyword, an <firstterm>ident + map</firstterm> name should be supplied which specifies which + operating system users equate with which database users. See + below for details. </para> </listitem> </varlistentry> @@ -315,17 +312,16 @@ hostssl <replaceable>database</replaceable> <replaceable>IP-address</replaceable <listitem> <para> This authentication type operates similarly to - <firstterm>password</firstterm>, with the main difference that - it will use PAM (Pluggable Authentication Modules) as the - authentication mechanism. The <replaceable>authentication - option</replaceable> following the <literal>pam</> keyword - specifies the service name that will be passed to PAM. The - default service name is <literal>postgresql</literal>. - For more information about PAM, please read the <ulink - url="http://www.kernel.org/pub/linux/libs/pam/"><productname>Linux-PAM</productname> - Page</ulink> and/or the <ulink - url="http://www.sun.com/software/solaris/pam/"><systemitem class="osname">Solaris</> PAM - Page</ulink>. + <firstterm>password</firstterm> except that it uses PAM + (Pluggable Authentication Modules) as the authentication + mechanism. The default PAM service name is + <literal>postgresql</literal>. You can optionally supply you + own service name after the <literal>pam</> keyword in the + file. For more information about PAM, please read the <ulink + url="http://www.kernel.org/pub/linux/libs/pam/"><productname>L + inux-PAM</productname> Page</ulink> and the <ulink + url="http://www.sun.com/software/solaris/pam/"><systemitem + class="osname">Solaris</> PAM Page</ulink>. </para> </listitem> </varlistentry> @@ -336,42 +332,33 @@ hostssl <replaceable>database</replaceable> <replaceable>IP-address</replaceable </listitem> </varlistentry> - <varlistentry> - <term><replaceable>authentication option</replaceable></term> - <listitem> - <para> - This field is interpreted differently depending on the - authentication method, as described above. - </para> - </listitem> - </varlistentry> </variablelist> </para> <para> Since the <filename>pg_hba.conf</filename> records are examined sequentially for each connection attempt, the order of the records is - very significant. Typically, earlier records will have tight - connection match parameters and weaker authentication methods, - while later records will have looser match parameters and stronger - authentication methods. For example, one might wish to use - <literal>trust</> authentication for local TCP connections but - require a password for remote TCP connections. In this case a - record specifying <literal>trust</> authentication for connections - from 127.0.0.1 would appear before a record specifying password - authentication for a wider range of allowed client IP addresses. + significant. Typically, earlier records will have tight connection + match parameters and weaker authentication methods, while later + records will have looser match parameters and stronger authentication + methods. For example, one might wish to use <literal>trust</> + authentication for local TCP connections but require a password for + remote TCP connections. In this case a record specifying + <literal>trust</> authentication for connections from 127.0.0.1 would + appear before a record specifying password authentication for a wider + range of allowed client IP addresses. </para> <para> <indexterm> <primary>SIGHUP</primary> </indexterm> - The <filename>pg_hba.conf</filename> file is read on start-up - and when the <application>postmaster</> receives a + The <filename>pg_hba.conf</filename> file is read on start-up and when + the <application>postmaster</> receives a <systemitem>SIGHUP</systemitem> signal. If you edit the file on an active system, you will need to signal the <application>postmaster</> - (using <literal>pg_ctl reload</> or <literal>kill -HUP</>) - to make it re-read the file. + (using <literal>pg_ctl reload</> or <literal>kill -HUP</>) to make it + re-read the file. </para> <para> @@ -382,27 +369,27 @@ hostssl <replaceable>database</replaceable> <replaceable>IP-address</replaceable <example id="example-pg-hba.conf"> <title>An example <filename>pg_hba.conf</filename> file</title> <programlisting> -# TYPE DATABASE IP_ADDRESS MASK AUTHTYPE MAP +# TYPE DATABASE USER IP_ADDRESS MASK AUTHTYPE # Allow any user on the local system to connect to any -# database under any username, but only via an IP connection: +# database under any user name, but only via an IP connection: -host all 127.0.0.1 255.255.255.255 trust +host all all 127.0.0.1 255.255.255.255 trust # The same, over Unix-socket connections: -local all trust +local all all 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 on that -# host identifies him as (typically his Unix username): +# connect to database "template1" as the same user name that ident on that +# host identifies him as (typically his Unix user name): -host template1 192.168.93.0 255.255.255.0 ident sameuser +host template1 all 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: +# if the user's password is correctly supplied: -host template1 192.168.12.10 255.255.255.255 md5 +host template1 all 192.168.12.10 255.255.255.255 md5 # In the absence of preceding "host" lines, these two lines will reject # all connection attempts from 192.168.54.1 (since that entry will be @@ -410,8 +397,8 @@ host template1 192.168.12.10 255.255.255.255 md5 # else on the Internet. The zero mask means that no bits of the host IP # address are considered, so it matches any host: -host all 192.168.54.1 255.255.255.255 reject -host all 0.0.0.0 0.0.0.0 krb5 +host all all 192.168.54.1 255.255.255.255 reject +host all 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. If, for example, ident says the user is "bryanh" @@ -419,7 +406,7 @@ host all 0.0.0.0 0.0.0.0 krb5 # is allowed if there is an entry in pg_ident.conf for map "omicron" that # says "bryanh" is allowed to connect as "guest1": -host all 192.168.0.0 255.255.0.0 ident omicron +host all all 192.168.0.0 255.255.0.0 ident omicron # If these are the only two lines for local connections, they will allow # local users to connect only to their own databases (database named the @@ -429,8 +416,8 @@ host all 192.168.0.0 255.255.0.0 ident omicron # cases. (If you prefer to use ident authorization, an ident map can # serve a parallel purpose to the password list file used here.) -local sameuser md5 -local all md5 admins +local sameuser all md5 +local all @admins md5 </programlisting> </example> </para> @@ -490,86 +477,49 @@ local all md5 admins <title>Password authentication</title> <indexterm> - <primary>password</primary> + <primary>MD5</> </indexterm> <indexterm> - <primary>MD5</> + <primary>crypt</> + </indexterm> + <indexterm> + <primary>password</primary> </indexterm> <para> Password-based authentication methods include <literal>md5</>, - <literal>crypt</>, and <literal>password</>. These methods operate + <literal>crypt</>, and <literal>password</>. These methods operate similarly except for the way that the password is sent across the - connection. If you are at all concerned about password <quote>sniffing</> - attacks then <literal>md5</> is preferred, with <literal>crypt</> a - second choice if you must support obsolete clients. Plain - <literal>password</> should especially be avoided for connections over - the open Internet (unless you use SSL, SSH, or other communications - security wrappers around the connection). + connection. If you are at all concerned about password + <quote>sniffing</> attacks then <literal>md5</> is preferred, with + <literal>crypt</> a second choice if you must support pre-7.2 + clients. Plain <literal>password</> should especially be avoided for + connections over the open Internet (unless you use SSL, SSH, or + other communications security wrappers around the connection). </para> <para> - <productname>PostgreSQL</productname> database passwords are separate from - operating system user passwords. Ordinarily, the password for each - database user is stored in the pg_shadow system catalog table. - Passwords can be managed with the query language commands - <command>CREATE USER</command> and <command>ALTER USER</command>, - e.g., <userinput>CREATE USER foo WITH PASSWORD - 'secret';</userinput>. By default, that is, if no password has - been set up, the stored password is <literal>NULL</literal> - and password authentication will always fail for that user. + <productname>PostgreSQL</productname> database passwords are + separate from operating system user passwords. Ordinarily, the + password for each database user is stored in the pg_shadow system + catalog table. Passwords can be managed with the query language + commands <command>CREATE USER</command> and <command>ALTER + USER</command>, e.g., <userinput>CREATE USER foo WITH PASSWORD + 'secret';</userinput>. By default, that is, if no password has been + set up, the stored password is <literal>NULL</literal> and password + authentication will always fail for that user. </para> <para> To restrict the set of users that are allowed to connect to certain - databases, list the set of users in a separate file (one user name - per line) in the same directory that <filename>pg_hba.conf</> is in, - and mention the (base) name of the file after the - <literal>password</>, <literal>md5</>, or <literal>crypt</> keyword, - respectively, in <filename>pg_hba.conf</>. If you do not use this - feature, then any user that is known to the database system can - connect to any database (so long as he supplies the correct password, - of course). - </para> - - <para> - These files can also be used to apply a different set of passwords - to a particular database or set thereof. In that case, the files - have a format similar to the standard Unix password file - <filename>/etc/passwd</filename>, that is, -<synopsis> -<replaceable>username</replaceable>:<replaceable>password</replaceable> -</synopsis> - Any extra colon-separated fields following the password are - ignored. The password is expected to be encrypted using the - system's <function>crypt()</function> function. The utility - program <application>pg_passwd</application> that is installed - with <productname>PostgreSQL</productname> can be used to manage - these password files. - </para> - - <para> - Lines with and without passwords can be mixed in secondary - password files. Lines without password indicate use of the main - password in <literal>pg_shadow</> that is managed by - <command>CREATE USER</> and <command>ALTER USER</>. Lines with - passwords will cause that password to be used. A password entry of - <quote>+</quote> also means using the pg_shadow password. - </para> - - <para> - Alternative passwords cannot be used when using the <literal>md5</> - or <literal>crypt</> methods. The file will be read as - usual, but the password field will simply be ignored and the - <literal>pg_shadow</> password will always be used. - </para> - - <para> - Note that using alternative passwords like this means that one can - no longer use <command>ALTER USER</command> to change one's - password. It will appear to work but the password one is - changing is not the password that the system will end up - using. + databases, list the users separated by commas, or in a separate + file. The file should contain user names separated by commas or one + user name per line, and be in the same directory as + <filename>pg_hba.conf</>. Mention the (base) name of the file + preceded with <literal>@</>in the <literal>USER</> column. The + <literal>DATABASE</> column can similarly accept a list of values or + a file name. You can also specify group names by preceding the group + name with <literal>+</>. </para> </sect2> @@ -588,10 +538,10 @@ local all md5 admins <productname>Kerberos</productname> system is far beyond the scope of this document; in all generality it can be quite complex (yet powerful). The <ulink - url="http://www.nrl.navy.mil/CCS/people/kenh/kerberos-faq.html">Kerberos - <acronym>FAQ</></ulink> or <ulink - url="ftp://athena-dist.mit.edu">MIT Project Athena</ulink> can be - a good starting point for exploration. Several sources for + url="http://www.nrl.navy.mil/CCS/people/kenh/kerberos-faq.html">Kerb + eros <acronym>FAQ</></ulink> or <ulink + url="ftp://athena-dist.mit.edu">MIT Project Athena</ulink> can be a + good starting point for exploration. Several sources for <productname>Kerberos</> distributions exist. </para> @@ -606,34 +556,33 @@ local all md5 admins <para> <productname>PostgreSQL</> operates like a normal Kerberos service. The name of the service principal is - <replaceable>servicename/hostname@realm</>, where - <replaceable>servicename</> is <literal>postgres</literal> - (unless a different service name was selected at configure time - with <literal>./configure --with-krb-srvnam=whatever</>). - <replaceable>hostname</> is the fully qualified domain name of the server - machine. The service principal's realm is the preferred realm of the - server machine. + <replaceable>servicename/hostname@realm</>, where + <replaceable>servicename</> is <literal>postgres</literal> (unless a + different service name was selected at configure time with + <literal>./configure --with-krb-srvnam=whatever</>). + <replaceable>hostname</> is the fully qualified domain name of the + server machine. The service principal's realm is the preferred realm + of the server machine. </para> <para> - Client principals must have their <productname>PostgreSQL</> user name as - their first component, for example - <replaceable>pgusername/otherstuff@realm</>. - At present the realm of the client is not checked by - <productname>PostgreSQL</>; so - if you have cross-realm authentication enabled, then any principal - in any realm that can communicate with yours will be accepted. + Client principals must have their <productname>PostgreSQL</> user + name as their first component, for example + <replaceable>pgusername/otherstuff@realm</>. At present the realm of + the client is not checked by <productname>PostgreSQL</>; so if you + have cross-realm authentication enabled, then any principal in any + realm that can communicate with yours will be accepted. </para> <para> - Make sure that your server key file is readable (and - preferably only readable) by the - <productname>PostgreSQL</productname> server account (see - <xref linkend="postgres-user">). The location of the key file - is specified with the <varname>krb_server_keyfile</> run time - configuration parameter. (See also <xref linkend="runtime-config">.) - The default is <filename>/etc/srvtab</> if you are using Kerberos 4 - and <filename>FILE:/usr/local/pgsql/etc/krb5.keytab</> (or whichever + Make sure that your server key file is readable (and preferably only + readable) by the <productname>PostgreSQL</productname> server + account (see <xref linkend="postgres-user">). The location of the + key file is specified with the <varname>krb_server_keyfile</> run + time configuration parameter. (See also <xref + linkend="runtime-config">.) The default is <filename>/etc/srvtab</> + if you are using Kerberos 4 and + <filename>FILE:/usr/local/pgsql/etc/krb5.keytab</> (or whichever directory was specified as <varname>sysconfdir</> at build time) with Kerberos 5. </para> @@ -649,18 +598,20 @@ local all md5 admins <para> When connecting to the database make sure you have a ticket for a - principal matching the requested database user name. - An example: For database user name <literal>fred</>, both principal + principal matching the requested database user name. An example: For + database user name <literal>fred</>, both principal <literal>fred@EXAMPLE.COM</> and - <literal>fred/users.example.com@EXAMPLE.COM</> can be - used to authenticate to the database server. + <literal>fred/users.example.com@EXAMPLE.COM</> can be used to + authenticate to the database server. </para> <para> - If you use <application>mod_auth_krb</application> and <application>mod_perl</application> on your <productname>Apache</productname> web server, - you can use <literal>AuthType KerberosV5SaveCredentials</literal> with a <application>mod_perl</application> - script. This gives secure database access over the web, no extra - passwords required. + If you use <application>mod_auth_krb</application> and + <application>mod_perl</application> on your + <productname>Apache</productname> web server, you can use + <literal>AuthType KerberosV5SaveCredentials</literal> with a + <application>mod_perl</application> script. This gives secure + database access over the web, no extra passwords required. </para> </sect2> @@ -707,55 +658,54 @@ local all md5 admins </para> <para> - On systems supporting <symbol>SO_PEERCRED</symbol> requests for Unix-domain sockets, - ident authentication can also be applied to local connections. In this - case, no security risk is added by using ident authentication; indeed - it is a preferable choice for local connections on such a system. + On systems supporting <symbol>SO_PEERCRED</symbol> requests for + Unix-domain sockets, ident authentication can also be applied to + local connections. In this case, no security risk is added by using + ident authentication; indeed it is a preferable choice for local + connections on such systems. </para> <para> When using ident-based authentication, after having determined the name of the operating system user that initiated the connection, - <productname>PostgreSQL</productname> checks whether that user is allowed - to connect as the database user he is requesting to connect as. - This is controlled by the ident map - argument that follows the <literal>ident</> keyword in the - <filename>pg_hba.conf</filename> file. There is a predefined ident map - <literal>sameuser</literal>, which allows any operating system - user to connect as the database user of the same name (if the - latter exists). Other maps must be created manually. + <productname>PostgreSQL</productname> checks whether that user is + allowed to connect as the database user he is requesting to connect + as. This is controlled by the ident map argument that follows the + <literal>ident</> keyword in the <filename>pg_hba.conf</filename> + file. There is a predefined ident map <literal>sameuser</literal>, + which allows any operating system user to connect as the database + user of the same name (if the latter exists). Other maps must be + created manually. </para> <para> - <indexterm><primary>pg_ident.conf</primary></indexterm> - Ident maps other than <literal>sameuser</literal> are defined - in the file <filename>pg_ident.conf</filename> - in the data directory, which contains lines of the general form: + <indexterm><primary>pg_ident.conf</primary></indexterm> Ident maps + other than <literal>sameuser</literal> are defined in the file + <filename>pg_ident.conf</filename> in the data directory, which + contains lines of the general form: <synopsis> <replaceable>map-name</> <replaceable>ident-username</> <replaceable>database-username</> </synopsis> - Comments and whitespace are handled in the usual way. - The <replaceable>map-name</> is an arbitrary name that will be - used to refer to this mapping in <filename>pg_hba.conf</filename>. - The other two fields specify which operating system user is - allowed to connect as which database user. The same - <replaceable>map-name</> can be used repeatedly to specify more - user-mappings within a single map. There is no restriction regarding - how many - database users a given operating system user may correspond to and vice - versa. + Comments and whitespace are handled in the usual way. The + <replaceable>map-name</> is an arbitrary name that will be used to + refer to this mapping in <filename>pg_hba.conf</filename>. The other + two fields specify which operating system user is allowed to connect + as which database user. The same <replaceable>map-name</> can be + used repeatedly to specify more user-mappings within a single map. + There is no restriction regarding how many database users a given + operating system user may correspond to and vice versa. </para> <para> <indexterm> <primary>SIGHUP</primary> </indexterm> - The <filename>pg_ident.conf</filename> file is read on start-up - and when the <application>postmaster</> receives a + The <filename>pg_ident.conf</filename> file is read on start-up and + when the <application>postmaster</> receives a <systemitem>SIGHUP</systemitem> signal. If you edit the file on an active system, you will need to signal the <application>postmaster</> - (using <literal>pg_ctl reload</> or <literal>kill -HUP</>) - to make it re-read the file. + (using <literal>pg_ctl reload</> or <literal>kill -HUP</>) to make it + re-read the file. </para> <para> @@ -763,13 +713,14 @@ local all md5 admins conjunction with the <filename>pg_hba.conf</> file in <xref linkend="example-pg-hba.conf"> is shown in <xref linkend="example-pg-ident.conf">. In this example setup, anyone - logged in to a machine on the 192.168 network that does not have - the Unix user name <systemitem>bryanh</>, <systemitem>ann</>, or <systemitem>robert</> would not be granted access. - Unix user <systemitem>robert</> would only be allowed access when he tries to - connect as <productname>PostgreSQL</> user <systemitem>bob</>, - not as <systemitem>robert</> - or anyone else. <systemitem>ann</> would only be allowed to connect as - <systemitem>ann</>. User <systemitem>bryanh</> would be allowed to connect as either + logged in to a machine on the 192.168 network that does not have the + Unix user name <systemitem>bryanh</>, <systemitem>ann</>, or + <systemitem>robert</> would not be granted access. Unix user + <systemitem>robert</> would only be allowed access when he tries to + connect as <productname>PostgreSQL</> user <systemitem>bob</>, not + as <systemitem>robert</> or anyone else. <systemitem>ann</> would + only be allowed to connect as <systemitem>ann</>. User + <systemitem>bryanh</> would be allowed to connect as either <systemitem>bryanh</> himself or as <systemitem>guest1</>. </para> @@ -780,7 +731,7 @@ local all md5 admins omicron bryanh bryanh omicron ann ann -# bob has username robert on these machines +# bob has user name robert on these machines omicron robert bob # bryanh can also connect as guest1 omicron bryanh guest1 @@ -799,30 +750,30 @@ omicron bryanh guest1 <para> <ProgramListing> -No pg_hba.conf entry for host 123.123.123.123, user joeblow, database testdb +No pg_hba.conf entry for host 123.123.123.123, user andym, database testdb </ProgramListing> - This is what you are most likely to get if you succeed in - contacting the server, but it does not want to talk to you. As the - message suggests, the server refused the connection request - because it found no authorizing entry in its <filename>pg_hba.conf</filename> + This is what you are most likely to get if you succeed in contacting + the server, but it does not want to talk to you. As the message + suggests, the server refused the connection request because it found + no authorizing entry in its <filename>pg_hba.conf</filename> configuration file. </para> <para> <ProgramListing> -Password authentication failed for user 'joeblow' +Password authentication failed for user 'andym' </ProgramListing> - Messages like this indicate that you contacted the server, and - it is willing to talk to you, but not until you pass the - authorization method specified in the - <filename>pg_hba.conf</filename> file. Check the password you are - providing, or check your Kerberos or ident software if the - complaint mentions one of those authentication types. + Messages like this indicate that you contacted the server, and it is + willing to talk to you, but not until you pass the authorization + method specified in the <filename>pg_hba.conf</filename> file. Check + the password you are providing, or check your Kerberos or ident + software if the complaint mentions one of those authentication + types. </para> <para> <ProgramListing> -FATAL 1: user "joeblow" does not exist +FATAL 1: user "andym" does not exist </ProgramListing> The indicated user name was not found. </para> @@ -837,9 +788,9 @@ FATAL 1: Database "testdb" does not exist in the system catalog. </para> <para> - Note that the server log may contain more information - about an authentication failure than is reported to the client. - If you are confused about the reason for a failure, check the log. + Note that the server log may contain more information about an + authentication failure than is reported to the client. If you are + confused about the reason for a failure, check the log. </para> </sect1> diff --git a/doc/src/sgml/ref/allfiles.sgml b/doc/src/sgml/ref/allfiles.sgml index 460f150bc89..61d979a5643 100644 --- a/doc/src/sgml/ref/allfiles.sgml +++ b/doc/src/sgml/ref/allfiles.sgml @@ -1,5 +1,5 @@ <!-- -$Header: /cvsroot/pgsql/doc/src/sgml/ref/allfiles.sgml,v 1.36 2002/03/19 02:18:12 momjian Exp $ +$Header: /cvsroot/pgsql/doc/src/sgml/ref/allfiles.sgml,v 1.37 2002/04/04 04:25:45 momjian Exp $ PostgreSQL documentation Complete list of usable sgml source files in this directory. --> @@ -125,7 +125,6 @@ Complete list of usable sgml source files in this directory. <!entity pgCtl system "pg_ctl-ref.sgml"> <!entity pgDump system "pg_dump.sgml"> <!entity pgDumpall system "pg_dumpall.sgml"> -<!entity pgPasswd system "pg_passwd.sgml"> <!entity pgRestore system "pg_restore.sgml"> <!entity pgTclSh system "pgtclsh.sgml"> <!entity pgTkSh system "pgtksh.sgml"> diff --git a/doc/src/sgml/ref/pg_passwd.sgml b/doc/src/sgml/ref/pg_passwd.sgml deleted file mode 100644 index 13125b08e27..00000000000 --- a/doc/src/sgml/ref/pg_passwd.sgml +++ /dev/null @@ -1,123 +0,0 @@ -<!-- -$Header: /cvsroot/pgsql/doc/src/sgml/ref/Attic/pg_passwd.sgml,v 1.10 2001/12/08 03:24:38 thomas Exp $ -PostgreSQL documentation ---> - -<refentry id="APP-PG-PASSWD"> - <docinfo> - <date>2000-11-18</date> - </docinfo> - - <refmeta> - <refentrytitle id="APP-PG-PASSWD-TITLE"><application>pg_passwd</application></refentrytitle> - <manvolnum>1</manvolnum> - <refmiscinfo>Application</refmiscinfo> - </refmeta> - - <refnamediv> - <refname>pg_passwd</refname> - <refpurpose>change a secondary <productname>PostgreSQL</> password file</refpurpose> - </refnamediv> - - <refsynopsisdiv> - <cmdsynopsis> - <command>pg_passwd</command> - <arg choice="plain"><replaceable>filename</replaceable></arg> - </cmdsynopsis> - </refsynopsisdiv> - - <refsect1 id="app-pg-passwd-description"> - <title>Description</title> - <para> - <application>pg_passwd</application> is a tool for manipulating flat - text password files. These files can control client authentication of - the <productname>PostgreSQL</productname> server. More information - about setting up this authentication mechanism can be found in the - <citetitle>Administrator's Guide</citetitle>. - </para> - - <para> - The format of a text password file is one entry per line; the fields - of each entry are separated by colons. The first field is the user - name, the second field is the encrypted password. Other fields are - ignored (to allow password files to be shared between applications - that use similar formats). <application>pg_passwd</application> - enables users to interactively add entries to such a file, to alter - passwords of existing entries, and to encrypt such passwords. - </para> - - <para> - Supply the name of the password file as argument to the - <application>pg_passwd</application> command. To be used by - PostgreSQL, the file needs to be located in the server's data - directory, and the base name of the file needs to be specified in the - <filename>pg_hba.conf</filename> access control file. - -<screen> -<prompt>$</prompt> <userinput>pg_passwd /usr/local/pgsql/data/passwords</userinput> -<computeroutput>File "/usr/local/pgsql/data/passwords" does not exist. Create? (y/n):</computeroutput> <userinput>y</userinput> -<prompt>Username:</prompt> <userinput>guest</userinput> -<prompt>Password:</prompt> -<prompt>Re-enter password:</prompt> -</screen> - - where the <literal>Password:</literal> and <literal>Re-enter - password:</literal> prompts require the same password input which - is not displayed on the terminal. Note that the password is limited - to eight useful characters by restrictions of the standard crypt(3) - library routine. - </para> - - <para> - The original password file is renamed to - <filename>passwords.bk</filename>. - </para> - - <para> - To make use of this password file, put a line like the following in - <filename>pg_hba.conf</filename>: - -<programlisting> -host mydb 133.65.96.250 255.255.255.255 password passwords -</programlisting> - - which would allow access to database mydb from host 133.65.96.250 using - the passwords listed in the <filename>passwords</filename> file (and - only to the users listed in that file). - </para> - - <note> - <para> - It is also useful to have entries in a password file with empty - password fields. (This is different from an empty password.) Such - entries allow you to restrict users who can access the system. These - entries cannot be managed by <application>pg_passwd</application>, - but you can edit password files manually. - </para> - </note> - </refsect1> - - <refsect1 id="app-pg-passwd-seealso"> - <title>See also</title> - <para> - <citetitle>PostgreSQL Administrator's Guide</citetitle> - </para> - </refsect1> -</refentry> - -<!-- Keep this comment at the end of the file -Local variables: -mode: sgml -sgml-omittag:nil -sgml-shorttag:t -sgml-minimize-attributes:nil -sgml-always-quote-attributes:t -sgml-indent-step:1 -sgml-indent-data:t -sgml-parent-document:nil -sgml-default-dtd-file:"../reference.ced" -sgml-exposed-tags:nil -sgml-local-catalogs:"/usr/lib/sgml/catalog" -sgml-local-ecat-files:nil -End: ---> diff --git a/doc/src/sgml/reference.sgml b/doc/src/sgml/reference.sgml index b6b63254462..41d419dd2ea 100644 --- a/doc/src/sgml/reference.sgml +++ b/doc/src/sgml/reference.sgml @@ -1,5 +1,5 @@ <!-- reference.sgml -$Header: /cvsroot/pgsql/doc/src/sgml/reference.sgml,v 1.24 2002/03/19 02:18:11 momjian Exp $ +$Header: /cvsroot/pgsql/doc/src/sgml/reference.sgml,v 1.25 2002/04/04 04:25:44 momjian Exp $ PostgreSQL Reference Manual --> @@ -191,7 +191,6 @@ Disable this chapter until we have more functions documented. &initlocation; &ipcclean; &pgCtl; - &pgPasswd; &postgres; &postmaster; |