Security issues concerning pgsql replication

From: "xiebin (F)" <xiebin18(at)huawei(dot)com>
To: "pgsql-general(at)postgresql(dot)org" <pgsql-general(at)postgresql(dot)org>
Cc: "zhubo (C)" <zhubo31(at)huawei(dot)com>, "Zhuzheng (IT)" <zhuzheng(at)huawei(dot)com>, houxiaowei <brian(dot)hou(at)huawei(dot)com>, "yangshaobo (A)" <yangshaobo6(at)huawei(dot)com>, mapinghu <mapinghu(at)huawei(dot)com>, Songyunpeng <songyunpeng(at)huawei(dot)com>, "luoqi (F)" <luoqi25(at)huawei(dot)com>
Subject: Security issues concerning pgsql replication
Date: 2020-10-27 08:52:33
Message-ID: b8b86db2921441e48ba8c140fd846bf0@huawei.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Hi,

I was setting up a master/slave pgsql(version 12.4) cluster using stream replication. I found 3 ways to authenticate, but all of them has some security issue.

1. Disable authentication.

cat pg_hba.conf
host all all 0/0 md5
host replication xie 192.168.1.31/32 trust

In this case, untrusted users on slave may use pg_basebackup to stole data.

2. Using password.

cat pg_hba.conf
host all all 0/0 md5
host replication xie 192.168.1.31/32 md5

cat /var/lib/pgsql/.pgpass (on slave)

192.168.1.30:5432:xie:mydb:xie

In this case, the password is stored unencrypted. File access control may help, but it’s not secure enough.

3. Using certificate.

cat pg_hba.conf
host all all 0/0 md5
hostssl replication xie 192.168.1.31/32 cert clientcert=1

cat postgresql.conf | grep ssl
ssl = on
ssl_ca_file = 'root.crt'
ssl_cert_file = 'server.crt'
ssl_crl_file = ''
ssl_key_file = 'server.key'

cat recovery.conf
primary_conninfo = 'host=192.168.1.30 port=5432 user=xie application_name=stream_relication sslrootcert=/tmp/root.crt sslcert=/tmp/xie.crt sslkey=/tmp/xie.key'
restore_command = ''
recovery_target_timeline = 'latest'
primary_slot_name = 'rep_slot'

The certificates are created by official instructions https://www.postgresql.org/docs/12/ssl-tcp.html#SSL-CERTIFICATE-CREATION. But the private key is not encrypted.

I noticed in psql 11+ version, a new configuration ssl_passphrase_command is added, so that encrypted private key can be used.

But as far as I know, encrypted private key is not supported in stream replication.

I wonder if there is another way to authenticate in replication? Or does pgsql has any plan to support encrypted private key in replication?

Xie Bin

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Magnus Hagander 2020-10-27 08:59:54 Re: Security issues concerning pgsql replication
Previous Message Hu Bert 2020-10-27 05:53:32 Re: postgis update wants to install postgresql-13