温馨提示×

PostgreSQL在CentOS上的安全设置指南

小樊
44
2025-12-19 19:29:58
栏目: 云计算

一 基础加固

  • 保持系统与安全组件为最新:执行sudo yum update -y,及时修补漏洞;为数据库主机启用自动安全更新(如 yum-cron)。
  • 服务与端口最小化:如无远程需求,将listen_addresses设为localhost;如必须远程,仅开放到受控网段,并尽量使用非标准端口(例如5433)以降低暴露面。
  • 文件系统与目录:确保数据目录(常见为**/var/lib/pgsql/)属主为postgres:postgres**,权限为0700;WAL 与备份目录同样限制访问。
  • 系统账户安全:禁止postgres账户登录系统(/etc/passwd 的 shell 设为 /sbin/nologin/usr/sbin/nologin),仅通过 sudo -u postgres 执行管理操作。

二 身份与访问控制

  • 角色与权限最小化:遵循最小权限原则,按任务创建角色并授予所需权限;避免使用超级用户执行日常业务。
  • 常用权限操作示例:
    • 创建登录角色:CREATE ROLE appuser WITH LOGIN PASSWORD ‘StrongPass!2025’;
    • 授予数据库权限:GRANT CONNECT, TEMPORARY ON DATABASE mydb TO appuser;
    • 授予模式权限:GRANT USAGE ON SCHEMA public TO appuser;
    • 授予表权限:GRANT SELECT, INSERT, UPDATE ON ALL TABLES IN SCHEMA public TO appuser;
    • 撤销权限:REVOKE ALL ON TABLE public.secret FROM appuser;
    • 查看权限:\dp。
  • 定期轮换口令并限制口令复杂度;对高权限账户启用双重认证/跳板机访问策略。

三 网络与加密

  • 防火墙策略:仅允许受控来源访问数据库端口(默认5432)。示例:
    • 开放端口:sudo firewall-cmd --permanent --zone=public --add-port=5432/tcp
    • 或按服务开放:sudo firewall-cmd --permanent --add-service=postgresql
    • 使配置生效:sudo firewall-cmd --reload
  • TLS/SSL 强制加密:
    • 生成自签名证书(测试)或申请可信证书(生产):
      • 生成私钥与请求:openssl req -new -text -out server.req
      • 导出私钥:openssl rsa -in privkey.pem -out server.key
      • 生成自签名证书:openssl req -x509 -in server.req -text -key server.key -out server.crt
    • 配置 postgresql.conf:
      • ssl = on
      • ssl_cert_file = ‘server.crt
      • ssl_key_file = ‘server.key
      • ssl_ciphers = ‘HIGH:MEDIUM:+3DES:!aNULL
      • ssl_prefer_server_ciphers = on
    • 在 pg_hba.conf 中对外部来源使用 hostssl 条目,强制走 TLS:
      • hostssl all all 192.168.10.0/24 md5
  • SELinux:若启用 SELinux,确保 postgresql_port_t 包含你的数据库端口(如非标准端口需放行);必要时使用 semanage port 添加策略。

四 审计与日志

  • 启用日志收集与会话日志:
    • logging_collector = on
    • log_directory = ‘pg_log
    • log_filename = ‘postgresql-%Y-%m-%d_%H%M%S.log’
    • log_statement = all(生产可选 ddl、mod 等更细粒度级别)
  • 系统级审计:安装并启用 auditd,记录关键系统调用与登录行为,便于合规与取证:
    • 安装:sudo yum install auditd
    • 启动:sudo systemctl start auditd
    • 分析:ausearch、aureport 等工具查看审计日志。

五 备份恢复与持续运维

  • 逻辑备份:使用 pg_dump 定期导出关键库表,建议纳入自动化任务与异地存储。示例:
    • pg_dump -U backup -W -F t -f mydb_$(date +%F).tar mydb
  • 物理备份与流复制:使用 pg_basebackup 做基础备份,结合 WAL 归档实现时间点恢复(PITR):
    • pg_basebackup -D /var/lib/postgresql/backup/base -U backupuser -v -P --wal-method=stream
  • 恢复演练:定期在隔离环境验证备份可用性与恢复流程;为关键库制定RPO/RTO目标并演练。
  • 持续监控与告警:部署监控(如 Prometheus + Grafana)与日志告警,关注连接数、慢查询、复制延迟与错误日志异常。

0