13

Ubuntu 12.04 に PostgreSQL 9.1 をインストールした後、「postgres」スーパーユーザー アカウントのパスワードを設定しました。ログイン時にすべてのユーザーがパスワードを入力する必要があるようにします。これが、pg_hba.conf を次のように構成した理由です。

#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、正しいパスワードを入力してログインできますまたは何も入力しないでください。間違ったパスワードを入力すると拒否されます。

なぜこれが起こっているのか誰か説明してもらえますか?

関連するメモ: 「postgres」ユーザーの認証方法として ident を使用する例を多く見ます。「postgres」ユーザーになるには、マシンのルート パスワードが必要であると主張しています。理由は、攻撃者が root アクセス権を取得した場合、とにかく完了したということだと思います。ただし、ルートパスワードとは異なるパスワードでログインしたいと思います。私は、物事ごとに異なるパスワードを使用することを好みます。これは合理的ですか?

の出力grep '^[^#]' pg_hba.conf

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

2 に答える 2

13

pg_hba.conf確かに、UNIX ソケット接続にはパスワードが必要ですが、それを回避する方法はまだあります。

  1. .pgpassパスワードを含むpostgresホームディレクトリ内のファイル(非標準パスのPGPASSFILE環境変数も確認してください)

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

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

また、ログ ファイル/var/log/postgresql/postgresql-9.1-main.logを確認して、要求時に構成ファイルが再ロードされていることを確認し、認証中に疑わしいメッセージを探すこともできます。

postgres ユーザーとのパスワードレス接続が一般的である理由については、debian PG-9.1pg_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 にも当てはまります。

于 2012-08-14T15:49:47.187 に答える
5

pg_hba.confあなたの奇妙な振る舞いについては、ユーザーに固有の行を見逃していると思いますpostgres。次の出力を表示してください。

grep '^[^#]' pg_hba.conf 

ident と md5 については; postgres個人的には、開発でのインタラクティブな使用には ident を好みます。通常のユーザーには問題ありませんが、経由でユーザーにアクセスを許可することはsudo良い考えではないと思います。と の両方sudo -u postgres psqlpsql -U postgres -W 、postgres スーパーユーザー ロールへのアクセスを許可し、データベース ユーザーとしてファイル システムへのアクセスを許可します。どちらもルートパスワードを必要とせず、呼び出し元のユーザーを実行中だけに制限するsudoことで簡単に制限できます。ただし、クライアントコードも同様に実行されるため、攻撃対象領域が大きくなり、ユーザーが制限を回避する方法を見つける可能性が常にあります。sudoerspsqlsudo -u postgres psqlpostgressudoer

私は開発、本番で使用identしています。md5

于 2012-08-14T10:36:23.393 に答える