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を使用しています。
フレッド
このエラーは、Postgresサーバーのサービスプリンシパルを作成しなかったことを示しています。これは、サーバー自体のkrb5.keytab
ファイルに保存されているプリンシパルです。
これを行う方法は、PostgreSQLのドキュメント 20.3.3。GSSAPI認証 メソッドにあります。
このプリンシパルを適切に作成した場合、DNS反転が正しく機能していない可能性があります。 PostgresサーバーのIPアドレスでHost
を実行すると、postgresserver.hotdog.com
が返されるはずです。そうしないと、Kerberos認証が機能しません。