当服务器运行时,恶意用户不可能取代正常的数据库服务器。但是,当服务器关闭时,本地用户可以通过启动他们自己的服务器来欺骗正常的服务器。欺骗服务器可以读取客户端发送的密码和查询,但由于 PGDATA
目录的目录权限仍然是安全的,因此无法返回任何数据。之所以可能进行欺骗,是因为任何用户都可以启动数据库服务器;除非经过特殊配置,否则客户端无法识别无效的服务器。
防止 local
连接欺骗的一种方法是使用一个 Unix 域套接字目录 (unix_socket_directories),该目录只对受信任的本地用户具有写入权限。这可以防止恶意用户在该目录中创建他们自己的套接字文件。如果您担心某些应用程序可能仍然引用 /tmp
作为套接字文件,从而容易受到欺骗,那么在操作系统启动期间,请创建一个指向重新定位的套接字文件的符号链接 /tmp/.s.PGSQL.5432
。您可能还需要修改您的 /tmp
清理脚本,以防止删除该符号链接。
对于 local
连接,另一种选择是让客户端使用 requirepeer
来指定连接到该套接字的服务器进程的所需所有者。
为了防止 TCP 连接上的欺骗,请使用 SSL 证书并确保客户端检查服务器的证书,或者使用 GSSAPI 加密(或者两者都使用,如果它们在单独的连接上)。
为了防止使用 SSL 进行欺骗,必须将服务器配置为仅接受 hostssl
连接 (第 20.1 节),并具有 SSL 密钥和证书文件 (第 18.9 节)。TCP 客户端必须使用 sslmode=verify-ca
或 verify-full
连接,并安装相应的根证书文件 (第 32.19.1 节)。或者,可以使用系统 CA 池,使用 sslrootcert=system
;在这种情况下,为了安全起见,强制使用 sslmode=verify-full
,因为通常很容易获得由公共 CA 签名的证书。
为了防止在使用网络上的 scram-sha-256 密码身份验证时发生服务器欺骗,您应该确保使用 SSL 连接到服务器,并使用上一段中描述的防欺骗方法之一。此外,libpq 中的 SCRAM 实现无法保护整个身份验证交换,但使用 channel_binding=require
连接参数可以缓解服务器欺骗。使用恶意服务器拦截 SCRAM 交换的攻击者可以使用离线分析来潜在地从客户端确定哈希密码。
为了防止使用 GSSAPI 进行欺骗,必须将服务器配置为仅接受 hostgssenc
连接 (第 20.1 节),并在其中使用 gss
身份验证。TCP 客户端必须使用 gssencmode=require
连接。
如果您在文档中发现任何不正确、与您特定功能体验不符或需要进一步澄清的内容,请使用 此表单报告文档问题。