溫馨提示×

Debian PostgreSQL數據庫安全加固

小樊
46
2025-09-19 18:55:32
欄目: 云計算

1. 系統與軟件更新
保持Debian系統和PostgreSQL軟件包為最新版本,及時修復已知安全漏洞。定期執行以下命令:

sudo apt update && sudo apt upgrade

2. 安裝PostgreSQL及初始配置
通過Debian官方倉庫安裝PostgreSQL及其附加組件(如postgresql-contrib提供額外工具):

sudo apt install postgresql postgresql-contrib

安裝后,默認超級用戶postgres無密碼,需立即設置強密碼:

sudo -u postgres psql -c "ALTER USER postgres WITH PASSWORD 'StrongPassword123!'"

3. 配置PostgreSQL核心參數
修改postgresql.conf(路徑:/etc/postgresql/<version>/main/postgresql.conf),優化基礎安全設置:

  • 限制監聽地址:將listen_addresses'*'(允許所有IP)改為'localhost'(僅本地訪問)或特定IP段(如'192.168.1.0/24'),減少遠程暴露風險;
  • 調整端口:可修改port(默認5432)為非標準端口(如5433),增加攻擊探測難度;
  • 控制最大連接數:設置max_connections(如100),防止資源耗盡攻擊。
    修改后需重啟服務生效:
sudo systemctl restart postgresql

4. 強化客戶端訪問控制
編輯pg_hba.conf(路徑:/etc/postgresql/<version>/main/pg_hba.conf),配置細粒度的客戶端認證規則:

  • 優先允許本地連接:使用peer認證(操作系統用戶與數據庫用戶同名),提升本地訪問安全性;
  • 限制遠程連接:僅允許可信IP段通過md5密碼認證訪問特定數據庫,示例如下:
    # 本地連接(操作系統用戶=數據庫用戶)
    local   all             postgres                                peer
    local   all             all                                     peer
    
    # 可信IP段(如公司內網)遠程訪問
    host    all             all             192.168.1.0/24          md5
    
    # 拒絕其他所有遠程連接
    host    all             all             0.0.0.0/0               reject
    

修改后重啟服務:

sudo systemctl restart postgresql

5. 啟用SSL/TLS加密傳輸
為防止數據在傳輸過程中被竊取或篡改,需配置SSL加密:

  • 生成證書與密鑰:創建目錄存放證書,使用OpenSSL生成自簽名證書(有效期365天):
    mkdir -p /etc/postgresql/ssl
    openssl req -new -x509 -days 365 -nodes -text -subj "/CN=postgres" -out /etc/postgresql/ssl/server.crt -keyout /etc/postgresql/ssl/server.key
    chmod 600 /etc/postgresql/ssl/server.key  # 密鑰文件必須為root-only權限
    
  • 配置PostgreSQL使用SSL:修改postgresql.conf,添加以下參數:
    ssl on
    ssl_cert_file '/etc/postgresql/ssl/server.crt'
    ssl_key_file '/etc/postgresql/ssl/server.key'
    

重啟服務使配置生效:

sudo systemctl restart postgresql

6. 用戶與權限精細化管理

  • 創建專用用戶:避免使用postgres超級用戶執行日常操作,創建具有最小必要權限的用戶:
    sudo -u postgres psql -c "CREATE USER app_user WITH PASSWORD 'AppPassword456!'"
    
  • 分配數據庫權限:僅為用戶分配所需數據庫的權限(如SELECT、INSERT),避免過度授權:
    sudo -u postgres psql -c "CREATE DATABASE app_db OWNER app_user"
    sudo -u postgres psql -c "GRANT SELECT, INSERT ON ALL TABLES IN SCHEMA public TO app_user"
    
  • 撤銷不必要的權限:定期審查用戶權限,移除冗余權限:
    sudo -u postgres psql -c "REVOKE DELETE, UPDATE ON app_table FROM app_user"
    

7. 數據加密(敏感字段)
使用pgcrypto擴展對數據庫中的敏感數據(如身份證號、手機號)進行加密存儲:

  • 啟用擴展:在目標數據庫中執行:
    sudo -u postgres psql -d app_db -c "CREATE EXTENSION IF NOT EXISTS pgcrypto"
    
  • 加密數據:插入或更新數據時使用加密函數(如pgp_sym_encrypt):
    INSERT INTO users (name, phone) VALUES ('張三', pgp_sym_encrypt('13800138000', 'aes_key'));
    
  • 解密數據:查詢時使用pgp_sym_decrypt函數:
    SELECT name, pgp_sym_decrypt(phone, 'aes_key') AS phone FROM users;
    

8. 審計與日志監控
啟用PostgreSQL日志功能,記錄關鍵操作(如登錄、SQL執行),便于事后追溯:

  • 修改postgresql.conf:添加以下參數:
    log_statement = 'all'  # 記錄所有SQL語句(生產環境可調整為'dml'或'ddl',減少日志量)
    log_connections = true  # 記錄連接嘗試
    log_disconnections = true  # 記錄斷開連接
    log_directory = 'pg_log'  # 日志目錄(默認已開啟)
    log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'  # 日志文件名格式(按日期和時間分割)
    
  • 定期檢查日志:使用tail命令實時查看日志,或通過logrotate工具定期歸檔日志(避免日志文件過大):
    sudo tail -f /var/log/postgresql/postgresql-<version>-main.log
    

9. 防火墻配置
使用UFW(Uncomplicated Firewall)限制PostgreSQL端口的訪問,僅允許可信IP地址訪問:

sudo ufw allow from 192.168.1.0/24 to any port 5432/tcp  # 允許內網IP訪問
sudo ufw enable  # 啟用防火墻
sudo ufw status  # 查看防火墻規則

10. 定期備份與恢復測試
制定備份策略,使用pg_dump工具定期備份數據庫,并將備份文件存儲在安全位置(如異地服務器、云存儲):

  • 全量備份
    sudo -u postgres pg_dump -U postgres -F c -b -v -f /backup/app_db_backup.dump app_db
    
  • 恢復測試:定期驗證備份文件的可用性,確保災難發生時可快速恢復:
    sudo -u postgres psql -U postgres -d app_db -f /backup/app_db_backup.dump
    

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女