当服务器正在运行时,恶意用户不可能取代正常的数据库服务器。然而,当服务器关闭时,本地用户却可能通过启动自己的服务器来冒充正常服务器。这个伪造服务器可以读取客户端发出的密码和查询语句,但由于PGDATA目录仍然受目录权限保护,它无法返回任何真实数据。之所以会出现这种冒充,是因为任何用户都可以启动一个数据库服务器;而客户端除非经过专门配置,否则无法识别服务器是否为伪造。
防止local连接被欺骗的一种办法,是使用一个 Unix 域套接字目录(unix_socket_directories),并且只允许可信的本地用户对该目录拥有写权限。这样可以防止恶意用户在其中创建自己的套接字文件。如果你担心某些应用程序仍会引用/tmp中的套接字文件,因此仍然容易受到欺骗,那么可以在操作系统启动时创建一个符号链接/tmp/.s.PGSQL.5432,使其指向迁移后的套接字文件。你可能还需要修改/tmp清理脚本,防止该符号链接被删除。
对于local连接,另一个选项是让客户端使用requirepeer,指定连接到该套接字的服务器进程必须由哪个用户拥有。
要防止 TCP 连接上的服务器欺骗,最佳办法是使用 SSL 证书,并确保客户端检查服务器证书。为此,服务器必须配置为仅接受 hostssl 连接(Section 20.1),并且具备 SSL 密钥和证书文件(Section 18.9)。TCP 客户端必须使用 sslmode=verify-ca 或 verify-full 连接,并安装适当的根证书文件(Section 33.18.1)。