Ubuntu下PgAdmin安全管理指南
postgres
),首次安装后需立即修改其密码。使用sudo -u postgres psql
进入PostgreSQL命令行,执行ALTER USER postgres WITH PASSWORD '复杂密码';
(密码需包含大小写字母、数字和特殊字符)。ufw
(Ubuntu防火墙工具)限制PgAdmin端口的访问。默认情况下,PgAdmin运行在5050端口(可通过/etc/pgadmin4/config_local.py
中的SERVER_PORT
修改),执行以下命令:sudo ufw allow from 信任IP地址 to any port 5050/tcp
(如sudo ufw allow from 192.168.1.100 to any port 5050/tcp
),仅允许特定IP地址访问PgAdmin,拒绝其他IP的连接请求。sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/pgadmin.key -out /etc/ssl/certs/pgadmin.crt
(按提示输入信息,如国家、域名等)。/etc/pgadmin4/config_local.py
,添加以下内容:SSL_CERT_FILE = '/etc/ssl/certs/pgadmin.crt'
SSL_KEY_FILE = '/etc/ssl/private/pgadmin.key'
重启PgAdmin服务使配置生效:sudo systemctl restart pgadmin4
。此时,PgAdmin将通过HTTPS协议传输数据,防止中间人攻击。pg_hba.conf
文件(通常位于/etc/postgresql/<版本>/main/pg_hba.conf
),限制用户从特定IP地址连接到数据库。例如,仅允许本地IP(127.0.0.1)和信任IP(如192.168.1.100)访问:# TYPE DATABASE USER ADDRESS METHOD
host all all 127.0.0.1/32 md5
host all all 192.168.1.100/32 md5
修改后执行sudo systemctl reload postgresql
使配置生效。sudo apt update && sudo apt upgrade postgresql pgadmin4
。建议开启自动更新(sudo apt install unattended-upgrades
),确保系统及时获取安全补丁。/var/log/pgadmin4/
目录下,可通过/etc/pgadmin4/config_local.py
配置日志级别(如LOG_LEVEL = 'DEBUG'
)和保留时间。postgresql.conf
文件(/etc/postgresql/<版本>/main/postgresql.conf
),设置以下参数:logging_collector = on
log_directory = 'pg_logs'
log_filename = 'postgresql-%Y-%m-%d.log'
log_min_duration_statement = 500 # 记录执行时间超过500ms的SQL语句
重启PostgreSQL服务使配置生效。通过日志可监控数据库访问和操作,及时发现异常行为(如频繁的失败登录尝试)。SELECT
、INSERT
等必要权限(避免授予ALL PRIVILEGES
)。db_reader
、db_writer
),分配通用权限后将用户添加到角色中(减少重复配置)。例如,执行SQL命令:CREATE ROLE db_reader WITH LOGIN PASSWORD 'reader_password';
GRANT CONNECT ON DATABASE your_db TO db_reader;
GRANT USAGE ON SCHEMA public TO db_reader;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO db_reader;
sudo apt install nginx
。/etc/nginx/sites-available/pgadmin
,添加以下内容:server {
listen 443 ssl;
server_name pgadmin.example.com;
ssl_certificate /etc/ssl/certs/pgadmin.crt;
ssl_certificate_key /etc/ssl/private/pgadmin.key;
location / {
proxy_pass http://localhost:5050;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
sudo ln -s /etc/nginx/sites-available/pgadmin /etc/nginx/sites-enabled/
,sudo systemctl restart nginx
。https://pgadmin.example.com
访问PgAdmin,数据传输通过HTTPS加密。