當伺服器正在執行時,惡意使用者無法取代正常的資料庫伺服器。但是,當伺服器關閉時,本地使用者有可能透過啟動他們自己的伺服器來欺騙正常的伺服器。 欺騙伺服器可以讀取客戶端傳送的密碼和查詢,但無法傳回任何資料,因為 PGDATA
目錄由於目錄權限的關係仍然是安全的。 欺騙是可能的,因為任何使用者都可以啟動資料庫伺服器; 除非經過特殊配置,否則客戶端無法識別無效的伺服器。
防止 local
連線被欺騙的一種方法是使用一個僅對受信任的本地使用者具有寫入權限的 Unix 網域套接字目錄 (unix_socket_directories)。 這可以防止惡意使用者在該目錄中建立他們自己的套接字檔案。 如果您擔心某些應用程式可能仍然參考 /tmp
來尋找套接字檔案,從而容易受到欺騙,則可以在作業系統啟動期間建立一個指向重新定位的套接字檔案的符號連結 /tmp/.s.PGSQL.5432
。 您可能還需要修改您的 /tmp
清理腳本,以防止刪除符號連結。
另一個 local
連線的選項是讓客戶端使用 requirepeer
來指定連接到套接字的伺服器程序所需的擁有者。
為了防止 TCP 連線上的欺騙,請使用 SSL 憑證並確保客戶端檢查伺服器的憑證,或使用 GSSAPI 加密(如果它們在不同的連線上,則可以同時使用兩者)。
為了防止使用 SSL 進行欺騙,必須將伺服器配置為僅接受 hostssl
連線 (第 20.1 節),並擁有 SSL 金鑰和憑證檔案 (第 18.9 節)。 TCP 客戶端必須使用 sslmode=verify-ca
或 verify-full
進行連線,並安裝適當的根憑證檔案 (第 32.19.1 節)。 或者,可以使用系統 CA 池,方法是使用 sslrootcert=system
; 在這種情況下,為了安全起見,強制使用 sslmode=verify-full
,因為通常很容易獲得由公共 CA 簽署的憑證。
為了防止在使用 scram-sha-256 密碼驗證透過網路進行連線時發生伺服器欺騙,您應確保使用 SSL 和前一段中描述的其中一種防欺騙方法來連線到伺服器。 此外,libpq 中的 SCRAM 實作無法保護整個驗證交換過程,但使用 channel_binding=require
連線參數可以緩解伺服器欺騙。 使用流氓伺服器攔截 SCRAM 交換的攻擊者可以使用離線分析來潛在地從客戶端確定雜湊密碼。
為了防止使用 GSSAPI 進行欺騙,必須將伺服器配置為僅接受 hostgssenc
連線 (第 20.1 節),並將 gss
驗證與它們一起使用。 TCP 客戶端必須使用 gssencmode=require
進行連線。
如果您在文件中發現任何不正確的地方、與您使用特定功能的經驗不符或需要進一步澄清的地方,請使用此表單來報告文件問題。