.
WEB/DB 関連 =>PostgreSQL-Server>1.PostgreSQL インストール設定ファイルの構成と設定
Linux 活用ガイド:目次

サーバ構築ガイド

レンタル ガイド

ショップ 構築ガイド

情報漏洩対策

PostgreSQL サーバーの基本設定

PostgreSQL サーバーのスーパーユーザーである postgres のパスワード設定を設定したので、次は PostgreSQL サーバーの設定を行います。PostgreSQL の設定ファイルは以下の3つから構成されています。

ディストリビューションによってパスに違いがあります。

  • /var/lib/pgsql/data/postgresql.conf
    • PostgreSQL サーバーの環境設定ファイルです。基本的な動作を設定します。
  • /var/lib/pgsql/data/pg_hba.conf
    • PostgreSQL サーバーへの接続制限、認証方法に関する設定を行うための設定ファイルです。セキュリティ上、重要な意味を持ちます。
  • /var/lib/pgsql/data/pg_ident.conf
    • ident 認証を行うための定義を行うファイルです。これは Unix アカウントと PostgreSQL ユーザーアカウントの関連を定義するファイルです。ここでは紹介していません。

おことわり

PostgreSQL サーバを起動する前に、最低限必要なセキュリティ対策を行ないます。ここで紹介する内容を写しても意味がありません。それぞれのセキュリティポリシに応じて設定して下さい。

ここでは、PostgreSQL サーバへ接続可能なホストは自ホストだけで接続には暗号化されたパスワードを求めるように設定します。が、phpPgAdmin の利用を想定しているため、pg_hba.conf で行う暗号化に関する設定は殆んど意味を成しません。(追って説明)

PostgreSQL の主な利用目的は CMS や グループウェアなどが必要とする Webアプリケーションに必要なデータベースを用意するためで外部から操作は、phpPgAdmin によるブラウザ経由で行なう事を目的にしています。

接続制限 / 認証方式の設定 ~ pg_hba.conf.

セキュリティ上、最も重要な設定です。インストール直後は必ず設定します。CentOS-4.5 のパッケージではデフォルトで以下の記述があります。

/var/lib/pgsql/data/pg_hba.conf

local all all ident sameuser

Unix アカウントを持つユーザーが local ホストからの接続を許可しています。以下のように変更し、ローカルユーザーに対して全て md5 暗号化パスワードによる認証を行うように強制します。

/var/lib/pgsql/data/pg_hba.conf

# local all all ident sameuser コメントアウト
local all all md5

ドメイン、TCP/IPベースでの接続か、制限するデータベース名、ユーザー名、接続元、認証方式の組み合わせで接続制限を行ないます。書式パターンは 7 通りです。詳細は下記ドキュメントを参照して下さい。

参照 => PostgreSQL 7.4.6 文書 クライアント認証

ローカルホストからの接続許可

ローカルホストからの接続を許可するために、以下の一行を追記します。

/var/lib/pgsql/data/pg_hba.conf

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 データベースのアカウント数やポリシに応じて適切なアクセス制限を考える必要があります。

PostgreSQL の環境設定 ~ postgresql.conf

pg_hba.conf で設定した host を有効にするためにTCP/IPによる接続を許可するように設定します。

/var/lib/pgsql/data/postgresql.conf

# - Connection Settings -
#tcpip_socket = false

tcpip_socket = true

ユーザーに対し暗号化認証を強制するようにするため、以下を追記します。

/var/lib/pgsql/data/postgresql.conf

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 サーバを再起動する必要があります。

# service postgresql restart

以上で終了です。次は ブラウザ経由で PostgreSQL を操作するために phpPgAdmin のセットアップについて紹介します。

bottom_mark
ページ最上部
ページ最上部 前のページ