1. 更新系统
在安装或配置PostgreSQL前,务必将Debian系统及现有软件包更新至最新版本,以修复已知安全漏洞。执行以下命令完成更新:
sudo apt update && sudo apt upgrade
2. 安装PostgreSQL及附加组件
通过Debian官方仓库安装PostgreSQL服务器及常用扩展(如postgresql-contrib提供额外工具和函数):
sudo apt install postgresql postgresql-contrib
3. 强化PostgreSQL基础配置
修改PostgreSQL主配置文件(路径:/etc/postgresql/<version>/main/postgresql.conf),调整以下关键参数:
listen_addresses从默认的localhost改为'*'(允许远程连接)或指定具体IP(如192.168.1.100,限制仅特定IP访问);5432改为非标准端口(如5433),降低被自动化工具扫描的风险;max_connections(如100),避免资源耗尽攻击。sudo systemctl restart postgresql4. 配置客户端认证(pg_hba.conf)
编辑认证配置文件(路径:/etc/postgresql/<version>/main/pg_hba.conf),采用最小权限原则限制客户端访问:
scram-sha-256加密认证,拒绝远程连接):# IPv4 local connections:host all all 127.0.0.1/32 scram-sha-256# IPv4 remote connections:host all all 0.0.0.0/0 rejectmd5密码认证):host all all 192.168.1.0/24 md5sudo systemctl restart postgresql5. 启用SSL/TLS加密连接
为防止数据传输被窃听,需配置SSL加密:
/etc/postgresql/ssl/目录下执行以下命令(替换YourDomain为域名或服务器标识):sudo mkdir -p /etc/postgresql/ssl
sudo openssl req -new -x509 -days 365 -nodes -text -subj "/CN=YourDomain" -out /etc/postgresql/ssl/server.crt -keyout /etc/postgresql/ssl/server.key
sudo chmod 600 /etc/postgresql/ssl/server.key # 限制私钥权限
postgresql.conf中启用SSL并指定证书路径:ssl = onssl_cert_file = '/etc/postgresql/ssl/server.crt'ssl_key_file = '/etc/postgresql/ssl/server.key'sudo systemctl restart postgresql6. 用户与权限管理
postgres用户设置强密码(避免空密码):sudo -u postgres psql -c "ALTER USER postgres WITH PASSWORD 'StrongPassword123!'";postgres超级用户进行日常操作,创建专用用户并关联数据库:sudo -u postgres psql -c "CREATE USER myapp_user WITH PASSWORD 'AppSecurePass456!' CREATEDB;"
sudo -u postgres psql -c "CREATE DATABASE myapp_db OWNER myapp_user;"
GRANT/REVOKE命令限制用户对特定表的操作(如仅允许查询):sudo -u postgres psql -d myapp_db -c "GRANT SELECT ON ALL TABLES IN SCHEMA public TO myapp_user;"
sudo -u postgres psql -d myapp_db -c "REVOKE DELETE, UPDATE ON sensitive_table FROM myapp_user;"
sudo -u postgres psql -c "SELECT * FROM pg_user WHERE usename = 'myapp_user';"7. 配置防火墙限制访问
若使用UFW防火墙,仅允许必要端口(如PostgreSQL默认端口5432)通过,阻止非法IP访问:
sudo ufw allow from 192.168.1.0/24 to any port 5432 proto tcp # 仅允许192.168.1.0/24网段访问
sudo ufw enable # 启用防火墙
8. 启用审计日志
通过日志记录数据库活动,便于追踪异常行为(如未授权登录、数据修改):
postgresql.conf,开启关键日志选项:log_statement = 'all' # 记录所有SQL语句log_connections = true # 记录连接尝试log_disconnections = true # 记录断开连接log_directory = 'pg_log' # 日志目录(默认已存在)log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' # 日志文件名格式(按日期时间分割)sudo systemctl restart postgresql9. 数据加密(可选但推荐)
对敏感数据(如用户密码、个人信息)进行加密存储,使用PostgreSQL内置的pgcrypto扩展:
sudo -u postgres psql -c "CREATE EXTENSION IF NOT EXISTS pgcrypto;"
加密示例(插入加密数据):
INSERT INTO users (username, password) VALUES ('john', crypt('MySecretPass', gen_salt('bf')));
解密查询(验证密码):
SELECT * FROM users WHERE username = 'john' AND password = crypt('InputPass', password);
10. 定期备份与更新
pg_dump工具备份数据库,将备份文件存储到安全位置(如异地服务器、云存储):sudo -u postgres pg_dump -U myapp_user -F t -f /backups/myapp_db_backup.tar myapp_dbsudo apt update && sudo apt upgrade postgresql postgresql-contrib