[PHP-users 11764] Re: [FYI]PostgreSQL の認証設定が必要です(phpPgAdmin 2.4.2で認証ができない)
Yasuaki Ouchi
php-users@php.gr.jp
Mon, 25 Nov 2002 20:24:16 +0900
PHP-user のみなさん,大内@Hana と申します。
ここへの投稿は初めてです。今後ともお見知りおきを。
phpPgAdmin 2.4.2 で認証ができないという件に関してですが,自分で何とか
したら出来ましたが,セキュリティ上気になることがわかりましたので,レスい
たします。
ですが,今回の話題は PostgreSQL の設定の話なので,ここに投稿していいか
どうかちょっと悩みました。
まず,config.ini.php にあるこれを読んでください。へっぽこですが翻訳しました。
/******************************** IMPORTANT SECURITY NOTICE ********************************
By default, Postgres does not check passwords through a local connection. This is
a major security if connecting through a local unix socket with phpPgAdmin. You
have a few options to close this security hole:
1. You can connect through a TCP connection (use the -i option to start postgres)
- Set $cfgServers[*]['local'] = false;
- Edit your $PGDATA/pg_hba.conf file to accept connections from localhost
with password authentication
2. Edit your $PGDATA/pg_hba.conf file to use password authentication through a
local connection.
********************************* IMPORTANT SECURITY NOTICE *******************************/
----[重要なセキュリティの告知]------------------------------------------
標準では PostgreSQL はローカル接続で認証を行いません。(補足:ユーザー名
が合えば,パスワードなしでDBにログインできます!)セキュアに接続するため
には,ローカルのUNIX socket 接続を phpPgAdmin で行うのが主流の方法です。
このセキュリティホールを塞ぐには,ちょっとした工夫で可能です。
1.TCP/IP 接続で PostgreSQL サーバに接続するようにします。
- $cfgServers[*]['local'] = false; にします。
- $PGDATA/pg_hba.conf で,127.0.0.1 からの接続において,パスワード認証
のみを許可します。
2.$PGDATA/pg_hba.conf の全認証でパスワード認証のみを許可します。
------------------------------------------------------------------------
かなり意訳入ってます。すみません。で,具体的な解決方法ですが,告知にも
ありますように,本来は全ての認証においてtrustにするべきではありません。
しかし,socket接続までパス認証をかけてしまうと,postmaster(PostgreSQL
のデーモン)の起動時にマスターユーザー(FreeBSDの場合はpgsql,多くはpostgresql)
の認証を要求され,自動でのブートができなくなってしまいます。
これだと,サーバOSの再起動もかけられなくなってしまいますので,2.の
方法は今回除外します。(いい方法があったらアドバイスください…)
で,1.の方ですが,まず PostgreSQL のTCP/IP 接続を許可します。
$PGDATA/postgresql.conf で,TCPIP_SOCKET = true にすると,TCP/IP 接続が
できるようになります。
次は認証設定です。$PGDATA/pg_hba.conf で,こんな感じにしてみましょう。
pg_hba.conf の最後を下のような感じに修正します。最初は両方とも trust に
なってるはずですが,127.0.0.1 の方が TCP/IP 接続ですので,これを password
にします。
# TYPE DATABASE IP_ADDRESS MASK AUTH_TYPE AUTH_ARGUMENT
local all trust
host all 127.0.0.1 255.255.255.255 password
で,config.ini.php ですが,こちらは最終的にこうします。
$cfgServers[1]['local'] = false;
$cfgServers[1]['host'] = 'localhost';
$cfgServers[1]['port'] = '5432';
$cfgServers[1]['adv_auth'] = true;
以上の設定で,正しく phpPgAdmin から認証ができるようになったと思いますが,
どうでしょうか?
参考になれば幸いです。>ALL
#おせっかいな解説ですみません…
それでは,今回はここの所で失礼させていただきます。
// Yasuaki Ouchi @ Hanamaru Internet : dora-kou@hanamaru.ne.jp
///////////////////////////////////////////////////////////////
////////【2002年1月18日より,下記に移転しました】///////
// (株)恒徳産業 インターネット事業部
// 〒531-0041 大阪市北区天神橋7丁目12−6
// グレーシィ天神橋2号館901号室
// Web : http://www.at-hana.net/
// TEL : 06-6881-1190 / FAX : 06-6881-1191
///////////////////////////////////////////////////////////////