web-dev-qa-db-ja.com

postgresとkerberos(gss)を連携させることができない

GSSAPIを介してpostgresとkerberosを連携させようとしています。この時点で問題があります。私が両方のテクノロジーの初心者であることは役に立ちません。私はpostgresとkerberosの両方を期待どおりに別々に動作させており、両方を使用しています(ただし、一緒には使用していません)。

私はここに指示を見つけました: postressql-and-kerberos 、そしてそれをより詳細に説明するものは実際には見つかりませんでした。

私はpostgresql.confファイルに次の2行を設定しました。

krb_server_keyfile = '/var/lib/pgsql/data/krb5.keytab' 
krb_srvname = 'postgres'

この情報を使用して「kinit -kt」を実行することにより、これが正しいことを確認しました。 pg_hba.confファイルに次の2つのエントリを追加しました。

# TYPE  DATABASE  USER    CIDR-ADDRESS   METHOD
Host    all       all     10.0.1.0/24    gss include_realm=0 krb_realm=HOTDOG.REALM.COM

サーバーを再起動して、リモートクライアント経由で接続しようとしています...

kinit freddyboy
<enter password>

これは成功し、「klist」を実行すると詳細を確認できます。

次に、次の方法でpostgresに接続しようとします。

psql -l -h postgresserver.hotdog.com

次のようなエラーが発生します。

pgql: GSSAPI continuation error:  Unspecified GSS failure.  Minor code may provide more information
GSSAPI continuation error: Server not found in Kerberos database

サーバーログファイル(postgresql-Tue.log)を見ると、「致命的:ユーザー "fred"のGSSAPI認証に失敗しました。

ええと、「fred」は私のLinuxログオンです...「freddyboy」は私のユーザープリンシパルです。そのため、postgresqlクライアントがkerberos認証を適切に送信していないように見えます。ユーザーを送信しようとしました:

 psql -l -h postgresserver.hotdog.com -U freddyboy

ログファイルに「ユーザー "freddyboy"のGSSAPI認証が失敗しました」と表示されますが、まだ失敗しています。いくつかのデータベースを所有する 'freddyboy'のpostgresユーザーがいます。GSSAPIなしでローカルにログインできますが、表示されませんリモートで安全に取得します。

クライアントのどこにもGSSAPIを使用するよう指定したことがないのではないかと疑っています。これは単なるクライアントであるため、confファイルは存在しません...それが問題になる可能性があると思います。

もう1つのポイントは、KerberosサーバーはActiveDirectoryです。プリンシパルは大文字でなければならないといういくつかの兆候を見てきました。サービスプリンシパル(「POSTGRES」)とユーザープリンシパル「FREDDYBOY」を作成しようとしましたが、それでも問題はありません。

どんな援助も大歓迎です。クライアントとサーバーでPostgres8.4.13を使用しています。

フレッド

4
Wanderer

このエラーは、Postgresサーバーのサービスプリンシパルを作成しなかったことを示しています。これは、サーバー自体のkrb5.keytabファイルに保存されているプリンシパルです。

これを行う方法は、PostgreSQLのドキュメント 20.3.3。GSSAPI認証 メソッドにあります。

このプリンシパルを適切に作成した場合、DNS反転が正しく機能していない可能性があります。 PostgresサーバーのIPアドレスでHostを実行すると、postgresserver.hotdog.comが返されるはずです。そうしないと、Kerberos認証が機能しません。

1