web-dev-qa-db-ja.com

ApacheおよびKerberosの問題を伴うSSO

ローカルドメインにログインしているユーザーが認識されてすぐにログインできるように、Kerberosを使用してApacheWebサーバーにSSOを設定しようとしています。

私は このガイド の文字に従いましたが、すべてがセットアップされたら、ユーザー/パスワードのプロンプトを取り除くことができません。

Ubuntu 8.04を使用しており、Apache用のmod_auth_kerb5.4をインストールしています。

私の/etc/krb5.conf:

[libdefaults]
  default_realm = COMPANY.LOCAL
[domain_realm]
  .company.local = COMPANY.LOCAL
  company.local = COMPANY.LOCAL
[realms]
  COMPANY.LOCAL = {
    default_domain = company.local
    kdc = DC01.COMPANY.LOCAL:88
    admin_server = DC01.COMPANY.LOCAL
  }

私のApache設定:

<Location />
AuthType Kerberos
AuthName "server login"
KrbMethodNegotiate On
KrbMethodK5Passwd On
KrbAuthRealms COMPANY.LOCAL
KrbServiceName HTTP
Krb5KeyTab /etc/Apache2/httpd.keytab
KrbVerifyKDC off
KrbLocalUserMapping on
require valid-user
</Location>

Keytabは、管理者が以下を使用して生成しました

ktpass -princ HTTP/[email protected] -mapuser hostname -crypto rc4-hmac-nt -ptype KRB5_NT_SRV_HST -pass CHOOSEPASSWORD -out httpd.keytab

関連するchmod/chownコマンドを発行しました。サーバーでkinit HTTP/[email protected]を正常に発行してログインしました。

kvno/klist出力:

# kvno HTTP/[email protected]
HTTP/[email protected]: kvno = 8
# klist -ke httpd.keytab
Keytab name: FILE:httpd.keytab
KVNO Principal
---- --------------------------------------------------------------------------
   8 HTTP/[email protected] (ArcFour with HMAC/md5)

プロンプトを取り除くために資格情報を渡すようにブラウザーを構成しましたが(ffとつまりwindows7の両方を試しました)、機能していません。

Apacheエラーログは次のように言っています:

[error] [client 10.0.0.1] gss_accept_sec_context() failed: Unspecified GSS failure.  Minor code may provide more information (, Key version number for principal in key table is incorrect)
[error] [client 10.0.0.1] gss_accept_sec_context() failed: Invalid token was supplied (, No error)

これを機能させるために何が必要かについて誰かが何か提案がありますか?

3
tbh1

エラーを正しく解釈している場合、私はthinkです。これは、古いバージョンのキーが/etc/Apache2/httpd.keytabにあることを意味します。 kadminを介してKerberosプリンシパルのキーが変更されるたびに、バージョン番号が増分され、そのキーの古いバージョンは無効になります。

kinitコマンド/ログインは、/ etc/krb5.keytab内のホストキーが完全であることを示すだけです。これは、必ずしもhttpd.keytab内のkvnoが有効であることを意味するわけではなく、KDCと照合する必要があります。

KDCに対してkadminセッションを開始し、getprinc <principalname>を呼び出します。 「Key:vno」を探します。これにより、KDCがバージョン番号と見なすものがわかります。 KDCに最新バージョンのキーがある場合は、このキーを問題のホストに再エクスポートする必要があります。 /etc/krb5.keytabにあるすべてのキーの有効性を確認して、他に時限爆弾が潜んでいないことを確認します。

うまくいけば、これが役立ちます!

1
Andrew B