- 首页 >
- 问答 >
-
云计算 >
- PostgreSQL在CentOS上的安全设置指南
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)与日志告警,关注连接数、慢查询、复制延迟与错误日志异常。