mirror of
https://github.com/postgres/postgres.git
synced 2025-06-17 17:02:08 +03:00
Allow group access on PGDATA
Allow the cluster to be optionally init'd with read access for the group. This means a relatively non-privileged user can perform a backup of the cluster without requiring write privileges, which enhances security. The mode of PGDATA is used to determine whether group permissions are enabled for directory and file creates. This method was chosen as it's simple and works well for the various utilities that write into PGDATA. Changing the mode of PGDATA manually will not automatically change the mode of all the files contained therein. If the user would like to enable group access on an existing cluster then changing the mode of all the existing files will be required. Note that pg_upgrade will automatically change the mode of all migrated files if the new cluster is init'd with the -g option. Tests are included for the backend and all the utilities which operate on the PG data directory to ensure that the correct mode is set based on the data directory permissions. Author: David Steele <david@pgmasters.net> Reviewed-By: Michael Paquier, with discussion amongst many others. Discussion: https://postgr.es/m/ad346fe6-b23e-59f1-ecb7-0e08390ad629%40pgmasters.net
This commit is contained in:
@ -8144,6 +8144,23 @@ dynamic_library_path = 'C:\tools\postgresql;H:\my_project\lib;$libdir'
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry id="guc-data-directory-mode" xreflabel="data_directory_mode">
|
||||
<term><varname>data_directory_mode</varname> (<type>integer</type>)
|
||||
<indexterm>
|
||||
<primary><varname>data_directory_mode</varname> configuration parameter</primary>
|
||||
</indexterm>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
On Unix systems this parameter reports the permissions of the data
|
||||
directory defined by (<xref linkend="guc-data-directory"/>) at startup.
|
||||
(On Microsoft Windows this parameter will always display
|
||||
<literal>0700</literal>). See
|
||||
<xref linkend="app-initdb-allow-group-access"/> for more information.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry id="guc-debug-assertions" xreflabel="debug_assertions">
|
||||
<term><varname>debug_assertions</varname> (<type>boolean</type>)
|
||||
<indexterm>
|
||||
|
@ -76,6 +76,14 @@ PostgreSQL documentation
|
||||
to do so.)
|
||||
</para>
|
||||
|
||||
<para>
|
||||
For security reasons the new cluster created by <command>initdb</command>
|
||||
will only be accessible by the cluster owner by default. The
|
||||
<option>--allow-group-access</option> option allows any user in the same
|
||||
group as the cluster owner to read files in the cluster. This is useful
|
||||
for performing backups as a non-privileged user.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
<command>initdb</command> initializes the database cluster's default
|
||||
locale and character set encoding. The character set encoding,
|
||||
@ -188,6 +196,17 @@ PostgreSQL documentation
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry id="app-initdb-allow-group-access" xreflabel="group access">
|
||||
<term><option>-g</option></term>
|
||||
<term><option>--allow-group-access</option></term>
|
||||
<listitem>
|
||||
<para>
|
||||
Allows users in the same group as the cluster owner to read all cluster
|
||||
files created by <command>initdb</command>.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry id="app-initdb-data-checksums" xreflabel="data checksums">
|
||||
<term><option>-k</option></term>
|
||||
<term><option>--data-checksums</option></term>
|
||||
|
@ -737,6 +737,12 @@ PostgreSQL documentation
|
||||
or later.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
<application>pg_basebackup</application> will preserve group permissions in
|
||||
both the <literal>plain</literal> and <literal>tar</literal> formats if group
|
||||
permissions are enabled on the source cluster.
|
||||
</para>
|
||||
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
|
@ -425,6 +425,12 @@ PostgreSQL documentation
|
||||
not keep up with fetching the WAL data.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
<application>pg_receivewal</application> will preserve group permissions on
|
||||
the received WAL files if group permissions are enabled on the source
|
||||
cluster.
|
||||
</para>
|
||||
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
|
@ -399,6 +399,17 @@ PostgreSQL documentation
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Notes</title>
|
||||
|
||||
<para>
|
||||
<application>pg_recvlogical</application> will preserve group permissions on
|
||||
the received WAL files if group permissions are enabled on the source
|
||||
cluster.
|
||||
</para>
|
||||
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Examples</title>
|
||||
|
||||
|
@ -137,7 +137,22 @@ postgres$ <userinput>initdb -D /usr/local/pgsql/data</userinput>
|
||||
database, it is essential that it be secured from unauthorized
|
||||
access. <command>initdb</command> therefore revokes access
|
||||
permissions from everyone but the
|
||||
<productname>PostgreSQL</productname> user.
|
||||
<productname>PostgreSQL</productname> user, and optionally, group.
|
||||
Group access, when enabled, is read-only. This allows an unprivileged
|
||||
user in the same group as the cluster owner to take a backup of the
|
||||
cluster data or perform other operations that only require read access.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Note that enabling or disabling group access on an existing cluster requires
|
||||
the cluster to be shut down and the appropriate mode to be set on all
|
||||
directories and files before restarting
|
||||
<productname>PostgreSQL</productname>. Otherwise, a mix of modes might
|
||||
exist in the data directory. For clusters that allow access only by the
|
||||
owner, the appropriate modes are <literal>0700</literal> for directories
|
||||
and <literal>0600</literal> for files. For clusters that also allow
|
||||
reads by the group, the appropriate modes are <literal>0750</literal>
|
||||
for directories and <literal>0640</literal> for files.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
@ -2194,6 +2209,15 @@ pg_dumpall -p 5432 | psql -d postgres -p 5433
|
||||
member of the group that has access to those certificate and key files.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
If the data directory allows group read access then certificate files may
|
||||
need to be located outside of the data directory in order to conform to the
|
||||
security requirements outlined above. Generally, group access is enabled
|
||||
to allow an unprivileged user to backup the database, and in that case the
|
||||
backup software will not be able to read the certificate files and will
|
||||
likely error.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
If the private key is protected with a passphrase, the
|
||||
server will prompt for the passphrase and will not start until it has
|
||||
|
Reference in New Issue
Block a user