1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-27 12:41:57 +03:00

Allow root-owned SSL private keys in libpq, not only the backend.

This change makes libpq apply the same private-key-file ownership
and permissions checks that we have used in the backend since commit
9a83564c5.  Namely, that the private key can be owned by either the
current user or root (with different file permissions allowed in the
two cases).  This allows system-wide management of key files, which
is just as sensible on the client side as the server, particularly
when the client is itself some application daemon.

Sync the comments about this between libpq and the backend, too.

Back-patch of a59c79564 and 50f03473e into all supported branches.

David Steele

Discussion: https://postgr.es/m/f4b7bc55-97ac-9e69-7398-335e212f7743@pgmasters.net
This commit is contained in:
Tom Lane
2022-03-02 11:57:02 -05:00
parent 4936747c47
commit 9050999efe
3 changed files with 72 additions and 28 deletions

View File

@ -7768,21 +7768,33 @@ ldap://ldap.acme.com/cn=dbserver,cn=hosts?pgconnectinfo?base?(objectclass=*)
<para>
If the server attempts to verify the identity of the
client by requesting the client's leaf certificate,
<application>libpq</> will send the certificates stored in
file <filename>~/.postgresql/postgresql.crt</> in the user's home
<application>libpq</application> will send the certificate(s) stored in
file <filename>~/.postgresql/postgresql.crt</filename> in the user's home
directory. The certificates must chain to the root certificate trusted
by the server. A matching
private key file <filename>~/.postgresql/postgresql.key</> must also
be present. The private
key file must not allow any access to world or group; achieve this by the
command <command>chmod 0600 ~/.postgresql/postgresql.key</command>.
private key file <filename>~/.postgresql/postgresql.key</filename> must also
be present.
On Microsoft Windows these files are named
<filename>%APPDATA%\postgresql\postgresql.crt</filename> and
<filename>%APPDATA%\postgresql\postgresql.key</filename>, and there
is no special permissions check since the directory is presumed secure.
<filename>%APPDATA%\postgresql\postgresql.key</filename>.
The location of the certificate and key files can be overridden by the
connection parameters <literal>sslcert</> and <literal>sslkey</> or the
environment variables <envar>PGSSLCERT</> and <envar>PGSSLKEY</>.
connection parameters <literal>sslcert</literal>
and <literal>sslkey</literal>, or by the
environment variables <envar>PGSSLCERT</envar> and <envar>PGSSLKEY</envar>.
</para>
<para>
On Unix systems, the permissions on the private key file must disallow
any access to world or group; achieve this by a command such as
<command>chmod 0600 ~/.postgresql/postgresql.key</command>.
Alternatively, the file can be owned by root and have group read access
(that is, <literal>0640</literal> permissions). That setup is intended
for installations where certificate and key files are managed by the
operating system. The user of <application>libpq</application> should
then be made a member of the group that has access to those certificate
and key files. (On Microsoft Windows, there is no file permissions
check, since the <filename>%APPDATA%\postgresql</filename> directory is
presumed secure.)
</para>
<para>