25、PostgreSQL数据库配置核查命令

PostgreSQL 配置核查命令速查:连接与版本、pg_hba.conf 与 password_encryption 身份鉴别、pgaudit 访问控制与审计、SSL 传输加密四组只读取证命令及速判口径。

定位:PostgreSQL 测评核查命令速查(配套 03、PostgreSQL 测评命令单)。 配套加固:14、PostgreSQL数据库加固;高风险口径:22、高风险判定指引与加固对照表。 适用版本:PostgreSQL 9.6~17(差异见加固篇版本适用性注)。

使用说明:

  • 本文所有命令均为只读取证命令,不修改配置、不重启服务、不执行清除类操作;确需变更由被测单位运维方在授权下实施。
  • 命令回显本身即证据,须连同命令行一起截图;示例中的地址、账户、路径均为演示值,现场须替换为真实取证结果,并对个人信息与内网管理地址脱敏后再入报告。
  • 命令不存在或输出与示例差异较大时,先确认产品版本与部署形态(单机/集群/容器/云托管),再换用等效命令或转入配置文件、管理控制台取证,不得据命令缺失直接判不符合
  • 文中「默认」「一般」等表述均为初判倾向,须经上机核查 + 访谈 + 配置/制度核对三方印证后定论,并在报告中写明取证来源。

不适用标识说明:

  • 使用 【不适用】 明确标记现场可判定为不适用的控制点,并写明判定依据。
  • 依据 GB/T 28448-2019「按测评对象实际承载功能与数据处理范围判定」原则:控制能力由上层应用、统一认证平台、前置代理、堡垒机、宿主操作系统或云托管平台承载时,应注明测评单元边界后判定不适用或转由上位组件核查,不得机械按缺失判不符合。
  • 产品版本确实不提供该能力(如社区版无审计插件)时,须核查替代措施并按替代措施的实际效果定档,不得直接判不适用。

一、连接与版本

对应控制点:GB/T 22239-2019 8.1.4.1 身份鉴别 a)、8.1.4.2 访问控制 a)c)、8.1.4.4 入侵防范 e)

pg_ctl --version                              # 数据库版本
psql -h 127.0.0.1 -d postgres -U postgres     # 连接(本机 superuser)
select version();

二、身份鉴别

对应控制点:GB/T 22239-2019 8.1.4.1 身份鉴别 a)~d)

判定要点:账户唯一且非默认口令、鉴别信息复杂度与有效期均已配置、远程管理走加密通道、失败处理与会话超时已启用 → 符合;仅满足其中一部分(如有口令但无复杂度、无失败锁定、无空闲超时)→ 部分符合;管理入口无鉴别、存在空口令或沿用出厂口令 → 不符合(高风险)。

取证要求:账户清单截图、口令策略参数截图、加密通道配置截图、失败锁定与会话超时参数截图、弱口令实测记录;由统一认证平台承载时补平台侧配置与对接截图。

show password_encryption;                     -- 口令加密算法(md5 / scram-sha-256)
select usename, valuntil from pg_shadow;      -- 口令到期时间(valuntil 为空即不过期)
show shared_preload_libraries;                -- 是否加载 passwordcheck 等复杂度模块
select * from pg_settings ps where ps.name like '%timeout%';   -- 超时类参数
cat /var/lib/pgsql/data/pg_hba.conf           # 身份认证方式(重点)

pg_hba.conf 五列含义:TYPE(local=套接字 / host=主机地址 / hostssl=强制 SSL 连接)、DATABASE(库名,all 为全部)、USER(用户,all 为全部)、ADDRESS(允许的来源)、METHOD(trust/scram-sha-256/md5/reject 等)。

  • 判定:METHOD 含 trust → 高风险;未使用 hostssl/ssl → 远程管理防窃听不符合。

三、访问控制与审计

对应控制点:GB/T 22239-2019 8.1.4.2 访问控制 a)~g)、8.1.4.3 安全审计 a)~d)

\du                                          -- 角色与权限
select * from pg_roles;
select * from pg_stat_user_tables;
cat /var/lib/pgsql/data/postgresql.conf | grep -E "logging_collector|log_statement"
  • 判定:logging_collector = onlog_statement 非 none 才具备语句级审计;结合 pgAudit 判定(见加固篇第五节)。

四、传输加密

对应控制点:GB/T 22239-2019 8.1.4.7 数据完整性 a)、8.1.4.8 数据保密性 a)

cat /var/lib/pgsql/data/postgresql.conf | grep -E "^ssl"
  • ssl = on 且 pg_hba 配置 hostssl → 传输加密符合;select * from pg_stat_ssl where pid = pg_backend_pid(); 验证当前连接。

参考依据

  • GB/T 22239-2019《信息安全技术 网络安全等级保护基本要求》(8.1.4 安全计算环境各控制点):http://openstd.samr.gov.cn/bzgk/gb/newGbInfo?hcno=BAFB47E8874764186BDB7865E8344DAF
  • GB/T 28448-2019《信息安全技术 网络安全等级保护测评要求》(测评对象边界认定、单元测评实施与结果判定:符合/部分符合/不符合/不适用):http://openstd.samr.gov.cn/bzgk/gb/newGbInfo?hcno=7E736CDF4502B6FF1258DD250AA3EC8C
  • GB/T 25070-2019《信息安全技术 网络安全等级保护安全设计技术要求》,可在全国标准信息公共服务平台检索:http://openstd.samr.gov.cn/bzgk/gb/
  • GB/T 28449-2018《信息安全技术 网络安全等级保护测评过程指南》(现场测评活动与证据留存要求),可在全国标准信息公共服务平台检索:http://openstd.samr.gov.cn/bzgk/gb/
  • PostgreSQL 官方文档 — 口令认证:https://www.postgresql.org/docs/current/auth-password.html
  • The pg_hba.conf File:https://www.postgresql.org/docs/current/auth-pg-hba-conf.html
  • 运行时配置 — 日志记录:https://www.postgresql.org/docs/current/runtime-config-logging.html
  • pgaudit 扩展:https://github.com/pgaudit/pgaudit
  • SSL 支持:https://www.postgresql.org/docs/current/ssl-tcp.html
  • 《网络安全等级保护测评高风险判定指引》(中关村信息安全测评联盟团体标准)——高风险情形判定口径,站内对照表:22、高风险判定指引与加固对照表
  • 命令核验说明:PostgreSQL 相关命令已对照 PostgreSQL 官方文档核验(核验日期 2026-09-02)。要点:① 客户端认证由数据目录下的 pg_hba.conf 控制,按行顺序匹配、第一条命中的规则生效;认证方法中 trust 表示任何来源免密连接(属高风险配置,仅限开发测试),peer 仅适用于本地 Unix socket,md5 强度不足,推荐 scram-sha-256,高安全场景用 certhostssl)或 ldap/kerberos/pam。② 口令哈希算法由 postgresql.confpassword_encryption 控制(SHOW password_encryption; 查询),SCRAM-SHA-256 自 PostgreSQL 10 引入;若口令以 SCRAM 存储而 pg_hba.confmd5,服务端会自动切换为 SCRAM 认证,反之则认证失败,须核查 pg_authid 中实际存储的哈希格式。③ log_statement 设为 DDLALL 时,CREATE ROLE/USER ... WITH PASSWORDALTER ROLE/USER ... WITH PASSWORD 语句会把口令明文写入服务器日志(引擎预期行为),属取证时的反向风险点;应改用 pgaudit 扩展并将 pgaudit.log 设为 ROLE,该扩展会对日志中的口令做修订(redaction)。④ pgaudit 各类别(READ/WRITE/DDL/ROLE/FUNCTION/MISC/ALL)须逐个显式指定,pgaudit.log_client 默认应保持关闭,pgaudit.log_level 仅在 log_client 开启时生效。⑤ PostgreSQL 12 及更早版本已停止社区支持,须对照官方版本支持周期确认补丁可获得性。

关联文章