2012-08-14 13 views
13

私はPostgreSQL 9.1をUbuntu 12.04にインストールした後、 "postgres"スーパーユーザアカウントのパスワードを設定しました。 。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を再起動:私はそうのようにpg_hba.confを設定した理由はここにあるlogingがあるとき、私は、すべてのユーザーが自分のパスワードを入力する必要がありますする必要。私がこれをするときpsql -U testuser私はパスワードを求められますが、そのような "postgres"アカウントでログインするとpsql -U postgres私はパスワードプロンプトを表示せずにログインしています。 パスワードプロンプトを強制的に入力するとpsql -U postgres -W私はログインできます正しいパスワードを入力するか、何も入力しないでください。誤ったパスワードを入力すると拒否されます。

誰にも私にこの理由が説明できますか?

関連するノート: "postgres"ユーザの認証方法としてidentを使用し、マシンのrootパスワードが必要な "postgres"ユーザになると主張する例がたくさんあります。その理由は、攻撃者がルートアクセス権を取得した場合、あなたのやり方が終わったということです。私は、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. パスワードを含むPostgresのホームディレクトリに.pgpassファイルを(もチェック非標準パスの場合はPGPASSFILE環境変数)。

  2. PGPASSWORD環境変数を設定できました。

誤ったpg_hba.confファイルを編集している可能性もあります。 postgresとして接続すると、SHOW hba_file SQLコマンドで確認できる正しいパスを取得できます。

また、ログファイル/var/log/postgresql/postgresql-9.1-main.logを確認して、要求時に構成ファイルが再読み込みされ、認証中に疑わしいメッセージがないかどうかを確認することができます。 DebianとUbuntuは、これが適用され、同じPostgresのパッケージを使用しているので

# 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 

:postgresユーザでパスワードなしの接続が共通している理由については

、DebianのPG-9.1 pg_hba.confは、それらを禁止についてこのコメントがありますUbuntuにも。

+0

.pgpassファイルにありました。ありがとう!あなたが引用したpg_hba.confファイルの部分は、私を少し混乱させます。ポストグルにパスワードなしでログインさせることなく、非対話型のアクセスを与えるにはどうすればよいですか? – Basil

+0

あなたがpostgresアカウントのもとでサーバにログインすることを許さないと仮定して、ピア認証を見つけるべきです。 – Andrew

+1

私はWindowsで同じ動作を確認しました。 PgAdminIIIで新しい接続を追加した後、私はpostgresと接続するときにpsqlによってパスワードの入力を求められなくなりました。原因はpgpass.confで、%APPDATA%\ postgresqlフォルダのPgAdminIIIによって自動的に作成されました。ダニエルありがとう。 –

5

出力は、私はあなたがpostgresユーザーに固有のpg_hba.confの行を逃したと思います。

grep '^[^#]' pg_hba.conf 

ident対md5については、次を参照してください。個人的に私は開発でのインタラクティブな使用のためにidentを好んでいますが、それは普通のユーザーにとっては大丈夫ですが、私はpostgresユーザーへのアクセスをsudoで行うことをお勧めしません。 sudo -u postgres psqlpsql -U postgres -Wの両方が、postgresのスーパーユーザーロールにアクセスし、データベースユーザーとしてファイルシステムへのアクセスを許可します。どちらもrootパスワードを必要とせず、sudosudoersで簡単に制限して、起動するユーザをちょうどpsqlに制限することができます。ただし、sudo -u postgres psqlクライアントのコードはpostgresとして実行されるため、攻撃の対象が大きくなり、常にsudoerの制限を回避する方法が見つかる可能性があります。

私は、開発時にidentmd5を使用しています。

+0

認証方法についての説明をいただきありがとうございます。質問に出力を追加しました。 – Basil

関連する問題