2. PostgreSQL认证机制审计
PostgreSQL的客户端认证由 pg_hba.conf(Host-Based Authentication)统一控制。它决定了“谁、从哪个地址、连哪个库、以哪个用户、用什么认证方法”能否通过。审计时,理解规则匹配顺序与认证方法强度,比单纯检查文件是否存在更重要。
一、pg_hba.conf规则结构与匹配顺序
每条规则由五个核心字段组成:连接类型、数据库、用户、地址、认证方法。可选字段包括 auth-options 与 clientcert 等。规则自上而下逐条匹配,第一条匹配的规则即被采用,后续规则不再评估。因此,把宽松规则放在前面会直接覆盖后面的严格规则,这是最常见的审计风险。
# TYPE DATABASE USER ADDRESS METHOD
local all postgres peer
host all all 127.0.0.1/32 scram-sha-256
host appdb app_rw 10.20.0.0/24 scram-sha-256
host all all 0.0.0.0/0 reject
hostssl all all 0.0.0.0/0 cert clientcert=verify-full
上例中,local 表示 Unix 域套接字连接,host 表示 TCP(含 SSL 与非 SSL),hostssl 仅匹配 SSL 连接,hostnossl 仅匹配非 SSL。地址字段支持 CIDR、IP+掩码、主机名,以及 samehost、samenet 等关键字。审计时应确认:是否存在 0.0.0.0/0 且方法为 trust 的规则;是否所有远程连接都要求加密;reject 兜底规则是否位于末尾。
二、认证方法安全强度评估
trust 表示完全信任,不做任何身份验证。任何能建立连接的客户端都可以声明任意用户名。它只应出现在极受控的本地维护场景,绝不应出现在远程地址上。审计中一旦发现 host all all 0.0.0.0/0 trust,应视为高危。
md5 使用 MD5 加盐哈希传输口令。虽然口令不以明文传输,但 MD5 抗碰撞与抗暴力破解能力已不足,且服务端存储的 md5 哈希可被离线破解。在等保与合规审计中,md5 通常被视为“弱认证”,建议迁移到 scram-sha-256。
scram-sha-256 是 PostgreSQL 10 引入的挑战-响应认证,基于 SCRAM 机制,使用 SHA-256 与随机盐,支持服务端不存储明文等价物,且能抵抗重放与离线字典攻击。它是当前口令认证的推荐方法。迁移时需注意:password_encryption = scram-sha-256,且已有用户需重新设置口令以生成 SCRAM verifier。
cert 基于 TLS 客户端证书,配合 clientcert=verify-full 可校验证书链与 CN 映射,强度很高,适合服务间或高安全要求的远程接入。gss 依赖 Kerberos,ldap、radius、pam 将认证委托给外部系统,其强度取决于外部系统的口令策略与传输安全。审计时需确认外部连接是否使用 LDAPS 或加密通道。
三、审计实操与判断依据
审计第一步是定位配置文件。可通过 SHOW hba_file; 确认实际路径,避免修改了错误的文件。随后检查规则顺序与地址范围,重点识别 trust、md5、0.0.0.0/0、::/0 等高风险组合。修改后必须执行 SELECT pg_reload_conf(); 或 pg_ctl reload,并用 pg_hba_file_rules 视图核对加载结果与错误信息。
SELECT line_number, type, database, user_name, address, auth_method, error
FROM pg_hba_file_rules
ORDER BY line_number;
该视图会显示每条规则的解析结果,error 字段非空表示该行存在语法或语义问题。审计报告应记录:规则行号、匹配范围、认证方法、风险等级与整改建议。对于无法立即迁移 md5 的环境,可先限制其来源地址,再逐步切换。