PostgreSQL HBAの設定
 

概要

PostgreSQLの接続権限やクライアントの設定をしているのが、pg_hba.confファイルとpg_ident.confファイルです。ここではpg_hba.confの設定と外部から接続するための設定について説明します。
pg_hba.confはPostgreSQLのデータのDirectory(initdbを実行した時に作成されdefaultは/var/lib/pgsql/data指定した場合はそのDirectory)にあります。(HBAとは、host-based authentication: ホストベース認証の略です)
外部から接続するためには、ネットワークのポートも開けておく必要があります。

1. pg_hba.confの設定

デフォルトでは以下のようになっています。

# PostgreSQL Client Authentication Configuration File
# ===================================================
#
# Refer to the "Client Authentication" section in the
# PostgreSQL documentation for a complete description
# of this file.  A short synopsis follows.
#
# This file controls: which hosts are allowed to connect, how clients
# are authenticated, which PostgreSQL user names they can use, which
# databases they can access.  Records take one of these forms:
#
# local      DATABASE  USER  METHOD  [OPTIONS]
# host       DATABASE  USER  CIDR-ADDRESS  METHOD  [OPTIONS]
# hostssl    DATABASE  USER  CIDR-ADDRESS  METHOD  [OPTIONS]
# hostnossl  DATABASE  USER  CIDR-ADDRESS  METHOD  [OPTIONS]
#
# (The uppercase items must be replaced by actual values.)
#
# The first field is the connection type: "local" is a Unix-domain socket,
# "host" is either a plain or SSL-encrypted TCP/IP socket, "hostssl" is an
# SSL-encrypted TCP/IP socket, and "hostnossl" is a plain TCP/IP socket.
#
# DATABASE can be "all", "sameuser", "samerole", a database name, or
# a comma-separated list thereof.
#
# USER can be "all", a user name, a group name prefixed with "+", or
# a comma-separated list thereof.  In both the DATABASE and USER fields
# you can also write a file name prefixed with "@" to include names from
# a separate file.
#
# CIDR-ADDRESS specifies the set of hosts the record matches.
# It is made up of an IP address and a CIDR mask that is an integer
# (between 0 and 32 (IPv4) or 128 (IPv6) inclusive) that specifies
# the number of significant bits in the mask.  Alternatively, you can write
# an IP address and netmask in separate columns to specify the set of hosts.
#
# METHOD can be "trust", "reject", "md5", "password", "gss", "sspi", "krb5",
# "ident", "pam", "ldap" or "cert".  Note that "password" sends passwords
# in clear text; "md5" is preferred since it sends encrypted passwords.
#
# OPTIONS are a set of options for the authentication in the format
# NAME=VALUE. The available options depend on the different authentication
# methods - refer to the "Client Authentication" section in the documentation
# for a list of which options are available for which authentication methods.
#
# Database and user names containing spaces, commas, quotes and other special
# characters must be quoted. Quoting one of the keywords "all", "sameuser" or
# "samerole" makes the name lose its special character, and just match a
# database or username with that name.
#
# This file is read on server startup and when the postmaster receives
# a SIGHUP signal.  If you edit the file on a running system, you have
# to SIGHUP the postmaster for the changes to take effect.  You can use
# "pg_ctl reload" to do that.

# Put your actual configuration here
# ----------------------------------
#
# If you want to allow non-local connections, you need to add more
# "host" records. In that case you will also need to make PostgreSQL listen
# on a non-local interface via the listen_addresses configuration parameter,
# or via the -i or -h command line switches.
#



# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD

# "local" is for Unix domain socket connections only
local   all         all                               ident
# IPv4 local connections:
host    all         all         127.0.0.1/32          ident
# IPv6 local connections:
host    all         all         ::1/128               ident

pg_hba.confは1行で1レコードを構成しており、1行のフォーマットは以下のとおりです。 認証の設定は上から1行ずつ順番に判定され、最初に一致した行が認証処理に使用されます。そして、どれも一致しない場合はアクセスが拒否されます。

TYPE DATABASE USER CIDR-ADDRESS METHOD
# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD

# "local" is for Unix domain socket connections only
local   all         all                               md5
local   all         postgres                          ident
# IPv4 local connections:
host    all         dbuser      127.0.0.1/32          md5
host    all         dbuser      192.168.100.1/32      md5
  • TYPE
    接続形式内容
    localUNIXドメインソケットを使用した接続
    hostTCP/IPを使用した接続。SSLの使用/未使用は考慮しない
    hostsslSSLで暗号化されたTCP/IPを使用した接続
    hostnosslSSLを使用していないTCP/IPを使用した接続
    「local」「host」「hostssl」「hostnossl」のいずれか。localはUNIXドメインソケット経由の接続、hostはTCP/IP経由の接続、hostsslはSSL経由の接続、hostnosslはSSLを使用しない接続を意味する。
  • DATABASE
    データベース名の指定には、個別のデータベース名のほかに特別な意味を持つ単語、all、sameuser、sameroleがあります。それぞれの意味は表2の通りです。sameroleを指定する際に用いられる「ロール」という概念は、グループと同じと考えてよいでしょう。

 具体的なデータベース名を記述する場合は、カンマ区切りで複数指定できます。多くのデータベースを指定したい場合は、それらを別のファイルに記述して、データベース名の指定を@ファイル名とすると、そのファイルに書かれたデータベース名が適用されるようになります。

データベース名内容
allすべてのデータベース
sameuserデータベース名と同じ名前のユーザー
sameroleデータベースと同じ名前のロールに属するユーザー
データベース名, データベース名, ……(カンマ区切りの列挙)列挙されているすべてのデータベース
@ファイル名ファイルに記載されているすべてのデータベース

接続を許可したいデータベース名を指定。「all」とすると全てのデータベースを意味する。複数のデータベース名を指定したい場合は、カンマで区切る。

  • USER
    ユーザー名内容
    allすべてのユーザー
    +ロール名ロールに属するユーザー
    ユーザー名, ユーザー名, ……(カンマ区切りの列挙)列挙されているすべてのユーザー
    @ファイル名ファイルに記載されているすべてのユーザー

接続を許可するユーザ名を指定。「all」とすると全てのユーザを意味する。ユーザ名の前に「+」を付けるとグループ名を指定したことになる。複数のユーザ名を指定したい場合は、カンマで区切る。

  • CIDR-ADDRESS TYPEがlocal以外のときに指定する。接続を許可するクライアントのIPアドレスやネットワークアドレスを指定する。
      例1)192.168.0.11/32・・・192.168.0.11からの接続のみを許可する。
      例2)192.168.0.0/24・・・IPアドレスが192.168.0.xであるクライアントのみを許可する。
      例3)0.0.0.0/0・・・任意のIPアドレスのクライアントを許可する
  • METHOD|ユーザの認証方式を指定する。代表的なものは以下のとおり。
      trust・・・認証なし。無条件に接続を許可する。
      reject・・・無条件に接続を拒否する。特定のホストやネットワークからの接続を拒否する際に使用。
      md5・・・md5を利用したパスワード認証。パスワードを指定していないユーザは接続できない。
      password・・・パスワード認証を行うが、BASIC認証のため、パスワードがそのままネットワークを流れてしまう。
     「ident」と「pam」はそれぞれ「identサービス」と「pamサービス」を使って認証を行います。
     「crypt」も暗号化パスワードを要求しますが古い形の暗号化パスワードです。

他の 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データベースサーバに丸ごと復元する事も可能です。

7.2 から、パスワードを暗号化して格納できるようになりました。alter user するときに、encrypted を指定するようにします。

alter user jibun with encrypted password 'secret';

しかし、利用者全員に encrypted を付けてパスワードを変更してくれと言うのは大変です。そこで、デフォルトで暗号化して格納するように設定を行います。postgresql.conf の以下の行のコメントを外します。

#password_encryption = on
  
password_encryption = on

これで encrypted を付けなくても暗号化されるようになりました。

設定の反映

設定を反映させるために設定を再読み込みします。

# service postgresql reload

postgresq.confファイルの修正

postgresql.confを次のように修正します。

listen_addresses = '*' ←コメントを解除し、''内を * に修正~
なお、PostgreSQLのデフォルトのポート「5432」です。ポートを変えたい場合、以下を修正します。~
#port 5432 ←コメントを解除し、ポート番号を変更する~

ポートを開ける

デフォルトのポート5432または上記で設定したポートを開け、通信できるようにします。

# vi /etc/sysconfig/iptables

以下を追加します。

    -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 5432 -j ACCEPT

保存したら、iptableを再起動します。

# service iptables restart

編集中

 

最終更新のRSS
Last-modified: 2014-04-11 (金) 01:19:52 (2072d)