首页/安全/漏洞与攻击面速查/PostgreSQL trust 认证与监听范围
主机与服务风险面53 条

PostgreSQL trust 认证与监听范围

pg_hba.conf 中的 trust 认证方式表示连接时不做口令校验;配合 listen_addresses='*',任意可达来源都可能直接登录数据库。

漏洞与攻击面速查安全更新于 2026-10-13

PostgreSQL trust 认证风险是什么

pg_hba.conf 中的 trust 认证方式表示连接时不做口令校验:只要网络可达、用户名对得上,就能直接登录。它与 listen_addresses='*' 组合时风险最大——任意可达来源都可能以高权限角色进入数据库。trust 常是本地运维脚本时代的遗留配置,迁移到云上或扩大网络范围后问题被显著放大。

基本信息

默认端口5432
关键文件pg_hba.conf(认证规则)、postgresql.conf(listen_addresses)
推荐认证scram-sha-256(配合 password_encryption 设置)
生效方式修改后执行 reload;改动生效前旧规则仍然有效

核查命令

核查命令
psql -c 'SHOW listen_addresses;'                                    # 监听范围
grep -vE '^\s*#|^\s*$' $PGDATA/pg_hba.conf | grep -i trust          # 仍在使用 trust 的规则
psql -c 'SELECT usename, passwd IS NULL AS no_password FROM pg_shadow;'   # 无口令角色
ss -lntp | grep 5432                                                # 对外可达性

收敛要点

收敛要点
1. 认证方式改为 scram-sha-256(配合 password_encryption 设置)
2. listen_addresses 收敛到本机或管理网卡地址
3. 按 库/用户/来源 精细划分 pg_hba 规则,避免整网段 trust
4. 改配置后 pg_ctl reload,并回归应用连接
5. 规则顺序从上到下匹配:把宽松规则放在末尾,避免被提前命中

典型使用场景

  • 实例上线基线:确认无 trust 规则、监听范围已收敛
  • 暴露面排查:从外部视角确认 5432 是否可达
  • 等保与审计整改:认证方式与来源限制是常见核查项
  • 迁移后复核:本地库迁云或跨网络迁移后重新审视 pg_hba
  • 排查连接异常:应用突然连不上时,先看是否刚改过规则顺序

风险组合与处置

组合风险处置
任意来源 trust + 全监听极高立即改为口令认证并收敛监听
内网网段 trust高改为 scram 并按需保留个别来源
本地 trust中评估是否需要,运维账号用口令
scram + 来源白名单可接受纳入日常核查
trust 常出现在本地运维脚本时代,迁移云上后来源网段扩大,问题随之放大;排查时不要只看是否有口令,还要看规则里授予了哪些数据库与角色。
修改 pg_hba.conf 属于可能把自己锁在门外的操作:改前保留一个已连接的会话,改后用新连接验证,确认无误再关闭旧会话。

易错点

  • 修改 pg_hba.conf 后未 reload,旧规则仍生效,误判为已修复
  • 规则顺序放错,宽松规则写在前面,后续收紧规则被跳过
  • 只改认证方式不改监听范围,口令一旦泄露仍可从任意网段尝试
  • 只关注 trust 不检查是否存在无口令角色,改完认证仍有空口令账号可用
  • 误以为改了配置文件就等于全局生效,忽略了包含文件与 include 顺序

数据来源与参考

  • PostgreSQL 文档(客户端认证与 pg_hba.conf)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌