LDAP の構成で発生する問題とそれらの解決方法について説明します。
Solaris LDAP クライアントのバックエンドは、ホスト検索時に、gethostbyname(3N) や getipnodebyname(3N) によって返されるホスト名と同様に、完全指定ホスト名を返すように設計されています。ディレクトリに格納されている名前が完全指定されている場合 (つまり 1 つ以上のドットが含まれている場合)、クライアントはその名前をそのまま返します。たとえば、格納されている名前が hostB.eng であれば、返される名前も hostB.eng です。
LDAP ディレクトリに格納されている名前が完全指定されていない場合 (ドットが 1 つも含まれない場合)、クライアントのバックエンドは、その名前にドメイン部分を追加します。たとえば、格納されている名前が hostA であれば、返される名前は hostA.domainname となります。
DNS ドメイン名が LDAP ドメイン名と異なる場合は、nsswitch.conf ファイルを変更してください。ホストエントリ行に dns を指定するか、ldap の前に dns を追加します。
メールドメイン (通常は DNS ドメイン) が LDAP ドメインと異なると、メールの転送に失敗することがあります。sendmail(1M) は、メールドメインを、gethostname(3N) が返すホスト名のドメイン部分から取り出します。つまり、返されるアドレスは LDAP ドメインになります。メール/DNS ドメインは LDAP ドメインとは異なるため、外部ユーザーはこのようなメールに返信できません。この問題を解決するには、nsswitch.conf ファイル内の当該ホストエントリを dns に変更するか、ldap の前に dns を追加します。
LDAP クライアントは、ログイン時のユーザー認証に PAM(3) モジュールを使用します。UNIX 標準の PAM モジュールでは、パスワードをサーバーから読み込み、クライアント側で検査します。これは、次のいずれかの理由で失敗する場合があります。
ldap が、/etc/nsswitch.conf ファイル内に情報源として存在しない。
サーバー上のパスワードをプロキシエージェントから読むことができないようになっている。プロキシエージェントが比較のためにパスワードをクライアントに返すので、少なくともプロキシエージェントはパスワードを読めなければならない。
プロキシエージェントの設定が間違っていると、認証を実行できない。
当該エントリに shadowAccount オブジェクトクラスが定義されていない。
LDAP データベースは、インデックスを使用することによって検索パフォーマンスが向上します。インデックスが正しく作成されていない場合、大幅にパフォーマンスが低下することがあります。このマニュアルの第 2 章「サーバーの設定」に、インデックス付けが必要な一連の属性をまとめてあります。また、独自のインデックスを追加して、パフォーマンスの向上を図ることができます。
-P プロファイルオプションを使用しているときに、ldapclient がクライアントの初期化に失敗したと考えられます。次のいずれかが原因である可能性があります。
ldap_cachemgr が動作していることを確認する。ps -ef |grep ldap とすれば、確認できます。
ldapclient -l を実行して、LDAP クライアントのキャッシュファイルの内容を検査する。
構成ファイルや資格ファイルは必ずしも ASCII 形式とは限らないので、これらを直接表示しないでください。
指定されたクライアントドメインのエントリポイントを表す nisDomain 属性が DIT (ディレクトリ情報ツリー) 内に設定されていない。
サーバー上で仮想リスト表示のインデックス付けが正しく行われていない。
サーバー上でアクセス制御情報が正しく設定されていないため、anonymous (匿名) ユーザーが LDAP データベースを検索できない。
ldapclient コマンドに渡されたサーバーアドレスが間違っている。ldapsearch(1) を使用してサーバーのアドレスを確認します。
ldapclient コマンドに渡されたプロファイル名が間違っている。ldapsearch(1) を使用して、DIT 内のプロファイル名を確認します。
クライアントのネットワークインタフェースに対して snoop(1M) を実行して、外向きのトラフィックを検査し、どのサーバーとやり取りしているかを確認します。