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 属于可能把自己锁在门外的操作:改前保留一个已连接的会话,改后用新连接验证,确认无误再关闭旧会话。