2

会社の OpenLDAP サーバーを管理するための Web フロントエンドを作成しています。Perl、Apache2、OpenLDAP、Cyrus SASL を使用しています。

問題は、Kerberos 資格情報が転送されず、Apache エラー ログに次のように表示されるため、Web インターフェイスを使用するときに Kerberos 検証済みユーザーとして OpenLDAP に認証できないことです。

Credentials cache file '/tmp/krb5cc_33' not found

ここで、「33」は Apache の uidNumber です。これは理にかなっていますが、問題は解決しません。皮肉なことに、mod_auth_kerb がユーザー名とパスワードを要求し、認証し、チケットをキャッシュし、すべてが機能するため、すべてがレルムの外から機能します。

mod_auth_kerb を使用して Apache2 への認証を行っていますが、正常に動作します。パスワードは要求されず、保護されたページが認証されたユーザーに表示されます (それ以外の場合は拒否されます)。構成の関連フラグメント:

<Directory "/usr/lib/cgi-bin">
            AllowOverride None
            Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
            Order allow,deny
            Allow from all 
            AuthType Kerberos
            AuthName "Kerberos Login"
            KrbAuthRealms EXAMPLE.COM
            Krb5Keytab /etc/apache2/HTTP.keytab
            KrbServiceName HTTP
            KrbSaveCredentials on
            require valid-user
    </Directory>

Kerberos/GSSAPI/SASL 認証も正常に機能するため、コマンド ラインから実行すると次のコードが OK になります。

1 #!perl
  2 use strict;
  3 use warnings;
  4 use Net::LDAP;
  5 use Authen::SASL;
  6 
  7 my $l = Net::LDAP->new( 'ldap.example.com', onerror=>'die', );
  8 my $sasl = Authen::SASL->new(mechanism=>'GSSAPI');
  9 $l->bind( sasl=>$sasl );
 10 
 11 print "OK\n";

それで、解決策は何でしょうか?

4

1 に答える 1

0

デフォルトでは、Web ブラウザは Kerberos チケットを転送しません。(ありがたいことに! ブラウザはチケットを要求したローカル レルム内の任意の Web サイトにチケットを配布するだけなので、セキュリティ上の大きな問題になります。)

残念ながら、ブラウザにそうさせるには、いくらかの努力が必要です。たとえば、Firefox では、about:config に移動し、network.negotiate-auth.delegation-uris をカスタマイズして、チケットを委任する URL を追加する必要があります。(Web サイトを信頼済みドメインの一部としてマークするために、IE にも同様の手順があると思います。)

ブラウザー環境を十分に制御できない限り、これは通常行き止まりです。ほとんどの人は、Web アプリケーションを (ユーザーとしてではなく) それ自体として認証し、一般的な読み取りアクセスを許可するだけです。または、資格情報の委任をサポートする、より包括的なサイト全体の Web 認証システムを使用することもできますが、それはあなたの状況ではやり過ぎかもしれません。

これをサポートする 2 つの実装は次のとおりです。

これらはどちらも、インフラストラクチャのセットアップを必要とするクライアント/サーバー エンタープライズ Web 認証システムです。

于 2013-03-17T09:58:10.233 に答える