web-dev-qa-db-ja.com

マシンアカウントを使用したKerberosを介したApacheSSO

Ubuntu 12.04でApacheを取得して、Windows 2008 ActiveDirectoryサーバーへのKerberosSSOを介してユーザーを認証しようとしています。これが私の状況を変えるいくつかのことです:

  1. Windows Serverへの管理アクセス権がありません(アクセス権もありません)。また、自分に代わってサーバーに変更を加えることもできません。

  2. PBISopenを使用してUbuntuサーバーをActiveDirectoryに参加させました。

  3. ユーザーは、AD資格情報を使用してUbuntuサーバーにログインできます。 kinitは、各ユーザーに対しても正常に機能します。

  4. ADを変更できないため(新しいマシンとSPNを追加する場合を除く)、UbuntuでApacheのサービスアカウントを追加できません。

  5. サービスアカウントを追加できないため、マシンのキータブ(/etc/krb5.keytab)を使用するか、少なくとも別のキータブでマシンのパスワードを使用する必要があります。現在、私はマシンのキータブを使用していて、Apacheに読み取り専用アクセスを許可しています(悪い考えです、私は知っています)。

  6. ネット広告keytabadd HTTP-Uを使用してSPNをすでに追加しました

  7. Ubuntu 12.04を使用しているため、「net ads keytab add」中に追加されるエンコードタイプは、arcfour-hmac、des-cbc-crc、およびdes-cbc-md5のみです。 PBISは、ドメインに参加するときにAESエンコーディングタイプをホストおよびcifsプリンシパルに追加しますが、これを行うための「net adskeytabadd」をまだ取得していません。

  8. 上記の#1のため、ktpassとsetspnは問題外です。

  9. (Kerberos SSO用に)構成し、両方のIE 8Firefoxをテストしました。

  10. Apacheサイトの構成で次の構成を使用しています。

    <Location /secured>
    AuthType Kerberos
    AuthName "Kerberos Login"
    KrbMethodNegotiate On
    KrbMethodK5Passwd On
    KrbAuthRealms DOMAIN.COM
    Krb5KeyTab /etc/krb5.keytab
    KrbLocalUserMapping On
    require valid-user
    </Location>
    

Firefoxが接続を試みると、Apacheのerror.log(LogLevelデバッグ)で次の情報が得られます。

[Wed Oct 23 13:48:31 2013] [debug] src/mod_auth_kerb.c(1628): [client 192.168.0.2] kerb_authenticate_user entered with user (NULL) and auth_type Kerberos
[Wed Oct 23 13:48:31 2013] [debug] mod_deflate.c(615): [client 192.168.0.2] Zlib: Compressed 477 to 322 : URL /secured
[Wed Oct 23 13:48:37 2013] [debug] src/mod_auth_kerb.c(1628): [client 192.168.0.2] kerb_authenticate_user entered with user (NULL) and auth_type Kerberos
[Wed Oct 23 13:48:37 2013] [debug] src/mod_auth_kerb.c(994): [client 192.168.0.2] Using HTTP/[email protected] as server principal for password verification
[Wed Oct 23 13:48:37 2013] [debug] src/mod_auth_kerb.c(698): [client 192.168.0.2] Trying to get TGT for user [email protected]
[Wed Oct 23 13:48:37 2013] [debug] src/mod_auth_kerb.c(609): [client 192.168.0.2] Trying to verify authenticity of KDC using principal HTTP/[email protected]
[Wed Oct 23 13:48:37 2013] [debug] src/mod_auth_kerb.c(652): [client 192.168.0.2] krb5_rd_req() failed when verifying KDC
[Wed Oct 23 13:48:37 2013] [error] [client 192.168.0.2] failed to verify krb5 credentials: Decrypt integrity check failed
[Wed Oct 23 13:48:37 2013] [debug] src/mod_auth_kerb.c(1073): [client 192.168.0.2] kerb_authenticate_user_krb5pwd ret=401 user=(NULL) authtype=(NULL)
[Wed Oct 23 13:48:37 2013] [debug] mod_deflate.c(615): [client 192.168.0.2] Zlib: Compressed 477 to 322 : URL /secured

IE 8が接続を試みると、次のようになります。

[Wed Oct 23 14:03:30 2013] [debug] src/mod_auth_kerb.c(1628): [client 192.168.0.2] kerb_authenticate_user entered with user (NULL) and auth_type Kerberos
[Wed Oct 23 14:03:30 2013] [debug] mod_deflate.c(615): [client 192.168.0.2] Zlib: Compressed 477 to 322 : URL /secured
[Wed Oct 23 14:03:30 2013] [debug] src/mod_auth_kerb.c(1628): [client 192.168.0.2] kerb_authenticate_user entered with user (NULL) and auth_type Kerberos
[Wed Oct 23 14:03:30 2013] [debug] src/mod_auth_kerb.c(1240): [client 192.168.0.2] Acquiring creds for HTTP@Apache_server
[Wed Oct 23 14:03:30 2013] [debug] src/mod_auth_kerb.c(1385): [client 192.168.0.2] Verifying client data using KRB5 GSS-API
[Wed Oct 23 14:03:30 2013] [debug] src/mod_auth_kerb.c(1401): [client 192.168.0.2] Client didn't delegate us their credential
[Wed Oct 23 14:03:30 2013] [debug] src/mod_auth_kerb.c(1420): [client 192.168.0.2] GSS-API token of length 9 bytes will be sent back
[Wed Oct 23 14:03:30 2013] [debug] src/mod_auth_kerb.c(1101): [client 192.168.0.2] GSS-API major_status:000d0000, minor_status:000186a5
[Wed Oct 23 14:03:30 2013] [error] [client 192.168.0.2] gss_accept_sec_context() failed: Unspecified GSS failure.  Minor code may provide more information (, )
[Wed Oct 23 14:03:30 2013] [debug] mod_deflate.c(615): [client 192.168.0.2] Zlib: Compressed 477 to 322 : URL /secured

追加のログファイルと構成ファイルが必要な場合はお知らせください。最初の質問は十分に長くなっています。

2
watkipet

ApacheでKerberos委任を設定した経験はありませんが、Apacheで定義されたサービス名がkeytabファイルのサービス名と一致する必要があると確信しています。

次のようにサービス名を明示的に設定します。

<Location /secured>
AuthType Kerberos
AuthName "Kerberos Login"
KrbMethodNegotiate On
KrbMethodK5Passwd On
KrbAuthRealms DOMAIN.COM
Krb5KeyTab /etc/krb5.keytab
KrbLocalUserMapping On
KrbServiceName HTTP/Apache_server.DOMAIN.com
require valid-user
</Location>

ADのマシンアカウントにはHTTP/Apache_server.DOMAIN.com SPNを設定する必要がありますが、すでにこれを設定しているようです

1

上記の答えはそれに関する限り正しいですが、残念ながら、キータブにあるサービス名を使用する必要があります

    Sudo ktutil list 

AD SPNは、私が理解している限り、クライアントがHTTP/Apache_server.comを要求すると、実際にはHost /Apache_server.comのKerberosサービスチケットを取得するようなエイリアスです。

UNIX側のKerberosはこれらのエイリアスについて何も知らないため、キータブの内容を明示的に指定する必要があります。

役立つかもしれない1つのことは、Anyキーワードの使用をサポートするmod_auth_kerbの最新バージョンを入手することです。

KrbServiceName Any

これは、モジュールがキータブを検索し、見つかったすべてのキーを、そのうちの1つが機能するまで使用することを意味します。