1. 修改PostgreSQL默认管理员密码
PostgreSQL默认超级用户为postgres,初始密码可能在安装时为空或简单。使用以下命令切换至postgres用户并修改密码:
sudo -u postgres psql
ALTER USER postgres WITH PASSWORD 'YourStrongPassword123!';
\q
确保密码包含大小写字母、数字和特殊字符,长度不少于12位。
2. 配置PostgreSQL仅允许本地连接(可选但推荐)
若无需远程访问,修改postgresql.conf限制监听地址,降低远程攻击风险:
sudo nano /etc/postgresql/<version>/main/postgresql.conf
找到listen_addresses行,修改为:
listen_addresses = 'localhost'
保存后重启服务:
sudo systemctl restart postgresql
若需远程访问,可将listen_addresses设为'*',但需配合后续安全措施。
3. 限制远程访问IP(若需远程连接)
编辑pg_hba.conf文件,仅允许信任的IP段通过密码认证访问:
sudo nano /etc/postgresql/<version>/main/pg_hba.conf
在文件末尾添加(示例:允许192.168.1.0/24网段访问所有数据库):
host all all 192.168.1.0/24 md5
保存后重启PostgreSQL服务:
sudo systemctl restart postgresql
避免使用0.0.0.0/0(允许所有IP),如需开放,需结合强密码和SSL加密。
4. 配置SSL加密传输
生成SSL证书和私钥(若已有证书可跳过生成步骤):
sudo mkdir -p /etc/postgresql/<version>/main/ssl
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/postgresql/<version>/main/ssl/server.key \
-out /etc/postgresql/<version>/main/ssl/server.crt
设置证书权限(仅postgres用户可读):
sudo chmod 600 /etc/postgresql/<version>/main/ssl/*
修改postgresql.conf启用SSL:
sudo nano /etc/postgresql/<version>/main/postgresql.conf
取消注释并修改以下行:
ssl = on
ssl_cert_file = '/etc/postgresql/<version>/main/ssl/server.crt'
ssl_key_file = '/etc/postgresql/<version>/main/ssl/server.key'
重启服务使配置生效:
sudo systemctl restart postgresql
确保客户端连接时启用SSL(如pgAdmin中勾选“SSL”选项)。
5. 配置Ubuntu防火墙(UFW)
允许PostgreSQL默认端口(5432)通过防火墙,限制仅信任IP访问:
sudo ufw allow from 192.168.1.0/24 to any port 5432 proto tcp
sudo ufw enable
sudo ufw status # 验证规则是否生效
若未安装UFW,可通过sudo apt install ufw安装。
6. 管理PostgreSQL用户与权限
postgres超级用户执行日常操作,创建专用用户并授权:sudo -u postgres psql
CREATE USER app_user WITH PASSWORD 'AppUserPassword123!';
CREATE DATABASE app_db OWNER app_user;
GRANT ALL PRIVILEGES ON DATABASE app_db TO app_user;
\q
SELECT、INSERT),避免使用GRANT ALL PRIVILEGES。7. 定期更新PostgreSQL与pgAdmin
保持软件版本最新,修复已知安全漏洞:
sudo apt update
sudo apt upgrade postgresql postgresql-contrib pgadmin4
建议开启自动更新:
sudo apt install unattended-upgrades
sudo dpkg-reconfigure --priority=low unattended-upgrades
8. 启用审计日志记录
通过log_statement参数记录所有SQL语句,便于追踪异常操作:
sudo nano /etc/postgresql/<version>/main/postgresql.conf
修改以下行:
log_statement = 'all'
log_min_error_statement = 'error'
log_directory = 'pg_log'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
保存后重启服务,日志将保存至/var/log/postgresql/<version>/main/目录。