会社の 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";
それで、解決策は何でしょうか?