[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
///////////////////////////////////////////////////////////////