温馨提示×

Debian下PostgreSQL安全设置

小樊
47
2025-10-14 22:36:07
栏目: 云计算

1. 更新系统
在安装PostgreSQL前,确保Debian系统及所有软件包为最新版本,修复已知安全漏洞:

sudo apt update && sudo apt upgrade -y 

2. 安装PostgreSQL及附加组件
通过APT包管理器安装PostgreSQL服务器及常用扩展(如postgresql-contrib提供额外工具):

sudo apt install postgresql postgresql-contrib -y 

3. 强化PostgreSQL初始用户安全
默认的postgres超级用户无初始密码,需立即设置强密码(包含大小写字母、数字及特殊字符):

sudo -u postgres psql ALTER USER postgres WITH PASSWORD 'YourStrongPassword123!'; \q 

4. 配置PostgreSQL核心参数
编辑主配置文件(路径随PostgreSQL版本变化,如/etc/postgresql/15/main/postgresql.conf),调整以下关键参数:

  • 限制监听范围:将listen_addresses'*'(允许所有IP)改为'localhost'(仅本地连接)或特定IP(如'192.168.1.100'),减少远程暴露风险;
  • 修改默认端口:将port5432改为非标准端口(如5433),降低被自动化工具扫描的概率;
  • 控制并发连接:设置max_connections为合理值(如100),避免资源耗尽攻击;
  • 优化内存使用:根据服务器内存调整shared_buffers(通常为物理内存的25%,如64MB)、effective_cache_size(物理内存的50%-75%,如2GB)。
    修改后保存文件,重启服务生效:
sudo systemctl restart postgresql 

5. 细化客户端访问控制
编辑pg_hba.conf文件(路径同postgresql.conf),采用“最小权限原则”配置认证规则:

  • 禁用远程默认访问:注释或删除host all all 0.0.0.0/0 md5(允许所有IP远程连接);
  • 允许本地安全连接:保留host all all 127.0.0.1/32 md5(本地连接需密码);
  • 限制特定IP访问:若需远程访问,仅允许可信IP(如192.168.1.0/24),并使用更安全的认证方式(如scram-sha-256替代md5):
    host all all 192.168.1.0/24 scram-sha-256 

修改后重启服务:

sudo systemctl restart postgresql 

6. 启用SSL/TLS加密连接
为防止数据传输被窃听,需配置SSL加密:

  • 生成证书与私钥:创建目录存放证书,使用OpenSSL生成自签名证书(有效期365天):
    sudo mkdir -p /etc/postgresql/ssl sudo openssl req -new -x509 -days 365 -nodes -text -subj "/CN=postgres" -out /etc/postgresql/ssl/server.crt -keyout /etc/postgresql/ssl/server.key sudo chmod 600 /etc/postgresql/ssl/server.key # 私钥必须严格保密 
  • 配置PostgreSQL使用SSL:编辑postgresql.conf,添加以下参数:
    ssl on ssl_cert_file '/etc/postgresql/ssl/server.crt' ssl_key_file '/etc/postgresql/ssl/server.key' 
  • 强制客户端使用SSL(可选):在pg_hba.conf中添加sslmode=require,如:
    hostssl all all 192.168.1.0/24 scram-sha-256 sslmode=require 

重启服务使配置生效:

sudo systemctl restart postgresql 

7. 用户与权限精细化管理

  • 创建专用用户:避免使用postgres超级用户执行常规操作,创建角色并设置密码:
    sudo -u postgres psql CREATE ROLE myapp_user WITH LOGIN PASSWORD 'AppSecurePassword456!' VALID UNTIL '2026-12-31'; 
  • 分配最小权限:仅为用户分配所需数据库及表的权限(如SELECTINSERT),避免过度授权:
    CREATE DATABASE myapp_db OWNER myapp_user; GRANT CONNECT ON DATABASE myapp_db TO myapp_user; GRANT SELECT, INSERT ON ALL TABLES IN SCHEMA public TO myapp_user; 
  • 定期审计用户:查看所有用户及权限,及时删除闲置账户:
    \du # 查看用户列表 DROP USER inactive_user; # 删除闲置用户 

8. 启用审计日志与监控

  • 开启详细日志:编辑postgresql.conf,启用连接、断开及SQL语句日志:
    log_connections = true log_disconnections = true log_statement = 'all' # 记录所有SQL语句(生产环境可调整为'dml'或'ddl'减少日志量) log_directory = 'pg_log' log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' 
  • 定期检查日志:通过tail命令实时查看日志,或使用logrotate工具归档旧日志(避免日志文件过大):
    sudo tail -f /var/log/postgresql/postgresql-15-main.log 

9. 防火墙配置
若使用UFW防火墙,仅允许可信IP访问PostgreSQL端口(如5432或自定义端口):

sudo ufw allow from 192.168.1.0/24 to any port 5432/tcp # 仅允许192.168.1.0/24网段访问 sudo ufw enable # 启用防火墙 

10. 定期备份与安全更新

  • 备份数据库:使用pg_dump工具备份数据库(如每天凌晨2点),并将备份文件存储在安全位置(如异地服务器或云存储):
    sudo -u postgres pg_dump -U myapp_user -F t -f /backups/myapp_db_backup.tar myapp_db 
  • 定期更新PostgreSQL:关注Debian安全仓库及PostgreSQL官方公告,及时升级到最新稳定版本,修复安全漏洞:
    sudo apt update && sudo apt upgrade postgresql postgresql-contrib -y 

0