温馨提示×

Ubuntu下PostgreSQL安全设置怎么做

小樊
44
2025-11-23 02:37:47
栏目: 云计算

Ubuntu 下 PostgreSQL 安全设置清单

一 身份与认证加固

  • 修改默认管理员口令并启用强口令策略:切换到数据库管理员账户,执行 ALTER USER postgres WITH PASSWORD '强密码';,避免使用默认或弱口令。
  • 本地认证建议采用 peerscram-sha-256,远程访问统一使用 scram-sha-256md5 并强制口令复杂度。
  • pg_hba.conf 中细化到“数据库/用户/来源网段/认证方式”的粒度,避免使用过于宽松的规则。
  • 禁止滥用超级用户:为应用创建最小权限的专用角色,按需授予权限,生产环境避免以 postgres 直连应用。
  • 示例(仅示意,按实际版本与网段调整):
    • 本地:local all all peer
    • 本机回环:host all all 127.0.0.1/32 scram-sha-256
    • 内网:host myapp appuser 192.168.1.0/24 scram-sha-256
    • 远程管理(如确需):host postgres dbadmin 203.0.113.10/32 scram-sha-256
      以上做法覆盖了口令加固、最小权限与认证细粒度控制等关键要点。

二 网络与防火墙

  • 监听地址最小化:在 postgresql.conf 中将 listen_addresses 设为仅需要的地址(如仅内网 192.168.1.10 或先保持 localhost 再按需放开),避免暴露到公网。
  • 默认端口为 5432/TCP,仅在内网或受控网络开放;云上通过安全组/NACL 限制来源 IP。
  • 使用 UFW 或云防火墙仅允许可信网段访问 5432/TCPsudo ufw allow from 192.168.1.0/24 to any port 5432 proto tcp;默认拒绝其他来源。
  • 远程访问遵循“白名单 + 强认证 + 最小权限”的组合,避免 0.0.0.0/0 的开放策略。
    以上措施可有效降低暴露面并提升网络层安全性。

三 加密与传输安全

  • 启用 SSL/TLS 加密传输:在 postgresql.conf 中设置 ssl = on,并配置 ssl_cert_filessl_key_file(以及可选的 ssl_ca_file);客户端连接字符串添加 sslmode=require/verify-full
  • 对外服务强制使用 TLS,禁止明文连接;内部可信网段可视情况使用 verify-ca/verify-full 增强校验。
  • 定期轮换服务器证书与私钥,妥善保护私钥文件权限。
    启用 TLS 能显著增强数据在传输过程中的机密性与完整性。

四 权限最小化与数据库加固

  • 按“最小权限原则”创建角色与数据库:
    • CREATE ROLE appuser WITH LOGIN PASSWORD '强密码' NOSUPERUSER NOCREATEDB NOCREATEROLE;
    • CREATE DATABASE myapp OWNER appuser;
    • 按需授予:GRANT CONNECT, TEMPORARY ON DATABASE myapp TO appuser; 以及对具体 schema/表SELECT/INSERT/UPDATE/DELETE 权限。
  • 撤销不必要的默认权限,避免使用 PUBLIC 默认授予的权限;对敏感表设置行级安全(RLS)或视图封装。
  • 定期审计与清理:移除不再使用的角色/数据库,回收过期权限。
  • 定期备份与恢复演练,确保可恢复性与可用性。
    这些步骤有助于降低权限滥用风险并提升可运维性。

五 日志审计与补丁运维

  • 开启与保留日志:在 postgresql.conf 中启用 log_statement = 'all'(或至少 mod),设置 log_connections = onlog_disconnections = onlog_duration = on,并配置合适的 log_directorylog_filename 滚动策略。
  • 集中收集与监控日志(如 rsyslog/ELK),对异常登录、失败认证、权限变更等进行告警。
  • 及时更新 PostgreSQL 与操作系统补丁,修复已知漏洞;保持客户端驱动与中间件的兼容性。
  • 变更前后备份配置文件(如 postgresql.confpg_hba.conf),变更后使用 SELECT pg_reload_conf();sudo systemctl reload postgresql 使配置生效,减少停机。
    完善的日志与变更管理是持续安全运营的关键。

0