pg_hba 与监听地址
pg_hba.conf 是 PostgreSQL 的客户端认证控制文件,按「来源地址 + 数据库 + 用户」自上而下逐条匹配,决定这条连接用哪种方式认证(trust、peer、md5、scram-sha-256)。listen_addresses 则决定实例监听在哪些网卡上。两者叠加构成了数据库的暴露边界:一旦端口对公网开放且规则里存在 trust,客户端连接无需口令,数据库等于对所有人敞开。
基本信息
| 适用平台 | Linux(PostgreSQL 9.6 及以上) |
|---|---|
| 配置文件 | /etc/postgresql/<版本>/main/pg_hba.conf |
| 生效方式 | reload(不需要重启实例) |
| 基线要求 | 无 trust 行、只监听本机与内网、口令用 scram-sha-256 |
| 默认端口 | 5432 |
典型使用场景
- 数据库迁移或上云后,核对外网是否可以直接连到 5432
- 安全整改时逐条清理 pg_hba 中的 trust 与 0.0.0.0/0 规则
- 新建实例时按业务网段规划来源与认证方式
- 应用连不上数据库时,排查认证方式、监听地址与来源网段
- 确认云主机安全组与 pg_hba 是否出现重复放行
核查现状
核查现状
ss -tlnp | grep ':5432 ' # 确认监听地址与所属进程
psql -c "SHOW listen_addresses;" # 实际生效的监听范围
psql -c "SHOW password_encryption;" # 当前的存储与校验方式
grep -Ev '^#|^$' /etc/postgresql/*/main/pg_hba.conf | tail -20 # 文件末尾的规则优先匹配收敛写法
收敛写法
listen_addresses = '127.0.0.1,10.0.0.5' # 只绑定本机与内网地址
password_encryption = 'scram-sha-256' # 新环境直接使用 scram
# pg_hba.conf 中的一条规则示例(按来源网段最小化):
# host appdb appuser 10.0.0.0/8 scram-sha-256复核必查项
| 检查项 | 含义 | 处置 |
|---|---|---|
| trust 行 | 完全免密的认证方式 | 发现即改并轮换相关口令 |
| 0.0.0.0/0 | 允许任意来源连接 | 收敛到业务网段 |
| listen_addresses | 实例监听的网卡范围 | 只绑本机或内网地址 |
| 认证方式 | md5 与 scram 的强度差异 | 新环境统一用 scram-sha-256 |
| 匹配顺序 | 自上而下首条命中生效 | 调整时注意前后行互相覆盖 |
trust 表示连接时连口令都不用输;公网可达时数据库对所有扫描者开放。发现 trust 行必须立即整改,并把涉及的库账号口令全部轮换。
pg_hba.conf 改完 reload 就生效(systemctl reload postgresql 或 pg_ctl reload),不必重启;而 listen_addresses 属于 postgresql.conf,同样 reload 后实例会重新绑定监听地址。