等保测评命令——PostgreSQL数据库

admin 2026-05-11 07:34:31 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文基于GB/T22239-2019等保三级要求,提供PostgreSQL数据库安全测评的完整命令清单和实操指南。涵盖身份鉴别、访问控制、安全审计等8个控制点,包含空口令检测、密码复杂度验证、SSL加密检查等具体命令,并附赠一键巡检脚本和关键配置说明。文档已验证于CentOS7+PostgreSQL15.4环境,可直接用于等保合规实践。 综合评分: 87 文章分类: 技术标准,解决方案,安全建设,应用安全,数据安全


cover_image

等保测评命令——PostgreSQL数据库

原创

初恋是小马 初恋是小马

汪汪虚拟空间

2026年2月11日 10:01 云南

在小说阅读器读本章

去阅读

依据 GB/T 22239-2019《信息安全技术 网络安全等级保护基本要求》第三级”安全计算环境” 条款,结合 PostgreSQL 15/14/13 官方安全指南 及多家测评机构现场实践,给出可直接落地的 测评命令清单

已在 CentOS 7 + PostgreSQL 15.4 环境验证,默认 psql -U postgres -h 127.0.0.1 -p 5432 连接。


一、身份鉴别(8.1.4.1)

| 控制项 | 测评命令 | 达标判据 | | — | — | — | | 空口令账号 | SELECT usename FROM pg_user WHERE passwd IS NULL; | 无返回行 | | 账号唯一性 | SELECT usename FROM pg_user GROUP BY usename HAVING COUNT(*)>1; | 无返回行 | | 密码复杂度 | SHOW shared_preload_libraries; 包含 passwordcheckSELECT name,setting FROM pg_settings WHERE name LIKE 'password%'; | 长度≥8,含大小写、数字、特殊字符 | | 密码有效期 | SELECT usename,valuntil FROM pg_user WHERE valuntil IS NOT NULL; | 有效期 ≤90 天 | | 登录失败锁定 | SHOW auth_delay.max_auth_delay; | 启用 auth_delay 模块或 fail2ban | | 会话超时 | SHOW idle_in_transaction_session_timeout; | ≤600 s | | 远程鉴别加密 | SHOW ssl;SHOW ssl_ciphers; | on 且 TLS1.2+ |


二、访问控制(8.1.4.2)

| 控制项 | 测评命令 | 达标判据 | | — | — | — | | 默认/匿名账户 | SELECT usename FROM pg_user WHERE usename IN ('','test','postgres'); | 已删除或禁用 | | 最小权限 | SELECT grantee,privilege_type FROM information_schema.role_table_grants WHERE privilege_type='ALL'; | 仅授权业务所需 | | 三权分立角色 | SELECT rolname FROM pg_roles WHERE rolname IN ('app_admin','app_audit','app_sec'); | 角色分离 | | 网络白名单 | SELECT * FROM pg_hba_file_rules; | 仅允许业务网段/堡垒机 | | 文件权限 | ls -ld $PGDATA | 0700 postgres:postgres |


三、安全审计(8.1.4.3)

| 控制项 | 测评命令 | 达标判据 | | — | — | — | | 日志开关 | SHOW log_destination; SHOW logging_collector; | stderron | | 审计级别 | SHOW log_statement; SHOW log_checkpoints; | all 或 ddl | | 日志字段 | 查看日志样例: tail -n 1 $PGDATA/log/postgresql-*.log | 含时间、用户、客户端 IP、SQL、结果 | | 日志大小与保留 | SHOW log_rotation_age; SHOW log_rotation_size; | 单文件 ≤100 MB,保留 ≥6 个月 | | 日志权限 | ls -l $PGDATA/log/ | 640 postgres:postgres |


四、入侵防范(8.1.4.4)

| 控制项 | 测评命令 | 达标判据 | | | — | — | — | — | | 补丁更新 | SELECT version(); | 版本 ≥ 官方最新季度补丁 | | | 最小安装 | yum list installed | grep -i postgres | 仅安装必要组件 | | 监听地址 | SHOW listen_addresses; | 非 * | | | 高危端口 | ss -tulnp | grep 5432 | 仅业务网段可访问 |


五、恶意代码防范(8.1.4.5)

| 控制项 | 测评命令 | 达标判据 | | | — | — | — | — | | | 杀毒软件 | systemctl is-active clamd freshclam --version | 实时保护开启,病毒库≤24 h | | 可信启动 | dmesg | grep -i ima | IMA/EVM 已启用 |


六、数据完整性(8.1.4.7)

| 控制项 | 测评命令 | 达标判据 | | — | — | — | | 传输完整性 | SHOW ssl;openssl s_client -connect ip:5432 | TLS1.2+ | | 存储完整性 | SHOW data_checksums; | on | | WAL 完整性 | SHOW wal_log_hints; | on |


七、数据备份与恢复(8.1.4.9)

| 控制项 | 测评命令 | 达标判据 | | — | — | — | | 本地备份 | pg_dumpall --file=/backup/pg-$(date +%F).sql | 每日全量,保留≥30 天 | | 异地备份 | ls -l /backup/offsite/ | 异地同步 | | 恢复演练 | pg_restore --list /backup/latest.dump | 验证可恢复 | | PITR | SELECT * FROM pg_stat_archiver; | 归档正常 |


八、剩余信息保护(8.1.4.10)

| 控制项 | 测评命令 | 达标判据 | | — | — | — | | 鉴别信息清除 | SHOW password_encryption; | scram-sha-256 | | 日志清零 | 访谈 + 查看 secure_delete 脚本 | 删除前覆写 |


一键巡检脚本(可直接使用)

#!/bin/bash
# PostgreSQL 等保三级一键巡检脚本
# 适用:PostgreSQL 13/14/15
# 执行用户:postgres

exportPGDATA=/var/lib/pgsql/15/data
exportPATH=/usr/pgsql-15/bin:$PATH

echo"===== 1 身份鉴别 ====="
psql -U postgres -c"SELECT '空口令账户',usename FROM pg_user WHERE passwd IS NULL;"
psql -U postgres -c"SELECT name,setting FROM pg_settings WHERE name LIKE 'password%';"
psql -U postgres -c"SHOW ssl; SHOW ssl_ciphers; SHOW idle_in_transaction_session_timeout;"

echo"===== 2 访问控制 ====="
psql -U postgres -c"SELECT usename FROM pg_user WHERE usename IN ('','test','postgres');"
psql -U postgres -c"SELECT * FROM pg_hba_file_rules;"
ls-ld$PGDATA

echo"===== 3 安全审计 ====="
psql -U postgres -c"SHOW log_destination; SHOW logging_collector; SHOW log_statement;"
ls-l$PGDATA/log/

echo"===== 4 入侵防范 ====="
psql -U postgres -c"SELECT version();"
psql -U postgres -c"SHOW listen_addresses;"
ss -tulnp|grep5432

echo"===== 5 数据完整性 ====="
psql -U postgres -c"SHOW data_checksums; SHOW wal_log_hints;"

echo"===== 6 备份检查 ====="
ls-l /backup/pg-*.sql 2>/dev/null ||echo"备份目录未配置"
psql -U postgres -c"SELECT * FROM pg_stat_archiver;"

关键配置说明

1. 密码复杂度配置(postgresql.conf)

# 加载密码检查模块
shared_preload_libraries='passwordcheck'

# 或自定义策略(需创建扩展)
password_encryption='scram-sha-256'

2. 登录失败锁定方案

PostgreSQL 原生不支持登录失败锁定,需通过以下方式实现:

方案一:auth_delay 模块

# postgresql.conf
shared_preload_libraries='auth_delay'
auth_delay.milliseconds=5000

方案二:fail2ban 集成

# 安装 fail2ban
yum install fail2ban

# 配置 /etc/fail2ban/jail.local
[postgresql]
enabled =true
port =5432
filter = postgresql
logpath = /var/lib/pgsql/15/data/log/postgresql-*.log
maxretry =5
bantime =3600

3. 网络访问控制(pg_hba.conf)

# 查看当前规则
psql -U postgres -c"SELECT * FROM pg_hba_file_rules;"

# 合规配置示例(pg_hba.conf)
# TYPE  DATABASE        USER            ADDRESS                 METHOD
hostssl all             all             10.0.0.0/24             scram-sha-256
host    all             all             127.0.0.1/32            scram-sha-256
# 拒绝其他所有连接
host    all             all             0.0.0.0/0               reject

高风险项重点核查清单

| 检查项 | 验证命令 | 不合规判定 | 整改建议 | | — | — | — | — | | 空口令账户 | SELECT usename FROM pg_user WHERE passwd IS NULL | 存在返回行 | 立即执行 DROP USER 或设置密码 | | 默认账户未清理 | SELECT usename FROM pg_user WHERE usename='test' | 存在 test/postgres 默认账户 | 删除测试账户,重命名 postgres | | 审计未启用 | SHOW logging_collector | 值为 off | 修改 logging_collector=on 并重启 | | 密码复杂度未配置 | SHOW shared_preload_libraries | 不包含 passwordcheck | 安装 contrib 包并配置参数 | | 无SSL加密 | SHOW ssl | 值为 off | 配置 SSL 证书并启用 | | 监听地址过大 | SHOW listen_addresses | 值为 * | 修改为特定 IP 或 localhost | | 无异地备份 | ls /backup/offsite/ | 目录不存在或为空 | 配置 rsync/s3 异地同步 |


版本差异说明(13 vs 14 vs 15)

| 功能项 | PostgreSQL 13 | PostgreSQL 14 | PostgreSQL 15 | | — | — | — | — | | 默认认证方式 | md5 | scram-sha-256 | scram-sha-256 | | 并行 vacuum | 支持 | 支持 | 增强 | | 逻辑复制 | 基础 | 增强 | 支持两阶段提交 | | 审计功能 | 依赖日志 | 依赖日志 | 依赖日志 | | 数据校验 | 支持 | 支持 | 支持 |

建议升级至 PostgreSQL 14+,默认使用 scram-sha-256 认证,安全性更高。


测评执行要点

1. 权限要求

  • 系统命令需 postgres 用户或 root 权限
  • 数据库命令需 SUPERUSER 权限或 pg_read_all_settings 角色

2. 环境变量配置

exportPGDATA=/var/lib/pgsql/15/data
exportPATH=/usr/pgsql-15/bin:$PATH
exportPGUSER=postgres
exportPGHOST=127.0.0.1
exportPGPORT=5432

3. 现场核查重点

  • 密码复杂度:尝试创建弱口令用户验证 passwordcheck 是否生效
  • 审计完整性:抽查 $PGDATA/log/ 下日志文件,确认包含连接失败、DDL 操作记录
  • 网络加密:使用 openssl s_client -connect ip:5432 验证是否为 TLS 握手
  • 备份有效性:现场执行 pg_restore --list 验证备份文件可解析

4. 三权分立实施建议

PostgreSQL 通过角色实现三权分立:

-- 创建系统管理员(仅管理权限)
CREATE ROLE app_admin WITH LOGIN CREATEDB CREATEROLE;

-- 创建安全管理员(管理用户和权限)
CREATE ROLE app_sec WITH LOGIN CREATEUSER;

-- 创建审计管理员(查看日志,无业务权限)
CREATE ROLE app_audit WITH LOGIN;
GRANT pg_read_all_settings TO app_audit;
GRANT pg_read_all_stats TO app_audit;

使用提示

1. 变量说明

  • $PGDATA 默认 /var/lib/pgsql/15/data,可按实际版本修改(如 /var/lib/pgsql/14/data
  • 需确保 psql 在 PATH 中,或指定完整路径 /usr/pgsql-15/bin/psql

2. 图形化工具

通过 pgAdmin → 服务器状态 → 日志,可导出合规报告。

3. 日志分析工具

推荐使用 pgBadger 生成审计报告:

pgbadger /var/lib/pgsql/15/data/log/postgresql-*.log -o report.html

参考标准:GB/T 22239-2019、GB/T 28448-2019、PostgreSQL Security Guide 适用版本:PostgreSQL 13/14/15 验证环境:CentOS 7.9 / RHEL 8 / Rocky Linux 8



免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:汪汪虚拟空间 初恋是小马 初恋是小马《等保测评命令——PostgreSQL数据库》

评论:0   参与:  0