ubuntu

ubuntu postgresql安全设置怎么做

小樊
47
2025-09-25 13:20:54
栏目: 云计算

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用户与权限

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/目录。

0
看了该问题的人还看了