2012-08-14 81 views
13

在Ubuntu 12.04上安裝PostgreSQL 9.1後,我設置了「postgres」超級用戶帳戶的密碼。我希望所有用戶必須輸入自己的密碼登錄電子時,在這就是爲什麼我配置的pg_hba.conf像這樣:對postgresql超級用戶沒有密碼提示

#Database administrative login by Unix domain socket 
local all    postgres        md5 

# TYPE DATABASE  USER   ADDRESS     METHOD 

# "local" is for Unix domain socket connections only 
local all    all          md5 

我進行這些更改後重新啓動PostgreSQL的。當我這樣做psql -U testuser我被要求輸入密碼,但是當我使用「postgres」帳戶登錄時,如psql -U postgres,我沒有密碼提示並登錄。 如果我用psql -U postgres -W強制密碼提示,我可以登錄輸入正確的密碼或者完全不輸入。輸入錯誤的密碼會被拒絕。

任何人都可以向我解釋爲什麼會發生這種情況嗎?

在相關說明:我看到很多例子,其中人們使用ident作爲「postgres」用戶的身份驗證方法,認爲要成爲「postgres」用戶需要機器的root密碼。我認爲推理是,如果攻擊者獲得root訪問權限,那麼你的任務就完成了。我寧願使用密碼登錄,但密碼與root密碼不同。我爲不同的事情準備了不同的密碼。這是否合理?

輸出的

grep '^[^#]' pg_hba.conf

local all    postgres        md5 
local all    all          md5 
host all    all    127.0.0.1/32   md5 

回答

13

pg_hba.conf應確實需要Unix套接字連接的密碼,但還是有它周圍的方式,你應該確認:

  1. 一個.pgpass文件中包含密碼的Postgres的主目錄(也檢查PGPASSFILE非標準路徑的環境變量)。

  2. 可以設置環境變量PGPASSWORD

而且您還有可能編輯錯誤的pg_hba.conf文件。 作爲postgres連接時,可以通過SHOW hba_file SQL命令獲取正確的路徑進行驗證。

此外,您可能需要檢查日誌文件/var/log/postgresql/postgresql-9.1-main.log以確認配置文件在請求時已重新加載,並在認證過程中查找任何可疑消息。

至於爲什麼與Postgres的用戶密碼的連接都是常見的原因,在debian PG-9.1 pg_hba.conf有大約不允許他們這樣評論:

# DO NOT DISABLE! 
# If you change this first entry you will need to make sure that the 
# database superuser can access the database using some other method. 
# Noninteractive access to all databases is required during automatic 
# maintenance (custom daily cronjobs, replication, and similar tasks). 
# 
# Database administrative login by Unix domain socket 
local all    postgres        peer 

因爲Debian和Ubuntu使用相同的Postgres包,適用到Ubuntu也是如此。

+0

它在.pgpass文件中,謝謝!你引用的pg_hba.conf文件的一部分讓我感到困惑。我可以做什麼來提供非交互訪問而不讓postgres在沒有密碼的情況下登錄? – Basil 2012-08-14 18:50:09

+0

爲此,應該找到對等身份驗證,假設您不允許用戶使用postgres帳戶登錄到服務器。 – Andrew 2012-08-14 23:53:28

+1

我在Windows中注意到了相同的行爲。在PgAdminIII中添加新連接後,在連接postgres時,我不再提示psql輸入密碼。罪魁禍首是pgpass.conf,由PgAdminIII在%APPDATA%\ postgresql文件夾中自動創建。謝謝丹尼爾。 – 2014-02-18 21:35:07

5

重新您的古怪行爲,我想你已經錯過了線的pg_hba.conf這是特定於用戶postgres。請輸出:

grep '^[^#]' pg_hba.conf 

至於ident vs md5;我個人更喜歡ident用於開發中的交互式使用,對普通用戶來說很好,但我不認爲通過sudo訪問postgres用戶是一個好主意。 sudo -u postgres psqlpsql -U postgres -W均授予對postgres超級用戶角色的訪問權限,並因此授予對數據庫用戶的文件系統訪問權限。既不需要root密碼,也可以通過sudoers輕鬆地限制sudo以將調用用戶限制爲僅運行psql。但是,sudo -u postgres psql客戶端代碼也運行爲postgres,所以它是一個更大的攻擊面,並且用戶總是有機會找到繞過您的限制的方法。

我在開發中使用ident,生產中使用md5

+0

感謝您對auth方法的澄清。我將輸出添加到問題中。 – Basil 2012-08-14 12:12:45

相關問題