web-dev-qa-db-ja.com

Apache、SSSD、FreeIPAを使用したKerberos委任

適切な方法でそれを解決しようとしているのかわからないので、私の本当の目標を説明することから始めましょう=)

WebアプリケーションにKerberos資格情報を取得させようとしています代理でログインするユーザーの。Webサーバーは私のLinuxドメインの一部です(FreeIPA/RedHat IdMに登録されています)。クライアントはexternalですが、ユーザーは私のドメインに存在します。だから私が達成したいのはこれです:

  1. ユーザーは私のWebアプリを参照し、ユーザー名/パスワードを(カスタムログインフォームで)入力します
  2. WebappはFreeIPAに対してユーザー名/パスワードを検証します
  3. Webアプリはログインしたユーザーに代わってKerberos資格情報を取得するため、(たとえば)Webアプリはユーザーのボールトを表示したり、FreeIPAでいくつかの特権タスクを実行したりできます(これにはKerberos認証が必要です)。

これまで、mod_intercept_form_submitで遊んでいましたが、pam_sss.so(PAM + SSSD)を使用して、FreeIPAに対してユーザーを認証することができました。これは問題なく機能しましたが、ユーザー用に取得したTGTが見つからなかったため、項目3を実行できませんでした。

または、ApacheでGSSAPI認証を使用することもできますが、クライアントがドメインに登録されていないため、システムログインフォームが表示されます(理想的には、Webアプリのカスタムログインフォームを使用したい)。

あるいは、webappがログインフォームからパスワードを率直に取得し、それを使用してWebサーバー上で直接kinit <username>を実行することもできると思います。

あなたの推奨する方法は何ですか?何かエレガントなものがあるに違いないと思うので...例: PAMがKerberosTGTを取得し、ログイン後にWebアプリがアクセスできるようになれば、それは素晴らしいことです...

1
Dmitry Perets

その後のVaultまたはFreeIPAに対する操作のために、WebアプリケーションにTGTが本当に必要かどうか疑問に思います。 Kerberosサービスチケットで十分なようです。

そのためには、S4U2ProxyとS4U2Selfを使用するのが最善のアプローチかもしれません。 mod_auth_gssapiモジュールは、GssapiUseS4U2ProxyおよびGssapiImpersonateディレクティブを介してそれらをサポートします。実際、FreeIPAのWebUIは、LDAPバックエンドに対して動作するときにまったく同じメカニズムを使用しています。

0
Jan Pazdziora