6.2. 認証方式

以下の小節では、認証方式について詳細に説明します。

6.2.1. trust認証

trust認証が指定されるとPgpool-IIは、サーバに接続できる全ての人に対してその人が指定する任意のデータベースユーザ名としてのアクセス権限が付与されていると想定します

6.2.2. Clear Text Password Authentication

password方式は、パスワードを平文で送信するので、パスワード"盗聴"攻撃に対して脆弱です。 可能ならば、常に避けるようにしてください。 しかし、接続がSSL暗号で保護されていれば、passwordは安全に使用できます。 クライアントがSSL暗号を使うことを強制するために、pool_hba.confhostsslを指定することをおすすめします。

この方式を使う利点は、認証のためのパスワードがクライアント側から提供され、pool_passwdは使われないことです。 ですからpool_passwdの保守を避けることができます。

allow_clear_text_frontend_authを使ってもpool_passwdの保守を避けることができますが、SSL暗号を強制することはできません。pool_hba.confをこのパラメータと一緒に使うことができないからです。

6.2.3. MD5パスワード認証

この認証方法はMD-5ハッシュ化されたパスワードがクライアントから送信されるパスワードベースの認証方法です。 Pgpool-IIPostgreSQLデータベースユーザパスワードを見ることができず、クライアントプリケーションはMD5ハッシュ化されたパスワードを送るのみです。 そのため、Pgpool-IImd5認証はpool_passwd認証ファイルを使ってサポートしています。

注意: Pgpool-IIをrawモードで使用している場合、あるいはバックエンドが1つしかない場合は、pool_passwdを設定する必要はありません。

6.2.3.1. 認証ファイル形式

md5認証を使用するには、pool_passwd認証ファイルに平文、md5またはAES暗号化形式のいずれかのユーザのパスワード が含まれている必要があります。

pool_passwdファイルは以下の形式の行を含みます。

      "username:plain_text_passwd"
     

      "username:encrypted_passwd"
     

6.2.3.2. md5認証の設定

以下がmd5認証を有効にする手順です。

1. データベースのOSユーザとしてログインし、"pg_md5 --config-file=pgpool.confへのパス --md5auth --username=ユーザ名 パスワード" を実行します。 pool_passwdがまだ存在していなかった場合は、pg_md5コマンドが自動的にこれを生成します。

注意: ユーザ名とパスワードは、PostgreSQLに登録したものと完全に同じでなければなりません。

2. pool_hba.confにmd5認証のエントリを作成します。 詳細については項6.1を参照してください。

3. (もちろんpool_passwdとPostgreSQLの両方で)md5パスワードを変更したら、Pgpool-II設定の再読み込みを実行してください。

6.2.4. scram-sha-256認証

SCRAMとも呼ばれるこの認証方式は、信頼できない接続におけるパスワードの盗聴を防ぐチャレンジレスポンス認証です。 Pgpool-IIは、PostgreSQLデータベースユーザのパスワードの可視性を持たないため、SCRAM認証はpool_passwd認証ファイルを使用してサポートされています。

6.2.4.1. SCRAMの認証ファイルエントリ

SCRAM認証を使用する場合、pool_passwd認証ファイルは平文もしくはAES暗号化ファーマットのユーザパスワードを含んでる必要があります。

       "username:plain_text_passwd"
      

       "username:AES_encrypted_passwd"
      

注意: pool_passwdファイル内のmd5形式のユーザパスワードはSCRAM認証に使用できません。

6.2.4.2. scram-sha-256認証の設定

以下がscram-sha-256認証を有効にする手順です。

1- 平文またはAES暗号化フォーマットのデータベースユーザとパスワードのpool_passwdファイルエントリを作成します。 Pgpool-II付属のpg_encコマンドでpool_passwdファイル内にAES暗号化パスワードエントリを作成することができます。

注意: ユーザ名とパスワードはPostgreSQLサーバに登録されているものと一致している必要があります。

2- pool_hba.confに適切なscram-sha-256エントリを追加します。 詳細は項6.1を参照してください。

3- (もちろんpool_passwdとPostgreSQLの両方で)SCRAMパスワードを変更したら、Pgpool-IIの設定の再読み込みを実行してください。

6.2.5. 証明書認証

この認証方式は認証を実施するためにSSLクライアント証明書を使用します。 この認証方式を使っている場合、Pgpool-IIはクライアントが提供する有効な証明書を要求します。 パスワードプロンプトがクライアントに送信されません。 証明書のcn(コモンネーム)の属性は要求されたデータベースユーザ名と比較され、一致した場合ログインが許可されます。

注意: 証明書認証はクライアントとPgpool-IIの間でのみ使用できます。 証明書認証はPgpool-IIPostgreSQLの間では使用できません。 バックエンド認証にはその他の認証方式を使用できます。

6.2.6. PAM認証

この認証方式は認証機構としてPAM(Pluggable Authentication Modules)を使用します。 デフォルトのPAMサービス名はpgpoolです。 Pgpool-IIが稼働するホスト上のユーザ情報を使ったPAM認証を利用することができます。 PAMについての詳細はLinux-PAMページを読んでください

PAM認証を有効にするには、Pgpool-IIのサービス設定ファイルをシステムのPAM設定ディレクトリ(通常は"/etc/pam.d"にあります)に作成しなければなりません。 サービス設定ファイルのサンプルはインストールディレクトリ下に"share/pgpool-II/pgpool.pam"としてインストールされています。

注意: PAMサポートを有効にするには、Pgpool-II"--with-pam"をつけてconfigureされていなければなりません。

6.2.7. LDAP認証

この認証方式はパスワード確認にLDAPを使用します。 LDAPはユーザの名前とパスワードの組み合わせのみに使用されます。 そのため、LDAPを使用して認証を行うようにする前に、ユーザはデータベースに存在しなければなりません。

LDAP認証は2つのモードで動作します。1つ目のモードでは、それは単なるバインド・モードを呼び出すものですが、サーバはprefix username suffixとして区別された名前にバインドします。 一般的に、prefixパラメータはActive Directory環境でのcn=DOMAIN\を特定するために使用されます。 suffixは、Active Directory環境ではない場合でのDNの残りの部分を特定するために使用されます。

2つ目のモードでは、それはsearch/bindモードを呼び出すもので、サーバは最初にldapbinddnldapbindpasswdで指定された、固定されたユーザ名とパスワードを使用してLDAPディレクトリにバインドします。 それからデータベースにログインしようとしているユーザを検索します。 もしユーザとパスワードが指定されていなかった場合、ディレクトリに対して匿名でバインドします。 検索はldapbasednのサブツリーまで行われ、ldapsearchattributeで指定された属性に正確に一致するかどうかまで行われます。 この検索において、一度ユーザが見つかるとサーバは切断して、クライアントで指定されたパスワードを使用してこのユーザとして再度ディレクトリにバインドします。 これはそのログインが正しいかどうかを検証するためです。 このモードはApache mod_authzn_heapおよびpam_ldapのように他のソフトウェアと同じように、LDAP認証の仕組みで使用されるものと同じです。 この方法は、ユーザオブジェクトがディレクトリに配置されている場合に、かなりの柔軟性があります。 しかし、LDAPサーバへの2つの分離した接続が作成されます。

次の設定オプションは両方のモードで使用されます。

ldapserver

接続するLDAPサーバの名称もしくはIPアドレスの名称。空白で区切ることで複数のサーバを指定できます。

ldapport

LDAPサーバに接続するためのポート番号。 もしポートが指定されていない場合はLDAPライブラリ内のデフォルトポート設定が使用されます。

ldapscheme

ldapsに設定するとLDAPSを使用します。 これはいくつかのLDAPサーバーの実装でサポートされている、SSL経由のLDAPを使用する非標準の方法です。 代替方法については、ldaptlsオプションを参照してください。

ldaptls

1に設定すると、Pgpool-IIとLDAPサーバ間の接続にTLSによる暗号化を使用します。 これはRFC 4513のStartTLS操作を使用します。 代替方法については、ldapschemeオプションを参照して下さい。

ldapschemeldaptlsを使うときにはPgpool-IIサーバとLDAPサーバ間のトラフィックのみが暗号化されることに注意して下さい。 SSLがそこでも使用されていない限り、Pgpool-IIサーバとクライアントとの接続は、暗号化されません。

以下のオプションは単純バインド・モードのみで使用されます。

ldapprefix

単純なバインド認証を行う場合のDNを生成する際にユーザ名の前に追加する文字列

ldapsuffix

単純なバインド認証を行う場合のDNを生成する際にユーザ名の後に追加する文字列

以下のオプションはsearch/bindモードのみで使用されます。

ldapbasedn

検索とバインドの認証を行う場合のユーザ名がログインするための検索を始めるためのルートDN

ldapbinddn

検索とバインドの認証を行う場合のディレクトリと検索をバインドするためのユーザのDN

ldapbindpasswd

検索とバインドの認証を行う場合のディレクトリと検索をバインドするためのユーザのパスワード

ldapsearchattribute

検索とバインドの認証を行う場合の検索時のユーザ名に対して一致させる属性。 属性が指定されない場合、属性uidが使用されます。

ldapsearchfilter

search/bind認証を行うときに使用する検索フィルタです。 $usernameの出現はユーザ名に置き換えられます。 これによりldapsearchattributeよりも柔軟な検索フィルタが可能になります。

ldapurl

RFC 4516 LDAP URL。これはその他いくつかのLDAPオプションをより簡潔、かつ一般的な形式で記述する別の方法です。 フォーマットは以下のようになっています。

ldap[s]://host[:port]/basedn[?[attribute][?[scope][?[filter]]]]

scopebaseonesubのいずれかでなくてはならず、一般的には最後のものです。 (デフォルトはbaseです。これは通常このアプリケーションでは役に立ちません。) attributeは単一の属性を指定できます。その場合、それはldapsearchattributeの値として使用されます。 もしattributeが空の場合は、ldapsearchfilterの値としてfilterを使用することができます。

URLスキームldapsは、ldapscheme=ldapsを使用するのと同じ、SSL上のLDAP接続をするLDAPS方式を選択します。 StartTLS操作による暗号化されたLDAP接続を使用するには、通常のURLスキームldapを使用し、ldapurlに加えldaptlsオプションを使用しなければなりません。

非匿名バインド(non-anonymous bind)に対し、ldapbinddnおよびldapbindpasswdは個別のオプションとして指定されなければなりません。

backend_use_passwd

1に設定すると、LDAP認証で使用されたパスワードをPgpool-IIとバックエンド間の認証に使用します。

search/bindオプションと単純バインドに対するオプションの設定を混在させるのはエラーです。

search/bindモードを使用するときは、ldapsearchattributeで指定される単一の属性を使って、あるいはldapsearchfilterで指定されるカスタム検索フィルターを使って、検索を実行できます。 ldapsearchattribute=fooの指定は、ldapsearchfilter="(foo=$username)"と同等です。 どちらのオプションもない場合は、ldapsearchattribute=uidがデフォルトです。

Pgpool-IIが、LDAPクライアントライブラリとしてOpenLDAPを使用するようにコンパイルされていた場合、ldapserverの設定は省略出来ます。 その場合、ホスト名とポート番号のリストは、RFC 2782 DNS SRVレコードを使用して検索されます。 _ldap._tcp.DOMAINという名前が検索され、ldapbasednからDOMAINが抽出されます。

以下に単純バインドLDAP設定の例を示します。

host ... ldap ldapserver=ldap.example.net ldapprefix="cn=" ldapsuffix=", dc=example, dc=net"

データベースのユーザ、fooからデータベースサーバに接続を要求された場合、Pgpool-IIはDN cn=foo, dc=example, dc=netおよびクライアントから提供されたパスワードを用いてLDAPサーバにバインドを試みます。 その接続が成功すればデータベースへのアクセスが認められます。

以下はsearch/bind設定の例です。

host ... ldap ldapserver=ldap.example.net ldapbasedn="dc=example, dc=net" ldapsearchattribute=uid

データベースユーザfooとしてデータベースに接続するとき、Pgpool-IIは(ldapbinddnが指定されていないので)匿名的にバインドを試み、指定されたベースDNの基で(uid=foo)の検索を行います。あるエントリが見つかると、見つかった情報とクライアントから与えられたパスワードを用いて、その結果バインドを試みます。その二番目の接続が成功するとデータベースアクセスが認められます。

URLとして記述した同じsearch/bind設定の例です。

host ... ldap ldapurl="ldap://ldap.example.net/dc=example,dc=net?uid?sub"

LDAPに対し認証をサポートする幾つかの他のソフトウェアは同じURLフォーマットを使用します。 従って、設定をより簡易に共有することができます。

ldapsearchattributeの代わりにldapsearchfilterを使用してユーザーIDまたは電子メールアドレスによる認証を可能にするsearch/bind設定の例です。

host ... ldap ldapserver=ldap.example.net ldapbasedn="dc=example, dc=net" ldapsearchfilter="(|(uid=$username)(mail=$username))"

DNS SRV検出を使用してドメイン名example.netのLDAPサービスのホスト名とポート番号を検索する、search/bind設定の例です。

host ... ldap ldapbasedn="dc=example,dc=net"

ティップ: LDAPはDNの異なる構成要素を区別するため往々にしてコンマとスペースを使用します。 例で示されたように、LDAPオプションを設定する場合、二重引用符で括られたパラメータ値を使用することが必須となることがしばしば必須となります。

注意: LDAPサポートを有効にするには、Pgpool-II"--with-ldap"をつけてconfigureされていなければなりません。

6.2.8. GSSAPI認証

GSSAPIは、RFC 2743で定義されている安全な認証のための業界標準のプロトコルです。 今の所Pgpool-IIはGSSAPIをサポートしていません。 クライアントはGSSAPI認証要求を行わないようにするか、「可能ならばGSSAPI認証を使う」オプションを選択しなければなりません(これはPostgreSQLクライアントのデフォルト設定です)。 後者を選択した場合、Pgpool-IIはGSSAPIを使わない認証方式をクライアントにリクエストし、その結果クライアントはGSSAPIを使わない認証方式を使用するので、通常ユーザはGSSAPI認証方式をPgpool-IIが受け入れないことを意識する必要はありません。