选择 打开 改范围 完整检索页
受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发版本: 19 / devel
不受支持的版本: 13 / 12 / 11 / 10
当前 PostgreSQL 版本不在支持生命周期内。
您可以参阅当前版本的对应页面,或其他在上面列出的活跃大版本。

18.7. 防止服务器欺骗 #

当服务器正在运行时,恶意用户不可能取代正常的数据库服务器。然而,当服务器关闭时,本地用户却可能通过启动自己的服务器来冒充正常服务器。这个伪造服务器可以读取客户端发出的密码和查询语句,但由于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-caverify-full 连接,并安装适当的根证书文件(Section 34.18.1)。