1. 系统与软件更新
保持Debian系统和PostgreSQL软件包为最新版本,及时修复已知安全漏洞。定期执行以下命令:
sudo apt update && sudo apt upgrade
2. 安装PostgreSQL及初始配置
通过Debian官方仓库安装PostgreSQL及其附加组件(如postgresql-contrib提供额外工具):
sudo apt install postgresql postgresql-contrib
安装后,默认超级用户postgres无密码,需立即设置强密码:
sudo -u postgres psql -c "ALTER USER postgres WITH PASSWORD 'StrongPassword123!'"
3. 配置PostgreSQL核心参数
修改postgresql.conf(路径:/etc/postgresql/<version>/main/postgresql.conf),优化基础安全设置:
listen_addresses从'*'(允许所有IP)改为'localhost'(仅本地访问)或特定IP段(如'192.168.1.0/24'),减少远程暴露风险;port(默认5432)为非标准端口(如5433),增加攻击探测难度;max_connections(如100),防止资源耗尽攻击。sudo systemctl restart postgresql
4. 强化客户端访问控制
编辑pg_hba.conf(路径:/etc/postgresql/<version>/main/pg_hba.conf),配置细粒度的客户端认证规则:
peer认证(操作系统用户与数据库用户同名),提升本地访问安全性;md5密码认证访问特定数据库,示例如下:# 本地连接(操作系统用户=数据库用户)
local all postgres peer
local all all peer
# 可信IP段(如公司内网)远程访问
host all all 192.168.1.0/24 md5
# 拒绝其他所有远程连接
host all all 0.0.0.0/0 reject
修改后重启服务:
sudo systemctl restart postgresql
5. 启用SSL/TLS加密传输
为防止数据在传输过程中被窃取或篡改,需配置SSL加密:
mkdir -p /etc/postgresql/ssl
openssl req -new -x509 -days 365 -nodes -text -subj "/CN=postgres" -out /etc/postgresql/ssl/server.crt -keyout /etc/postgresql/ssl/server.key
chmod 600 /etc/postgresql/ssl/server.key # 密钥文件必须为root-only权限
postgresql.conf,添加以下参数:ssl on
ssl_cert_file '/etc/postgresql/ssl/server.crt'
ssl_key_file '/etc/postgresql/ssl/server.key'
重启服务使配置生效:
sudo systemctl restart postgresql
6. 用户与权限精细化管理
postgres超级用户执行日常操作,创建具有最小必要权限的用户:sudo -u postgres psql -c "CREATE USER app_user WITH PASSWORD 'AppPassword456!'"
SELECT、INSERT),避免过度授权:sudo -u postgres psql -c "CREATE DATABASE app_db OWNER app_user"
sudo -u postgres psql -c "GRANT SELECT, INSERT ON ALL TABLES IN SCHEMA public TO app_user"
sudo -u postgres psql -c "REVOKE DELETE, UPDATE ON app_table FROM app_user"
7. 数据加密(敏感字段)
使用pgcrypto扩展对数据库中的敏感数据(如身份证号、手机号)进行加密存储:
sudo -u postgres psql -d app_db -c "CREATE EXTENSION IF NOT EXISTS pgcrypto"
pgp_sym_encrypt):INSERT INTO users (name, phone) VALUES ('张三', pgp_sym_encrypt('13800138000', 'aes_key'));
pgp_sym_decrypt函数:SELECT name, pgp_sym_decrypt(phone, 'aes_key') AS phone FROM users;
8. 审计与日志监控
启用PostgreSQL日志功能,记录关键操作(如登录、SQL执行),便于事后追溯:
postgresql.conf:添加以下参数:log_statement = 'all' # 记录所有SQL语句(生产环境可调整为'dml'或'ddl',减少日志量)
log_connections = true # 记录连接尝试
log_disconnections = true # 记录断开连接
log_directory = 'pg_log' # 日志目录(默认已开启)
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' # 日志文件名格式(按日期和时间分割)
tail命令实时查看日志,或通过logrotate工具定期归档日志(避免日志文件过大):sudo tail -f /var/log/postgresql/postgresql-<version>-main.log
9. 防火墙配置
使用UFW(Uncomplicated Firewall)限制PostgreSQL端口的访问,仅允许可信IP地址访问:
sudo ufw allow from 192.168.1.0/24 to any port 5432/tcp # 允许内网IP访问
sudo ufw enable # 启用防火墙
sudo ufw status # 查看防火墙规则
10. 定期备份与恢复测试
制定备份策略,使用pg_dump工具定期备份数据库,并将备份文件存储在安全位置(如异地服务器、云存储):
sudo -u postgres pg_dump -U postgres -F c -b -v -f /backup/app_db_backup.dump app_db
sudo -u postgres psql -U postgres -d app_db -f /backup/app_db_backup.dump