Solaris のシステム管理 (ネーミングとディレクトリサービス : DNS、NIS、LDAP 編)

第 17 章 LDAP の障害追跡 (参照情報)

この章では、LDAP の構成で発生する問題とその解決方法を示します。

クライアントステータスの監視

以降の節では、LDAP クライアント環境の状態判定に使用するさまざまなコマンドを紹介します。 使用可能なオプションの詳細については、マニュアルページも参照してください。

ldap_cachemgr が実行中であることを確認する

ldap_cachemgr デーモンは、常に実行中で適切に機能している必要があります。 このデーモンが機能していない場合、システムは動作しません。 ldap_cachemgr の動作を確認するには、次の 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 を実行できますが、大量のデータが含まれている場合には、生成量の少ないサービスを選ぶか、headmore コマンドを使用してデータをパイプ処理することもできます。

クライアント以外のマシンからのサーバーデータの確認

前述のコマンドの大半は、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 となります。

LDAP ドメイン内のシステムに遠隔アクセスできない

DNS ドメイン名が LDAP ドメイン名とは異なる場合、格納されたホスト名が完全指定でない限り LDAP ネームサービスをホスト名に対して使用することはできません。

ログインできない

LDAP クライアントは、ログイン時に PAM モジュールを使用してユーザーを 認証します。 UNIX 標準の PAM モジュールでは、パスワードをサーバーから読み込みクライアント側で検査します。 この動作は、次のいずれかの理由で失敗する場合があります。

  1. /etc/nsswitch.conf ファイル内の passwd サービスが ldap を使用しない

  2. プロキシエージェントが、サーバーリスト上のユーザーの userPassword 属性を読み取ることができない。 プロキシエージェントが比較のためにパスワードをクライアントに返すので、少なくともプロキシエージェントはパスワードを読めなければならない。 pam_ldap に関しては、パスワードへの読み取りアクセスを必要としない

  3. プロキシエージェントが適切なパスワードを保持していない

  4. 該当するエントリに shadowAccount オブジェクトクラスが定義されていない

  5. パスワードが定義されていない

    ldapaddent を使用する場合、-p オプションを使用してパスワードをユーザーエントリに確実に追加する必要があります。 ldapaddent-p オプションなしで実行した場合、ldapaddent を使用して /etc/shadow ファイルを追加しない限り、ユーザーのパスワードはディレクトリに格納されません。

  6. LDAP サーバーに到達することができない

    サーバーの状態を確認します。


    # /usr/lib/ldap/ldap_cachemgr -g
    
  7. pam.conf の構成が不正である

  8. LDAP 名前空間でユーザーが定義されていない

  9. pam_unixNS_LDAP_CREDENTIAL_LEVELanonymous に設定されており、匿名ユーザーが userPassword を使用できない

  10. パスワードが crypt 形式で格納されていない

  11. pam_ldap が構成され、パスワード管理をサポートしている場合は、以下のいずれかの原因でログインに失敗します。

    • ユーザーのパスワード期限が切れている

    • ログインを何回も行ったために、ユーザーアカウントがロックされる

    • 管理者がユーザーアカウントを非アクティブにした

検索が遅い

LDAP データベースは、検索パフォーマンス向上にインデックスを使用します。 インデックスが正しく作成されていない場合、大幅にパフォーマンスが低下することがあります。 このマニュアルには、インデックスを作成する必要のある共通の属性セットを記述しています。 また、独自のインデックスを追加して、パフォーマンスの向上を図ることができます。

ldapclient がサーバーにバインドできない

-p オプションを使用しているときに、ldapclient がクライアントの初期化に失敗しました。 考えられる失敗の原因は以下のとおりです。

  1. コマンド行で不正なドメイン名が指定された

  2. 指定されたクライアントドメインのエントリポイントを表す nisDomain 属性が DIT (ディレクトリ情報ツリー) 内に設定されていない

  3. アクセス制御情報がサーバー上で適正に設定されていないため、LDAP データベース内の匿名検索が許可されない

  4. ldapclient コマンドに渡されたサーバーアドレスが間違っている。 ldapsearch を使用してサーバーのアドレスを確認する

  5. ldapclient コマンドに渡されたプロファイル名が間違っている。 ldapsearch を使用して、DIT 内のプロファイル名を確認する

  6. クライアントのネットワークインタフェースに対して snoop を実行して外向きのトラフィックを検査して、どのサーバーにアクセスしているかを確認する

デバッグに ldap_cachemgr を使用する

ldap_cachemgr-g オプションを付けて使用すると、現在のクライアント構成および統計を表示できるため、デバッグするのに便利です。 たとえば、次のように指定します。


# ldap_cachemgr -g

この結果、すでに説明したように、すべての LDAP サーバーの状態を含む現在のクライアント構成および統計が標準出力に出力されます。 このコマンドを実行するのに、スーパーユーザーになる必要はありません。

セットアップ中に ldapclient がハングアップする

ldapclient コマンドがハングアップした場合、Ctrl-C キーを押すと以前の環境を復元した後で終了します。 この状況が発生する場合、サーバーが動作していることをサーバー管理者に確認してください。

プロファイルまたはコマンド行に指定されたサーバーリスト属性で、サーバー情報が適正であることを確認してください。