服务器在运行时,它不可能让恶意用户取代正常的数据库服务器。然而,当服务器关闭时, 一个本地用户可以通过启动它们自己的服务器来欺骗正常的服务器。行骗的服务器可以读取客户端发送的密码和查询语句, 但是不会返回任何数据,因为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 34.18.1)。