PostgreSQL サーバーのスーパーユーザーである postgres のパスワード設定を設定したので、次は PostgreSQL サーバーの設定を行います。PostgreSQL の設定ファイルは以下の3つから構成されています。
ディストリビューションによってパスに違いがあります。
PostgreSQL サーバを起動する前に、最低限必要なセキュリティ対策を行ないます。ここで紹介する内容を写しても意味がありません。それぞれのセキュリティポリシに応じて設定して下さい。
ここでは、PostgreSQL サーバへ接続可能なホストは自ホストだけで接続には暗号化されたパスワードを求めるように設定します。が、phpPgAdmin の利用を想定しているため、pg_hba.conf で行う暗号化に関する設定は殆んど意味を成しません。(追って説明)
PostgreSQL の主な利用目的は CMS や グループウェアなどが必要とする Webアプリケーションに必要なデータベースを用意するためで外部から操作は、phpPgAdmin によるブラウザ経由で行なう事を目的にしています。
セキュリティ上、最も重要な設定です。インストール直後は必ず設定します。CentOS-4.5 のパッケージではデフォルトで以下の記述があります。
local all all ident sameuser
Unix アカウントを持つユーザーが local ホストからの接続を許可しています。以下のように変更し、ローカルユーザーに対して全て md5 暗号化パスワードによる認証を行うように強制します。
# local all all ident sameuser コメントアウト
local all all md5
ドメイン、TCP/IPベースでの接続か、制限するデータベース名、ユーザー名、接続元、認証方式の組み合わせで接続制限を行ないます。書式パターンは 7 通りです。詳細は下記ドキュメントを参照して下さい。
参照 => PostgreSQL 7.4.6 文書 クライアント認証
ローカルホストからの接続を許可するために、以下の一行を追記します。
host all all 127.0.0.1 255.255.255.255 md5
ローカルホストからの接続は 127.0.0.1 つまり、自ホストに認め、パスワードによる認証、認証時の暗号化は md5 に設定しています。
注意
PostgreSQL で設定する認証時の暗号化に関する機能は直接データベースに接続する場合に対して意味を持ちます。また、暗号化は認証のみの保護でありネットワークを流れるデータベースの内容が保護される訳ではありません。
他の PostgreSQL データベースサーバからのネットワーク経由でのバックアップ受け口など、特定のホストに対し接続を認めたい場合は、以下を追記します。この例ではスーパーユーザーである postgres に対してのみ 192.168.1.54 からの接続を許可しています。
# TYPE DATABASE USER IP-ADDRESS IP-MASK METHOD
host all postgres 192.168.1.54 255.255.255.255 md5
このようにバックアップを受け取る側の PostgreSQL サーバーに設定しておけば、ネットワークを使って pg_dumpall で別のPostgreSQLデータベースサーバに丸ごと復元する事も可能です。(自動バックアップについては後述)
通信経路によってはSSL暗号化による保護、ファイアウォールを特定のホストのみに port 5432 を開くなどのセキュリティ対策を考える必要もあります。
その他、クライアント認証に関する設定例はドキュメントを参照して下さい。
参照 => pg_hba.conf ファイルの例 (PostgreSQL-7.4)
ここでは説明しませんが、ユーザーグループによる制限など扱う PostgreSQL データベースのアカウント数やポリシに応じて適切なアクセス制限を考える必要があります。
pg_hba.conf で設定した host を有効にするためにTCP/IPによる接続を許可するように設定します。
# - Connection Settings -
#tcpip_socket = false
↓
tcpip_socket = true
ユーザーに対し暗号化認証を強制するようにするため、以下を追記します。
password_encryption = true
METHOD (認証方式) には以下を指定する事が出来ます。 特に trust の使用には注意が必要です。出来れば使用すべきでありません。
METHOD | 意味 |
---|---|
trust | 無条件に許可する |
reject | 拒否 |
md5 | パスワード認証(md5-暗号化) |
crypt | パスワード認証 (crypt-暗号化) |
password | パスワード認証 (非暗号化) |
krb5 | Kerberos 認証 を用いる |
ident | ident 定義にマッチするユーザー |
pam | pam認証を用いる |
例えば pg_hba.conf で以下のように記述した場合、
host all all 127.0.0.1 255.255.255.255 trust
後述する phpPgAdmin を導入した場合、スーパーユーザー権限 をパスワードなしで認証してしまいセキュリティホールそのものとなってしまいます。
host all all 127.0.0.1 255.255.255.255 md5
この例では自ホストから接続する全てのPostgreSQL内のユーザに対し、md5 暗号化による認証を求めていますが、あくまでSQLサーバにおける認証であるため、phpPgAdmin によるブラウザ経由で接続する場合は md5 ではなく平文でネットワークを流れることになります。
ブラウザを経由する場合は、クライアントとWEBサーバー間でSSL暗号化により通信を保護する必要があります。
ここでの認証方式はあくまで PostgreSQL データベースに接続する際の認証方式である事に留意する必要があります。
上記、設定ファイルを修正したら PostgreSQL サーバを再起動する必要があります。
以上で終了です。次は ブラウザ経由で PostgreSQL を操作するために phpPgAdmin のセットアップについて紹介します。