この章では、LDAP の構成で発生する問題とその解決方法を示します。
以降の節では、LDAP クライアント環境の状態判定に使用するさまざまなコマンドを紹介します。 使用可能なオプションの詳細については、マニュアルページも参照してください。
ldap_cachemgr デーモンは、常に実行中で適切に機能している必要があります。 このデーモンが機能していない場合、システムは動作しません。 ldap_cachemgr の動作を確認するには、次の 2 つの方法があります。
ps コマンドを ef オプションを付けて使用する
# ps -ef | grep ldap_cachemgr |
-g オプションを ldap_cachemgr に渡す
この操作により、問題の診断に役立つ状態情報がダンプされます。
# /usr/lib/ldap/ldap_cachemgr -g cachemgr configuration: server debug level 0 server log file "/var/ldap/cachemgr.log" number of calls to ldapcachemgr 19 cachemgr cache data statistics: Configuration refresh information: Previous refresh time: 2001/11/16 18:33:28 Next refresh time: 2001/11/16 18:43:28 Server information: Previous refresh time: 2001/11/16 18:33:28 Next refresh time: 2001/11/16 18:36:08 server: 192.168.0.0, status: UP server: 192.168.0.1, status: ERROR error message: Can't connect to the LDAP server Cache data information: Maximum cache entries: 256 Number of cache entries: 2 |
スーパーユーザーになり、ldapclient を -l オプションを付けて実行します。
# ldapclient -l NS_LDAP_FILE_VERSION= 2.0 NS_LDAP_BINDDN= cn=proxyagent,ou=profile,dc=west,dc=example,dc=com NS_LDAP_BINDPASSWD= {NS1}4a3788e8c053424f NS_LDAP_SERVERS= 192.168.0.0, 192.168.0.1 NS_LDAP_SEARCH_BASEDN= dc=west,dc=example,dc=com NS_LDAP_AUTH= simple NS_LDAP_SEARCH_REF= TRUE NS_LDAP_SEARCH_SCOPE= one NS_LDAP_SEARCH_TIME= 30 NS_LDAP_SERVER_PREF= 192.168.0.0 NS_LDAP_PROFILE= pit1 NS_LDAP_CREDENTIAL_LEVEL= proxy NS_LDAP_SERVICE_SEARCH_DESC= passwd:ou=people,?sub NS_LDAP_SERVICE_SEARCH_DESC= group:ou=group,dc=west,dc=example,dc=com?one NS_LDAP_BIND_TIME= 5 |
/var/ldap ファイルは現在 ASCII 形式ですが、 バイナリに変更される可能性があるため、このファイルを連結すると問題が発生する可能性があります。 この情報へのアクセスにサポートされている方式は、ldapclient list です。
クライアントが LDAP サーバーに対して通信を行なっていることを確認する最善の方法は、ldaplist コマンドを使用することです。 引数を付けずに ldaplist だけを指定して実行すると、サーバー上のすべてのコンテナがダンプされます。 この方法はコンテナが存在している限り可能で、コンテナを生成する必要がありません。
最初の手順が成功したら、ldaplist passwd username または ldaplist hosts hostname を実行できますが、大量のデータが含まれている場合には、生成量の少ないサービスを選ぶか、head や more コマンドを使用してデータをパイプ処理することもできます。
前述のコマンドの大半は、LDAP クライアントを作成済みであることが前提です。 クライアントを作成していない状態でサーバー上のデータをチェックする場合は、ldapsearch コマンドを使用します。 次の例では、すべてのコンテナをリスト表示します。
# ldapsearch -h server1 -b "dc=west,dc=example,dc=com" -s one "objectclass=*" |
以降の節では、LDAP の構成で発生する問題とそれらの解決方法について説明します。
Solaris オペレーティング環境 LDAP クライアントのバックエンドは、ホストの検索で、gethostbyname() や getaddrinfo() の場合と同様、完全指定ホスト名を返します。 格納済みの名前が指定されている (1 つ以上のドットが含まれている) 場合、クライアントはその名前をそのまま返します。 たとえば、格納されている名前が hostB.eng であれば、返される名前も hostB.eng です。
LDAP ディレクトリに格納された名前が指定されていない (ドットが含まれない) 場合、クライアントのバックエンドは、その名前にドメイン部分を追加します。 たとえば、格納されている名前が hostA であれば、返される名前は hostA.domainname となります。
DNS ドメイン名が LDAP ドメイン名とは異なる場合、格納されたホスト名が完全指定でない限り LDAP ネームサービスをホスト名に対して使用することはできません。
LDAP クライアントは、ログイン時に PAM モジュールを使用してユーザーを 認証します。 UNIX 標準の PAM モジュールでは、パスワードをサーバーから読み込みクライアント側で検査します。 この動作は、次のいずれかの理由で失敗する場合があります。
/etc/nsswitch.conf ファイル内の passwd サービスが ldap を使用しない
プロキシエージェントが、サーバーリスト上のユーザーの userPassword 属性を読み取ることができない。 プロキシエージェントが比較のためにパスワードをクライアントに返すので、少なくともプロキシエージェントはパスワードを読めなければならない。 pam_ldap に関しては、パスワードへの読み取りアクセスを必要としない
プロキシエージェントが適切なパスワードを保持していない
該当するエントリに shadowAccount オブジェクトクラスが定義されていない
パスワードが定義されていない
ldapaddent を使用する場合、-p オプションを使用してパスワードをユーザーエントリに確実に追加する必要があります。 ldapaddent を -p オプションなしで実行した場合、ldapaddent を使用して /etc/shadow ファイルを追加しない限り、ユーザーのパスワードはディレクトリに格納されません。
LDAP サーバーに到達することができない
サーバーの状態を確認します。
# /usr/lib/ldap/ldap_cachemgr -g |
pam.conf の構成が不正である
LDAP 名前空間でユーザーが定義されていない
pam_unix で NS_LDAP_CREDENTIAL_LEVEL が anonymous に設定されており、匿名ユーザーが userPassword を使用できない
パスワードが crypt 形式で格納されていない
pam_ldap が構成され、パスワード管理をサポートしている場合は、以下のいずれかの原因でログインに失敗します。
ユーザーのパスワード期限が切れている
ログインを何回も行ったために、ユーザーアカウントがロックされる
管理者がユーザーアカウントを非アクティブにした
LDAP データベースは、検索パフォーマンス向上にインデックスを使用します。 インデックスが正しく作成されていない場合、大幅にパフォーマンスが低下することがあります。 このマニュアルには、インデックスを作成する必要のある共通の属性セットを記述しています。 また、独自のインデックスを追加して、パフォーマンスの向上を図ることができます。
-p オプションを使用しているときに、ldapclient がクライアントの初期化に失敗しました。 考えられる失敗の原因は以下のとおりです。
コマンド行で不正なドメイン名が指定された
指定されたクライアントドメインのエントリポイントを表す nisDomain 属性が DIT (ディレクトリ情報ツリー) 内に設定されていない
アクセス制御情報がサーバー上で適正に設定されていないため、LDAP データベース内の匿名検索が許可されない
ldapclient コマンドに渡されたサーバーアドレスが間違っている。 ldapsearch を使用してサーバーのアドレスを確認する
ldapclient コマンドに渡されたプロファイル名が間違っている。 ldapsearch を使用して、DIT 内のプロファイル名を確認する
クライアントのネットワークインタフェースに対して snoop を実行して外向きのトラフィックを検査して、どのサーバーにアクセスしているかを確認する
ldap_cachemgr を -g オプションを付けて使用すると、現在のクライアント構成および統計を表示できるため、デバッグするのに便利です。 たとえば、次のように指定します。
# ldap_cachemgr -g |
この結果、すでに説明したように、すべての LDAP サーバーの状態を含む現在のクライアント構成および統計が標準出力に出力されます。 このコマンドを実行するのに、スーパーユーザーになる必要はありません。
ldapclient コマンドがハングアップした場合、Ctrl-C キーを押すと以前の環境を復元した後で終了します。 この状況が発生する場合、サーバーが動作していることをサーバー管理者に確認してください。
プロファイルまたはコマンド行に指定されたサーバーリスト属性で、サーバー情報が適正であることを確認してください。