18.7. 防止服务器欺骗

在服务器运行时,恶意用户无法代替普通数据库服务器。但是,当服务器关闭时,本地用户可以通过启动自己的服务器来欺骗普通服务器。欺骗服务器可以读取 Client 端发送的密码和查询,但不能返回任何数据,因为由于目录权限,PGDATA目录仍然是安全的。欺骗是可能的,因为任何用户都可以启动数据库服务器。除非经过特殊配置,否则 Client 端无法识别无效的服务器。

一种防止local连接欺骗的方法是使用 Unix 域套接字目录(unix_socket_directories),该目录仅对受信任的本地用户具有写权限。这样可以防止恶意用户在该目录中创建自己的套接字文件。如果您担心某些应用程序可能仍然引用/tmp作为套接字文件,因此容易受到欺骗,请在 os 启动期间创建指向重新定位的套接字文件的符号链接/tmp/.s.PGSQL.5432。您可能还需要修改/tmp清理脚本,以防止删除符号链接。

local连接的另一个选项是让 Client 端使用requirepeer指定连接到套接字的服务器进程的必需所有者。

为了防止欺骗 TCP 连接,最好的解决方案是使用 SSL 证书,并确保 Client 端检查服务器的证书。为此,必须将服务器配置为仅接受hostssl连接(Section 20.1),并具有 SSL 密钥和证书文件(Section 18.9)。 TCPClient 端必须使用sslmode=verify-caverify-full连接,并安装了适当的根证书文件(Section 33.18.1)。