mirror of
				https://github.com/postgres/postgres.git
				synced 2025-10-29 22:49:41 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			280 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
			
		
		
	
	
			280 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
| .\" This is -*-nroff-*-
 | |
| .\" XXX standard disclaimer belongs here....
 | |
| .\" $Header: /cvsroot/pgsql/doc/man/Attic/unix.1,v 1.1.1.1 1996/08/18 22:14:28 scrappy Exp $
 | |
| .TH INTRODUCTION UNIX 11/05/95 Postgres95 Postgres95
 | |
| .SP INFORMATION UNIX 11/05/95
 | |
| .BH "SECTION 2 \(em Unix COMMANDS (Unix)"
 | |
| .SH "OVERVIEW"
 | |
| This section outlines the interaction between Postgres and
 | |
| the operating system.  In particular, this section describes 
 | |
| the Postgres support programs that are executable as Unix
 | |
| commands.
 | |
| .SH TERMINOLOGY
 | |
| In the following documentation, the term
 | |
| .IR site
 | |
| may be interpreted as the host machine on which Postgres is installed.
 | |
| Since it is possible to install more than one set of Postgres
 | |
| databases on a single host, this term more precisely denotes any
 | |
| particular set of installed Postgres binaries and databases.
 | |
| .PP
 | |
| The 
 | |
| .IR "Postgres super-user"
 | |
| is the user named \*(lqpostgres\*(rq who owns the Postgres
 | |
| binaries and database files.  As the database super-user, all
 | |
| protection mechanisms may be bypassed and any data accessed
 | |
| arbitrarily.  In addition, the Postgres super-user is allowed to execute
 | |
| some support programs which are generally not available to all users.
 | |
| Note that the Postgres super-user is
 | |
| .IR not
 | |
| the same as the Unix super-user,
 | |
| .IR root ,
 | |
| and should have a non-zero userid for security reasons.
 | |
| .PP
 | |
| The
 | |
| .IR "database base administrator"
 | |
| or DBA, is the person who is responsible for installing Postgres to
 | |
| enforce a security policy for a site.  The DBA can add new users by
 | |
| the method described below 
 | |
| and maintain a set of template databases for use by
 | |
| .IR createdb (1).
 | |
| .PP
 | |
| The
 | |
| .IR postmaster
 | |
| is the process that acts as a clearing-house for requests to the Postgres
 | |
| system.
 | |
| Frontend applications connect to the 
 | |
| .IR postmaster ,
 | |
| which keeps tracks of any system errors and communication between the
 | |
| backend processes.  The
 | |
| .IR postmaster
 | |
| can take several command-line arguments to tune its behavior.
 | |
| However,
 | |
| supplying arguments is necessary only if you intend to run multiple
 | |
| sites or a non-default site.  See
 | |
| .IR postmaster (1)
 | |
| for details.
 | |
| .PP
 | |
| The
 | |
| .IR "Postgres backend"
 | |
| (the actual executable program called "postgres") may be executed
 | |
| directly from the user shell by the 
 | |
| Postgres super-user (with the database name as an argument).  However,
 | |
| doing this bypasses the shared buffer pool and lock table associated
 | |
| with a postmaster/site, therefore this is not recommended in a multiuser
 | |
| site.
 | |
| .SH NOTATION
 | |
| \*(lq.../\*(rq at the front of a file name is used to represent the
 | |
| path to the Postgres super-user's home directory.  Anything in brackets
 | |
| (\*(lq[\*(rq and \*(lq]\*(rq) is optional.  Anything in braces
 | |
| (\*(lq{\*(rq and \*(lq}\*(rq) can be repeated 0 or more times.
 | |
| Parentheses (\*(lq(\*(rq and \*(lq)\*(rq ) are used to group boolean
 | |
| expressions.  \*(lq|\*(rq is the boolean operator
 | |
| .SM OR .
 | |
| .SH "USING Postgres FROM Unix"
 | |
| All Postgres commands that are executed directly from a Unix shell are
 | |
| found in the directory \*(lq.../bin\*(rq.  Including this directory in
 | |
| your search path will make executing the commands easier.
 | |
| .PP
 | |
| A collection of system catalogs exist at each site.  These include a
 | |
| class (\*(lqpg_user\*(rq) that contains an instance for each valid
 | |
| Postgres user.  The instance specifies a set of Postgres privileges, such as
 | |
| the ability to act as Postgres super-user, the ability to create/destroy
 | |
| databases, and the ability to update the system catalogs.  A Unix
 | |
| user cannot do anything with Postgres until an appropriate instance is
 | |
| installed in this class.  Further information on the system catalogs
 | |
| is available by running queries on the appropriate classes.
 | |
| .SH "Security"
 | |
| .SP SECURITY UNIX 03/12/94
 | |
| .SH "USER AUTHENTICATION"
 | |
| .IR Authentication
 | |
| is the process by which the backend server and 
 | |
| .IR postmaster
 | |
| ensure that the user requesting access to data is in fact who he/she
 | |
| claims to be.  All users who invoke Postgres are checked against the
 | |
| contents of the \*(lqpg_user\*(rq class to ensure that they are
 | |
| authorized to do so.  However, verification of the user's actual
 | |
| identity is performed in a variety of ways.
 | |
| .SS "From the user shell"
 | |
| A backend server started from a user shell notes the user's (effective)
 | |
| user-id before performing a 
 | |
| .IR setuid (3)
 | |
| to the user-id of user \*(lqpostgres\*(rq.  The effective user-id is used
 | |
| as the basis for access control checks.  No other authentication is
 | |
| conducted.
 | |
| .SS "From the network"
 | |
| If the Postgres system is built as distributed, access to the Internet
 | |
| TCP port of the
 | |
| .IR postmaster
 | |
| process is available to anyone.  However, Postgres offers optional
 | |
| host-based authentication where only access from certain hosts are
 | |
| allowed.  Of course, host-based authentication is not fool-proof in
 | |
| Unix, either. It is possible for determined intruders to also
 | |
| masquerade the origination host. Those security issues are beyond the
 | |
| scope of Postgres.
 | |
| .PP
 | |
| If greater security is desired, Postgres and its clients may be
 | |
| modified to use a network authentication system.  For example, the
 | |
| .IR postmaster ,
 | |
| .IR psql
 | |
| and the
 | |
| .IR libpq
 | |
| library have already been configured to use either Version 4 or Version 5 of
 | |
| the
 | |
| .IR Kerberos
 | |
| authentication system from the Massachusetts Institute of Technology.
 | |
| For more information on using
 | |
| .IR Kerberos
 | |
| with Postgres, see the appendix below.
 | |
| .SH "ACCESS CONTROL"
 | |
| Postgres provides mechanisms to allow users to limit the access to
 | |
| their data that is provided to other users.
 | |
| .SS "Database superusers"
 | |
| Database super-users (i.e., users who have \*(lqpg_user.usesuper\*(rq
 | |
| set) silently bypass all of the access controls described below with
 | |
| two exceptions: manual system catalog updates are not permitted if the
 | |
| user does not have \*(lqpg_user.usecatupd\*(rq set, and destruction of
 | |
| system catalogs (or modification of their schemas) is never allowed.
 | |
| .SS "Access Privilege
 | |
| The use of access privilege to limit reading, writing and setting
 | |
| of rules on classes is covered in
 | |
| .IR "grant/revoke" (l).
 | |
| .SS "Class removal and schema modification"
 | |
| Commands that destroy or modify the structure of an existing class,
 | |
| such as
 | |
| .IR "alter" ,
 | |
| .IR "drop table" ,
 | |
| and
 | |
| .IR "drop index" ,
 | |
| only operate for the owner of the class.  As mentioned above, these
 | |
| operations are
 | |
| .BR never
 | |
| permitted on system catalogs.
 | |
| .SH "FUNCTIONS AND RULES"
 | |
| Functions and rules allow users to insert code into the backend server
 | |
| that other users may execute without knowing it.  Hence, both
 | |
| mechanisms permit users to
 | |
| .BR "trojan horse"
 | |
| others with relative impunity.  The only real protection is tight
 | |
| control over who can define functions (e.g., write to relations with
 | |
| SQL fields) and rules.  Audit trails and alerters on
 | |
| \*(lqpg_class\*(rq, \*(lqpg_user\*(rq and \*(lqpg_group\*(rq are also
 | |
| recommended.
 | |
| .SS "Functions"
 | |
| Functions written in any language except SQL 
 | |
| run inside the backend server
 | |
| process with the permissions of the user \*(lqpostgres\*(rq (the
 | |
| backend server runs with its real and effective user-id set to
 | |
| \*(lqpostgres\*(rq).  It is possible for users to change the server's
 | |
| internal data structures from inside of trusted functions.  Hence,
 | |
| among many other things, such functions can circumvent any system
 | |
| access controls.  This is an inherent problem with user-defined C functions.
 | |
| .SS "Rules"
 | |
| Like SQL functions, rules always run with the identity and
 | |
| permissions of the user who invoked the backend server.
 | |
| .SH "SEE ALSO"
 | |
| postmaster(1),
 | |
| alter(l),
 | |
| insert(l),
 | |
| grant/revoke(l),
 | |
| copy(l),
 | |
| create(l),
 | |
| delete(l),
 | |
| drop table(l),
 | |
| drop index(l),
 | |
| drop rule(l),
 | |
| update(l),
 | |
| select(l),
 | |
| kerberos(1),
 | |
| kinit(1),
 | |
| kerberos(3)
 | |
| .SH CAVEATS 
 | |
| .PP
 | |
| There are no plans to explicitly support encrypted data inside of
 | |
| Postgres (though there is nothing to prevent users from encrypting
 | |
| data within user-defined functions).  There are no plans to explicitly
 | |
| support encrypted network connections, either, pending a total rewrite
 | |
| of the frontend/backend protocol.
 | |
| .PP
 | |
| User names, group names and associated system identifiers (e.g., the
 | |
| contents of \*(lqpg_user.usesysid\*(rq) are assumed to be unique
 | |
| throughout a database.  Unpredictable results may occur if they are
 | |
| not.
 | |
| .SH "APPENDIX: USING KERBEROS"
 | |
| .SS "Availability"
 | |
| The
 | |
| .IR Kerberos
 | |
| authentication system is not distributed with Postgres, nor is it
 | |
| available from the University of California at Berkeley.  Versions of
 | |
| .IR Kerberos
 | |
| are typically available as optional software from operating system
 | |
| vendors.  In addition, a source code distribution may be obtained
 | |
| through MIT Project Athena by anonymous FTP from ATHENA-DIST.MIT.EDU
 | |
| (18.71.0.38).  (You may wish to obtain the MIT version even if your
 | |
| vendor provides a version, since some vendor ports have been
 | |
| deliberately crippled or rendered non-interoperable with the MIT
 | |
| version.)  Users located outside the United States of America and
 | |
| Canada are warned that distribution of the actual encryption code in
 | |
| .IR Kerberos
 | |
| is restricted by U. S. government export regulations.
 | |
| .PP
 | |
| Any additional inquiries should be directed to your vendor or MIT
 | |
| Project Athena (\*(lqinfo-kerberos@ATHENA.MIT.EDU\*(rq).  Note that FAQLs
 | |
| (Frequently-Asked Questions Lists) are periodically posted to the
 | |
| .IR Kerberos
 | |
| mailing list, \*(lqkerberos@ATHENA.MIT.EDU\*(rq (send mail to
 | |
| \*(lqkerberos-request@ATHENA.MIT.EDU\*(rq to subscribe), and USENET
 | |
| news group, \*(lqcomp.protocols.kerberos\*(rq.
 | |
| .SS "Installation"
 | |
| Installation of 
 | |
| .IR Kerberos
 | |
| itself is covered in detail in the 
 | |
| .IR "Kerberos Installation Notes" .
 | |
| Make sure that the server key file (the
 | |
| .IR srvtab
 | |
| or
 | |
| .IR keytab )
 | |
| is somehow readable by user \*(lqpostgres\*(rq.
 | |
| .PP
 | |
| Postgres and its clients can be compiled to use either Version 4 or
 | |
| Version 5 of the MIT
 | |
| .IR Kerberos
 | |
| protocols by setting the 
 | |
| .SM KRBVERS
 | |
| variable in the file \*(lq.../src/Makefile.global\*(rq to the
 | |
| appropriate value.  You can also change the location where Postgres
 | |
| expects to find the associated libraries, header files and its own
 | |
| server key file.
 | |
| .PP
 | |
| After compilation is complete, Postgres must be registered as a
 | |
| .IR Kerberos
 | |
| service.  See the
 | |
| .IR "Kerberos Operations Notes"
 | |
| and related manual pages for more details on registering services.
 | |
| .SS "Operation"
 | |
| After initial installation, Postgres should operate in all ways as a
 | |
| normal
 | |
| .IR Kerberos
 | |
| service.  For details on the use of authentication, see the manual
 | |
| pages for 
 | |
| .IR postmaster (1)
 | |
| and 
 | |
| .IR psql (1).
 | |
| .PP
 | |
| In the 
 | |
| .IR Kerberos
 | |
| Version 5 hooks, the following assumptions are made about user
 | |
| and service naming: (1) user principal names (anames) are assumed to
 | |
| contain the actual Unix/Postgres user name in the first component; (2)
 | |
| the Postgres service is assumed to be have two components, the service
 | |
| name and a hostname, canonicalized as in Version 4 (i.e., all domain
 | |
| suffixes removed).
 | |
| .PP
 | |
| .nf
 | |
| user example: frew@S2K.ORG
 | |
| user example: aoki/HOST=miyu.S2K.Berkeley.EDU@S2K.ORG
 | |
| host example: postgres_dbms/ucbvax@S2K.ORG
 | |
| .fi
 | |
| .PP
 | |
| Support for Version 4 will disappear sometime after the production
 | |
| release of Version 5 by MIT.
 |