文章总结: 本文基于GB/T22239-2019等保三级要求,提供PostgreSQL数据库安全测评的完整命令清单和实操指南。涵盖身份鉴别、访问控制、安全审计等8个控制点,包含空口令检测、密码复杂度验证、SSL加密检查等具体命令,并附赠一键巡检脚本和关键配置说明。文档已验证于CentOS7+PostgreSQL15.4环境,可直接用于等保合规实践。 综合评分: 87 文章分类: 技术标准,解决方案,安全建设,应用安全,数据安全
等保测评命令——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; 包含 passwordcheck; SELECT 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; | stderr & on |
| 审计级别 | 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数据库》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。








评论