Debian下PostgreSQL安全设置
导读:1. 更新系统 在安装PostgreSQL前,确保Debian系统及所有软件包为最新版本,修复已知安全漏洞: sudo apt update && sudo apt upgrade -y 2. 安装PostgreSQL及附...
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'
),减少远程暴露风险; - 修改默认端口:将
port
从5432
改为非标准端口(如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';
- 分配最小权限:仅为用户分配所需数据库及表的权限(如
SELECT
、INSERT
),避免过度授权: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
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Debian下PostgreSQL安全设置
本文地址: https://pptw.com/jishu/727028.html