CentOS 上 PostgreSQL 安全设置策略
以下策略覆盖系统加固、网络访问控制、身份认证、加密传输、权限最小化、审计与备份恢复,适用于 CentOS 7/8/9,可按需裁剪。
一 系统与基础加固
- 保持系统与数据库更新:执行 sudo yum update -y,及时修补漏洞;为安全更新建立固定维护窗口与回滚预案。
- 最小权限运行:将数据库服务以专用系统用户(如 postgres)运行,禁止 root 直连数据库;限制数据库主目录与配置文件的访问权限(仅 postgres 与必要管理员可读写)。
- 服务与端口治理:仅开放必要端口(默认 5432/TCP),避免使用默认端口带来的自动化扫描风险;变更端口需同步更新防火墙与应用配置。
- 备份与恢复演练:制定周期性备份(如每日全量/持续 WAL 归档),定期在隔离环境验证可恢复性与恢复时间目标(RTO/RPO)。
二 网络与防火墙
- 默认拒绝:防火墙策略遵循“默认拒绝、按需放行”,仅允许来自可信网段/跳板机的 5432/TCP 访问。
- firewalld 示例(CentOS 7+):
- 放行端口:sudo firewall-cmd --permanent --zone=public --add-port=5432/tcp
- 使生效:sudo firewall-cmd --reload
- 校验:sudo firewall-cmd --list-ports
- 内网优先:生产环境建议将数据库置于 VPC/内网,通过跳板机或内网应用访问;公网直连仅作为例外并配合更强认证与加密。
- 变更生效:网络与防火墙调整后,按需重启数据库服务以应用新规则。
三 数据库配置与身份认证
- 监听与端口:在 postgresql.conf 中限制监听地址(如仅本地 localhost 或指定网段),避免不必要的公网暴露;端口变更需同步更新客户端与防火墙。
- 客户端认证:在 pg_hba.conf 中采用“就近原则 + 强认证”,示例:
- 本地连接:local all all peer/md5(本地优先用 peer,远程用 md5/更强方式)
- 内网管理:hostssl all admins 10.0.0.0/8 md5
- 应用访问:hostssl mydb app 10.1.2.0/24 md5
- 拒绝默认全放开:避免使用 host all all 0.0.0.0/0 md5 这类宽泛规则。
- 强制加密:启用 SSL/TLS 并优先使用 hostssl 条目,配置服务器证书与密钥,禁用明文连接。
- 生效方式:修改配置后执行 sudo systemctl restart postgresql 使配置生效。
四 权限最小化与账户治理
- 角色与用户:遵循最小权限原则,避免使用 SUPERUSER 作为应用账户;按需创建角色并授予登录、建库、只读等细粒度权限。
- 典型授权范式:
- 应用只读账号:GRANT CONNECT ON DATABASE mydb TO app_r; GRANT USAGE ON SCHEMA public TO app_r; GRANT SELECT ON ALL TABLES IN SCHEMA public TO app_r;(按需扩展到新表)
- 应用读写账号:GRANT INSERT, UPDATE, DELETE 到目标表;避免使用 GRANT ALL PRIVILEGES ON DATABASE 授予过度权限。
- 撤销与回收:对不再使用的角色执行 REVOKE 与 DROP ROLE;定期审计 \dp 与 information_schema 权限视图。
- 口令策略:设置强口令并定期轮换;禁止共享账号与明文口令落地。
五 加密传输与审计日志
- 传输加密:在 postgresql.conf 启用 ssl = on,配置 ssl_cert_file、ssl_key_file,并设置 ssl_ciphers = ‘HIGH:MEDIUM:+3DES:!aNULL’、ssl_prefer_server_ciphers = on;在 pg_hba.conf 中对远程连接使用 hostssl。
- 证书管理:使用受信任 CA 签发或企业内网 CA 证书;妥善保护私钥,限制证书文件权限。
- 审计与日志:启用 logging_collector = on,设置 log_directory、log_filename;按需记录 DDL/DML(如 log_statement = ‘all’ 或 ddl),并集中到安全的日志平台进行留存与告警。
- 系统审计:启用 auditd 记录关键系统调用与登录行为,使用 ausearch/aureport 分析审计日志,满足合规与取证需求。