Linux下PostgreSQL安全设置怎么做
导读:1. 系统与软件基础安全 更新与打补丁:定期通过yum update postgresql-server(CentOS)或对应包管理器更新PostgreSQL至最新版本,及时修复已知安全漏洞。 最小化安装:仅安装必要的PostgreSQL...
1. 系统与软件基础安全
- 更新与打补丁:定期通过
yum update postgresql-server
(CentOS)或对应包管理器更新PostgreSQL至最新版本,及时修复已知安全漏洞。 - 最小化安装:仅安装必要的PostgreSQL组件(如
postgresql-server
、postgresql-contrib
),避免不必要的功能暴露攻击面。
2. 配置文件安全优化
- 限制监听地址:修改
postgresql.conf
中的listen_addresses
为localhost
(仅本地访问)或特定可信IP段(如192.168.1.0/24
),避免数据库监听所有网络接口。 - 严格认证方法:编辑
pg_hba.conf
(客户端认证配置文件),将远程访问认证方式设为md5
(密码加密)或scram-sha-256
(更安全的加密方式),禁止trust
(无密码验证);示例配置:host all all 192.168.1.0/24 md5
(仅允许192.168.1.0/24网段用户通过密码认证访问)。 - 禁用不必要的功能:在
postgresql.conf
中关闭pg_hba.conf
中未使用的认证方法(如ident
、peer
),减少潜在攻击入口。
3. 用户与权限精细化管理
- 最小权限原则:为用户分配完成任务所需的最小权限,避免授予
SUPERUSER
(超级用户)权限;示例:创建普通用户并授权特定数据库:CREATE USER app_user WITH PASSWORD 'StrongPass123!'; GRANT CONNECT ON DATABASE app_db TO app_user; GRANT USAGE ON SCHEMA public TO app_user; GRANT SELECT, INSERT, UPDATE ON ALL TABLES IN SCHEMA public TO app_user;
- 强密码策略:通过
passwordcheck.so
模块强制密码复杂度(至少8位,包含大小写字母、数字和特殊字符);修改postgresql.conf
:shared_preload_libraries = 'passwordcheck'
,重启服务生效;创建用户时验证:CREATE USER weak_user WITH PASSWORD '123'
会提示“password too weak”。 - 密码有效期:设置密码有效期(如90天),避免长期使用同一密码;示例:
ALTER USER app_user VALID UNTIL '2025-12-31';
,到期后用户需修改密码才能登录。 - 审计用户活动:启用
pg_stat_statements
扩展跟踪SQL语句,识别异常操作;修改postgresql.conf
:shared_preload_libraries = 'pg_stat_statements'
,重启后执行CREATE EXTENSION pg_stat_statements;
,通过SELECT * FROM pg_stat_statements;
查看高频/异常SQL。
4. 网络与连接安全加固
- 防火墙配置:使用
firewalld
(CentOS 7+)开放PostgreSQL默认端口(5432),并限制访问源;示例:sudo firewall-cmd --permanent --zone=public --add-port=5432/tcp sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="5432" accept' sudo firewall-cmd --reload
- 启用SSL加密:生成SSL证书(
server.crt
、server.key
),修改postgresql.conf
启用SSL:ssl = on; ssl_cert_file = '/path/to/server.crt'; ssl_key_file = '/path/to/server.key'
;客户端连接时需指定sslmode=require
(如psql "sslmode=require dbname=app_db user=app_user host=192.168.1.100"
),确保数据传输加密。 - 限制连接数:在
postgresql.conf
中设置max_connections
(如100),避免过多连接导致资源耗尽;结合pgbouncer
等连接池工具,进一步优化连接管理。
5. 数据安全保护
- 定期备份:使用
pg_basebackup
(物理备份)或pg_dump
(逻辑备份)定期备份数据库,存储到安全位置(如异地服务器、云存储);示例:pg_dump -U app_user -F t -f app_db_backup.tar app_db
(逻辑备份为tar格式)。 - 敏感数据加密:对数据库中的敏感字段(如身份证号、手机号)使用
pgcrypto
扩展加密;示例:CREATE EXTENSION pgcrypto; INSERT INTO users (name, phone) VALUES ('张三', pgp_sym_encrypt('13800138000', 'aes_key')); SELECT pgp_sym_decrypt(phone, 'aes_key') FROM users WHERE name = '张三';
- 备份完整性验证:定期测试备份文件的恢复流程,确保备份可用;示例:
pg_restore -U app_user -d test_db app_db_backup.tar
。
6. 监控与审计机制
- 启用审计日志:修改
postgresql.conf
开启日志记录,记录用户登录、SQL操作等关键事件;示例:logging_collector = on log_directory = 'pg_log' log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' log_statement = 'all' # 记录所有SQL语句(生产环境可调整为'ddl'或'modify') log_connections = on log_disconnections = on
- 实时监控与告警:使用
Prometheus
+Grafana
监控PostgreSQL性能指标(如连接数、查询响应时间、磁盘空间),设置阈值告警(如连接数超过80%时发送邮件通知);或使用Zabbix
等工具实现自动化监控。 - 定期审查日志:使用
grep
、ausearch
等工具分析日志,检测异常行为(如频繁的登录失败、未授权的表删除);示例:grep "authentication failed" /var/lib/pgsql/12/data/pg_log/*.log
查找登录失败记录。
7. SELinux与操作系统加固(可选但推荐)
- 调整SELinux策略:若系统启用SELinux(
getenforce
返回Enforcing
),需允许PostgreSQL访问相关资源;示例:setsebool -P postgres_can_rsync on
(允许rsync备份),chcon -R -t postgresql_db_t /var/lib/pgsql/12/data
(设置数据目录的安全上下文)。 - 操作系统加固:禁用root远程登录(修改
/etc/ssh/sshd_config
:PermitRootLogin no
),使用强密码或密钥认证;定期更新操作系统补丁,关闭不必要的服务(如FTP、Telnet)。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Linux下PostgreSQL安全设置怎么做
本文地址: https://pptw.com/jishu/728306.html