Windows 用 MIT Kerberos における複数のレルムと複数の TGT

Windows 用 MIT Kerberos における複数のレルムと複数の TGT

私のローカル コンピューターは Windows 7 Pro を使用しており、AD サーバーによって管理されるレルム LR に属しています。そのレルムのネットワークに接続した状態でコンピューターにログインします。MIT Kerberos for Windows バージョン 4.0.1 を使用して TGT を表示できます。

外部レルム FR のリソースにアクセスしたいです。LR と FR の間には Kerberos 信頼関係はありませんが、相互の TCP トラフィックは許可されています。KDC (Red Hat IdM / FreeIPA) を使用して FR の TGT を要求し、要求されたときにパスワードを正常に入力します。ここでも、MIT Kerberos for Windows バージョン 4.0.1 を使用して TGT を表示できます。これで、LR から発信されているにもかかわらず、パスワードを要求されることなく SSH 経由で FR のリソースにアクセスできるようになりました。

問題は、FR の TGT を取得すると、LR プリンシパルの TGT が消えてしまうことです。MIT Kerberos では FR TGT のみが表示されます。コンピューターをロックしてからパスワードでロック解除すると、FR TGT は消え、新しい LR TGT に置き換えられます。

MIT Kerberos for Windows では、一度に保存できる TGT は 1 つだけであるようです。各 TGT は、あらゆる目的においてそのレルムで完全に機能します。MIT Kerberos を設定して、レルムごとに 1 つずつ、一度に 2 つの TGT を使用できるようにするにはどうすればよいでしょうか。それぞれが異なる KRB5_CONFIG とローカル キータブを指す複数のクライアント インスタンスで「区画化」することは可能ですか。できない場合、レルム間の信頼関係がない場合でも、クライアント側 Kerberos 5 の代替 Windows 実装はありますか。

追伸 - 信託は欲しくない。信託を得ることができない。

アップデート:問題を混乱させるかもしれないと思ったので、これらの詳細の一部を省略しました。しかし、ブラッドの回答に基づくと、それは正当化されるかもしれません。ほとんどローカル ソフトウェアは、Windows に組み込まれた Kerberos 実装を使用し、常に LR キータブを使用します。

しかし、私のようなパワー ユーザーは、Cygwin で heimdal を使用して FR に SSH 接続します。Cygwin DLL を通過するものはすべて heimdal を使用し、LR TGT は表示されない (少なくともデフォルトでは表示されない) と予想しています。私は明示的に kinit を実行して先に進みます。

難しいのは、Cygwin は使用しないが PuTTY は使用する、私がサポートしなければならない非パワー ユーザーの場合です。PuTTY では、使用する GSSAPI 実装のライブラリ パスと DLL の両方を指定できます。たとえば、私は SSH セッションを、組み込みの Windows DLL ではなく MIT Kerberos DLL を使用するように構成しています。私は、LR TGT の検索を試みない DLL (heimdal など) か、複数のレルムからの複数の TGT を許可する DLL があることを期待していました。MIT Kerberos のような GUI ウィンドウは必要ありませんが、あれば便利です。

答え1

まあ、Windowsではできないとは言いませんが、制限はセッションベースです。 問題は、Windows がセッションごとに 1 つのチケットをキャッシュすることです。コンピューターをロックしてからロック解除すると、別のセッションが開始され、KDC から新しいキーが要求されます。コンピューターからログオフして再度ログオンした場合も同じことが起こります。この方法は、実際にはサーバー セッションのユーザー権限を決定する方法でもあります。つまり、キー/チケットをキャッシュして、開始するすべてのサーバー リソースまたはセッションでパスワードを尋ねる必要がなくなりますが、複数のキー/チケットをキャッシュできるという話は聞いたことも読んだことも調べたこともありません。

さて、質問で示した知識から、おそらくすでにご存知だと思いますが、Windows は TGT が発行されたときに取得したキーを保存し、セッション ベースであるという事実に基づいて、Windows だけでは不可能だと思います。MIT Kerberos for Windows には、1 人のユーザーで 2 つのセッションを開始する方法があるかもしれませんが、それでも、アクセスしているリソースがどのチケット/キー ペアを使用するかをどのように認識するかはわかりません。わかりますか?

Windows が TGT/キー ペアを保存する方法については、こちらを参照してください。

ところで、とても良い質問ですね。

答え2

はい、実用的な解決策を思いつきましたが、もう少し改良が必要なので、すべての環境で機能するとは限りません。

これは以下で動作します:

  1. MIT ケルベロスWindows 4.0.1 および Windows サポート ツール (KSETUP.EXE、KTPASS.EXE) の場合
  2. パテ0.63
  3. Windows 7 SP1

MITのKerberosソースを見ていたら、Windows の README特に興味深いのは、資格情報キャッシュデフォルト値はAPI:、しかし驚いたことに、私のレジストリはMSLSA:その代わり。

私はさまざまな値を試してみましたccnameHKEY_CURRENT_USER\Software\MIT\Kerberos5。試してみましたメモリ:最初は、いくつかの興味深い動作につながりました。PuTTY セッションを開くと、MIT Kerberos チケット マネージャー ウィンドウが復元されてフォアグラウンドになり、資格情報の入力を求められました。すごい! これまではこのようなことは一度もなかったのですが、残念ながら PuTTY はそれを拒否しました。私の場合、FILE:C:\Some\Full\File\Pathうまくいった値は でした。指定されたファイルへのアクセスをセキュリティで保護する方法がよくわからないので、これは読者の課題として残しておきます。同じようにウィンドウがフォアグラウンドになる動作が得られましたが、今回は PuTTY がそれを好みました。チケット マネージャー ウィンドウには、最終的に LR チケットと FR チケットの両方も表示されました。チケットは転送可能であり、複数の Windows ロック/ロック解除に耐えることが証明されました。注記:レジストリ編集の合間にチケットマネージャを完全に終了して再起動してください。ccnameAPI:まだ。

これが何か違いをもたらすかどうかは分かりませんが、私はまたKセットアップこれが機能し始める前に。最初は、パラメータのない KSETUP は LR に関する情報のみを表示していました。ローカル ワークステーションの FR に関する情報をいくつか追加しました。

ksetup /AddKdc FOREIGN.REALM KDC.FOREIGN.REALM
ksetup /AddRealmFlags FOREIGN.REALM TcpSupported Delegate NcSupported

答え3

私には、Windows の Kerberos に実際にバグがあるように見えます。

次のことがわかりました:

KfW 4.0.1ウィンドウで「チケットを取得」オプションを使用すると、Just Works(TM)で「チケットを取得」ボタンを押して、追加ログイン時に取得した元のチケットに戻ります。

KfWウィンドウで「デフォルトにする」オプションをクリックすると、それ以降は「チケットを取得」をクリックするたびに新しいチケットが交換する既知のチケットのリストに別のエントリを追加するのではなく、どのチケットがデフォルトであるかを確認します。その時点でレジストリを確認すると、エントリccname(Toddius の回答にあるように) が追加されたことがわかります。削除そのエントリは、驚くべきことに、複数のチケットを許可する以前の動作を復元します。

答え4

Toddius の回答に続いて、同様の状況にある同僚がいます (Windows 7 Enterprise 64 ビット、AD ドメインに参加、MIT Kerberos for Windows 4.0.1 も実行)。彼の Kerberos チケット マネージャーのコピーでは、1 つのプリンシパル/1 つの TGT しか持つことができませんでした。彼が [チケットの取得] ボタンを使用して別のプリンシパルの TGT を取得するたびに、以前のプリンシパルは消えてしまいます。

私はレビューしましたREADMEレジストリキーのほとんどは期待通りに設定されていましたが、を除外するのためにccnameパス の キーHKEY_CURRENT_USER\Software\MIT\Kerberos5。そのキーは値 に設定されていましたMSLSA:。これを に変更することで修正しましたAPI:。より具体的な手順は次のとおりです。

  1. Kerberos チケット マネージャーを他のすべてのアプリケーションとともに終了します (再起動するため)。
  2. レジストリパスでHKEY_CURRENT_USER\Software\MIT\Kerberos5ccnameキーはAPI:(API、次にコロン) です。
  3. regedit を終了し、再起動します。
  4. 再度ログインした後、Kerberos チケット マネージャーを実行し、[チケットの取得] ボタンを使用して非 AD プリンシパルの TGT を取得します。

上記の手順ですべてが機能し、同僚は複数のプリンシパル/TGT を一度に表示できるようになりました。

ちなみに、MIT Kerberos for Windows には独自のコマンドライン プログラム セット (klist など) が含まれており、これらのプログラムは複数の資格情報キャッシュをサポートしています。私の 64 ビット システムでは、複数"C:\Program Files\MIT\Kerberos\bin\klist.exe" -A"の TGT を取得した後に実行すると、MSLSA キャッシュに Active Directory プリンシパルが表示され、追加のプリンシパルごとに 1 つの API キャッシュがあります。

追伸:これはこのサイトへの私の最初の投稿なので、Toddius の回答にコメントとして追加できませんでした。申し訳ありません!

関連情報