CentOS环境下PostgreSQL安全加固措施
postgres超级用户密码(避免空密码),要求密码包含大小写字母、数字和特殊字符(如ALTER USER postgres WITH PASSWORD 'Complex@123';);配置password_encryption = scram-sha-256(PostgreSQL 10+推荐),强制使用更安全的哈希算法存储密码。SELECT、INSERT权限(GRANT SELECT, INSERT ON database_name.table_name TO app_user;),禁用默认的PUBLIC角色对敏感表的操作权限。CREATE POLICY user_access_policy ON users USING (user_id = current_setting('app.current_user_id')::int);)。postgresql.conf中的listen_addresses为localhost或特定可信IP(如192.168.1.100),避免数据库监听所有网络接口(listen_addresses = 'localhost';),减少暴露风险。firewalld(CentOS 7+)或iptables限制PostgreSQL端口(默认5432)的访问,仅允许必要IP段(如公司内网192.168.1.0/24)访问。例如,firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port=5432 protocol=tcp accept',然后firewall-cmd --reload。pg_hba.conf,移除trust(无密码认证)、ident(基于主机认证)等方法,统一使用md5(密码加密)或scram-sha-256(更安全)认证。例如,host all all 192.168.1.0/24 scram-sha-256。openssl req -new -x509 -days 365 -nodes -text -out server.crt -keyout server.key -subj "/CN=your_server_hostname"),修改postgresql.conf启用SSL:ssl = on,指定证书和密钥路径(ssl_cert_file = '/var/lib/pgsql/data/server.crt',ssl_key_file = '/var/lib/pgsql/data/server.key');强制客户端使用SSL连接(ssl_min_protocol_version = TLSv1.2),防止数据在传输过程中被窃取或篡改。postgresql.conf,开启日志收集(logging_collector = on),设置日志目录(log_directory = 'pg_log')和文件名格式(log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log');记录关键操作(如log_statement = 'all'记录所有SQL语句,log_connections = on记录连接事件,log_disconnections = on记录断开事件),便于后续审计。pgAudit(sudo yum install pgaudit),在postgresql.conf中配置(shared_preload_libraries = 'pgaudit',pgaudit.log = 'all'),记录详细的审计信息(如用户执行的SQL、访问的表、操作时间),并将日志输出到单独文件(pgaudit.log_file = 'pgaudit.log'),提升审计粒度。sudo yum update -y定期更新PostgreSQL和CentOS系统,及时修补已知安全漏洞(如CVE-2023-1427、CVE-2024-1577等),降低被攻击的风险。postgres超级用户以外的多余超级用户账户(如DROP USER unused_superuser;),减少潜在的攻击入口。permissive模式测试(SELINUX=permissive),或为PostgreSQL创建自定义SELinux策略模块,允许其接受特定IP的连接(如semanage port -a -t postgresql_port_t -p tcp 5432),防止SELinux阻止合法访问。pg_dump工具备份数据库(如pg_dump -U postgres -F t -f /backup/mydb_backup.tar mydb),支持文本格式(-F p)或归档格式(-F t,便于恢复单个表);备份文件存储在安全位置(如异地服务器、加密存储设备),避免单点故障。pg_restore -U postgres -d mydb_restore /backup/mydb_backup.tar),确保备份文件的完整性和可恢复性,避免因备份失效导致数据丢失。