39

過去数年間、ケルベロス認証のためにHeimdal / MIT Gssapiと「散発的に」作業する必要がありました。Linux ボックスで実行される Web サービスとして使用されるアプリケーションを構築し、Windows や Linux デスクトップおよびワークステーションで実行されるブラウザーなどのクライアント アプリケーションを提供する必要がありました。確かに、飼いならすのが最も簡単な獣ではありません。最終的に、自分の仕事を要約すると、多次元での課題が原因で困難が生じたことを記録することができました。gssapi プログラミングを始めるのは、ドキュメンテーションが貧弱で、チュートリアルが実質的に存在しないという理由だけで、本当に困難です。グーグル検索は、ほとんどの場合、ケルベロスとは何かについての理論的な議論につながるか、特定のセマンティックの問題以外はすべて知っているという前提で書かれたコンテンツにつながります。

これまでこのような wiki を実際に作成したことはありませんでした。また、私は GSSAPI や Kerberos の権威ではありません。親切にお願いしますが、それ以上に貢献して私の間違いを修正してください。サイト編集者の皆さん、魔法をかけてくれることを期待しています ;)

プロジェクトを成功させるには、次の 3 つのことを正しく行う必要があります。

  1. テスト環境のセットアップ
  2. ライブラリのセットアップ
  3. あなたのコード

すでに述べたように、そのようなプロジェクトは獣です。3 つすべてが同じページにまとめられていないからです。

では、最初から始めましょう。

初心者にとって避けられない理論 GSSAPI は、クライアント アプリケーションが、サーバーがユーザーを正式に識別するための資格情報を提供するのに役立ちます。サーバーアプリケーションは、必要に応じて、ユーザーの要求に応じて、提供される応答を調整できるため、非常に便利です。したがって、当然のことながら、クライアント アプリケーションとサーバー アプリケーションの両方を kerberized にするか、kerberos 対応にする必要があります。

Kerberos ベースの認証では、クライアント アプリケーションとサーバー アプリケーションの両方が Kerberos レルムのメンバーである必要があります。KDC (Kerberos ドメイン コントローラー) は、レルムを支配する指定機関です。Microsoft の AD サーバーは、KDC の最も一般的な経験のある例の 1 つですが、もちろん *NIX ベースの KDC を使用することもできます。しかし、確かに KDC がなければ、Kerberos ビジネスはまったくあり得ません。ドメインに参加しているデスクトップ、サーバー、およびワークステーションは、すべてがドメインに参加している限り、お互いを識別します。

最初の実験では、クライアント アプリケーションとサーバー アプリケーションを同じレルムにセットアップします。ただし、Kerberos 認証は、これらのレルムの KDC 間に信頼を作成するか、相互に信頼していない異なる KDC からのキータブをマージすることによって、レルム全体で使用することもできます。このような異なる複雑なシナリオに対応するためにコードを変更する必要はありません。

Kerberos 認証は、基本的に「チケット (またはトークン)」を介して機能します。メンバーがレルムに参加すると、KDC は各メンバーに「トークンを付与」します。これらのトークンは一意です。時間と FQDN は、これらのチケットにとって重要な要素です。

コードの最初の行について考える前に、次の 2 つが正しいことを確認してください。

落とし穴 #1開発およびテスト環境をセットアップするときは、すべてがテストされ、FQDN としてアドレス指定されていることを確認してください。たとえば、接続を確認する場合は、IP ではなく FQDN を使用して ping を実行します。したがって、言うまでもなく、それらは必然的に同じ DNS サービス構成を持っている必要があります。

落とし穴 #2すべてのホスト システム (KDC、クライアント ソフトウェア、サーバー ソフトウェアを実行している) が同じタイム サーバーを持っていることを確認します。時間の同期は忘れるものであり、多くの頭を悩ませたり頭をぶつけたりした後、間違っていることに気付きます!

クライアント アプリケーションとサーバー アプリケーションの両方に kerberos キータブが必要です。したがって、アプリケーションを *NIX ホストで実行し、Microsoft ドメインの一部にする場合は、gss プログラミングの残りの準備手順を確認する前に、kerberos キータブを生成する必要があります。

Kerberos 5 (krb5 1.0) の相互運用性に関するステップバイステップ ガイドは、絶対に読む必要があります。

GSS-API プログラミング ガイドは優れたブックマークです。

*NIX ディストリビューションに応じて、コードをビルドするためのヘッダーとライブラリをインストールできます。ただし、ソースをダウンロードして自分でビルドすることをお勧めします。はい、一度に正しく理解できないかもしれませんが、苦労する価値は確かにあります。

落とし穴 #3アプリケーションが Kerberos 対応環境で実行されていることを確認してください。私はこれを本当に難しい方法で学びましたが、おそらく私はそれほど頭が良くないからです. gssapi プログラミングの苦労の初期段階で、アプリケーションを kerberos 対応にするためには kerberos キータブが絶対に必要であることを発見しました。しかし、これらのキータブをアプリケーションにロードする方法については何も見つかりませんでした。あなたが理由を知っている?!!そのようなAPIは存在しないため!!! 理由: アプリケーションは、キータブを認識する環境で実行されます。わかりました、これを簡単にしましょう: GSSAPI / Kerberos を実行することになっているアプリケーションは、キータブKRB5_KTNAMEを保存したパスに環境変数を設定した後に実行する必要があります。したがって、次のようなことを行います。

export KRB5_KTNAME=<path/to/your/keytab>

または、gssapi を使用するコードの最初の行が実行される前に、アプリケーションで十分にsetenv設定するために使用します。KRB5_KTNAME

これで、アプリケーションのコードで必要なことを行う準備が整いました。

アプリケーションを作成してテストするために、アプリケーション開発者がレビューしなければならない側面が他にもかなりあることは理解しています。重要な環境変数をいくつか知っています。

誰かがそれについてもう少し光を当てることができますか?

4

0 に答える 0