我的服务器上有一个 PHP 脚本,需要访问数据库用户才能正常工作。编写该 PHP 脚本的人告诉我将以下内容添加到 pg_hba.conf 中:
host all all 127.0.0.1/32 trust
这会给我带来任何安全相关的问题吗?根据我的理解,该行的作用是允许本地托管的脚本无需密码即可连接到 pgsql。这是正确的吗?
该行的存在是否会导致在没有数据库密码的情况下建立与我的数据库的任何远程连接?
答案1
是的,这是一个配置除了非常有限的特殊情况外,您通常应该避免:
相信
无条件允许连接。此方法允许任何可以连接到 PostgreSQL 数据库服务器的人以他们希望的任何 PostgreSQL 用户身份登录,而无需密码或任何其他身份验证。
[...]
trust 身份验证仅适用于 TCP/IP 连接,前提是你信任每台机器上通过指定 trust 的 pg_hba.conf 行允许连接到服务器的每个用户。对于除来自 localhost (127.0.0.1) 之外的任何 TCP/IP 连接,使用 trust 很少是合理的。
请注意,允许连接而无需提供任何密码可能已经存在,因为许多发行版默认通过 unix 套接字对连接用户进行身份验证。这通常会导致系统www-data
用户能够在www-data
没有密码的情况下使用 postgres 用户。检查其余身份验证配置以查看是否是这种情况。
推荐:提供密码或证书认证,执行不是继续该trust
选项。
还要注意,将某些内容仅限制在环回地址通常不足以保证外部访问的安全。长期以来,环回绑定服务都是通过充当非预期代理的其他软件来访问的。