知られざるActive Directory技術の「舞台裏」

第3回 LDAPを使ってActive Directoryを制御しよう[その1:ldpとcsvde]

この記事を読むのに必要な時間:およそ 6 分

前回は,Active DirectoryではLDAPを使ったデータベースが構成されていることをお話ししました。LDAPでは,データベースを検索して情報を表示したり,オブジェクトを追加あるいは属性を変更することができます。これらの機能を使うには,データベースに接続して必要な認証を行ったあと,データベースの特定エントリへの検索を行ったりオブジェクトを操作したりします。

これらのLDAPの操作手順は,Active Directoryをプログラムから制御する一般的な方法となりますが,開発者でないシステム管理者は,普段意識することはないでしょう。しかし,システム管理者でも,たとえば,ここ1週間の間ログオンしていないユーザの一覧を抜き出したい,といった管理タスクを実行したいのであれば,ユーザのログオン時刻に関する属性(lastLogonやlastLogonTimestamp)を, LDAPを使って検索することになります。また,特にトラブルシュートを行う場合,LDAPの理解が重要なポイントとなりますので,LDAPの基本動作を知っておくことは重要となります。

このほか,Active Directoryのデータを別のリソース(新しいドメインコントローラなど)にコピーしたいような場合,LDAPを使ってエクスポート・インポートを行うツールを利用することで,簡単に実現できます。

今回は,システム管理者が実際にLDAPを利用する場合に便利な(必要な)ツールをいくつかご紹介します。

ldpツール

ldpツールとは,一般的なLDAPクライアントとしての機能をもったツールです。LDAPクライアントは,LDAPへのバインド・検索や設定の変更などを汎用的に実行することができます。LDAPでは一般にデータ内容はテキストで表示されますが,ldpツールはGUIアプリケーションであるため,操作自体はグラフィカルに行うことができ,直感的でわかりやすいインターフェースになっています。Windows Servers 2008以降であれば,スタートメニューの[ファイルを指定して実行]からldp.exeとして実行できますが,それ以前のOSでは「Windowsサポートツール」をインストールする必要があります。

ldpツールは主に動作上のテストやトラブルシュートで利用されます。実際に利用される一例として,誤って削除されたユーザアカウントを復旧する(Windows Server 2003 SP1以降のみ可能)シナリオがあります。今回このシナリオは紹介しませんが,システム管理者が押さえておくべきツールといえるでしょう。

ldpでLDAPを検索する

LDAPツールでアカウント情報を検索するには,まずLDAPデータベースにアクセスして接続してから,アカウントによる認証(バインド)を行って,初めて利用可能となります。手順は次のとおりです。なお,以下の操作はすべてWindows Server 2008 R2上で行っています。

  • ① メニューバーの[接続]⁠⁠接続]を選択します。

    画像

  • ⁠サーバー]欄にドメインコントローラの名前またはIPアドレスを入力し,[OK]をクリックします。

  • ③ 再度メニューバーの[接続]⁠⁠バインド接続]を選択します。

  • ⁠バインドの種類]欄で[現在のユーザーとしてバインド]を選択し,[OK]をクリックします。

    画像

    なお,ローカル上のLDAPにアクセスする場合,手順③から行っても問題はありません。

    接続やバインドに成功すると,RootDSEに関する情報や,認証に利用したユーザ名が表示されます。もしうまくいかなかった場合,一番最後にLDAPエラーメッセージが表示されますので,バインドできなかった原因を,エラーメッセージをもとに確認します。問題がなければ,接続するエントリ(ツリー)を指定します。ツリーの設定は次のとおりです。

  • ⑤ メニューバーの[参照]-[ツリー]を選択し,リストボックスから[DC=marubatsucorp,DC=local]を選択します。

    画像

    この状態で左ウインドウのツリー階層をクリックするだけで,オブジェクト情報や属性内容が右ウインドウに表示されます。

    画像

    この操作は1つのオブジェクトに対して行いますが,複数のユーザアカウントのオブジェクト情報を表示したい場合,検索を行うことで実現できます。検索の操作は次のとおりです。

  • ⑥ メニューバーの[参照]⁠⁠検索]を選択し,画面上で次のように入力して[実行]をクリックします。

    ベースDN[DC=marubatsucorp,DC=local]
    フィルタ[(&(objectCategory=person)(objectClass=user))]
    スコープ[サブツリー]
    属性[objectClass;name;description;canonicalName]

    画像

    「ベースDN」はLDAP検索のベース(基本)となるエントリを指定することで,ベースDNを頂点とするツリーの配下を検索対象とします。⁠フィルタ」は特定の属性の値を指定することで,その値を含むオブジェクトを抽出します。⁠スコープ」(ベースDN配下の)検索の範囲を指定するもので,⁠ベース」は指定したコンテナのみ,⁠1レベル」は1階層の範囲のみ,⁠サブツリー」は再帰的に階層を検索します。⁠属性」は検索結果となる各オブジェクトが表示される際,表示される属性を指定します。

    検索を行うと,右ウインドウに検索結果となる,該当オブジェクトのDNとcanonicalName,description,name,objectClass属性が表示されます。ここでは,フィルタの条件に「objectCategoryにpersonを含み,かつobjectClassにuserを含む」と設定したので,⁠personカテゴリに所属しuserクラスのオブジェクトである」ユーザアカウントが検索対象となります。

    画像

LDAP検索のポイントは「フィルタにより検索条件を細かく指定できる」ということにあります。たとえばフィルタ条件を「(objectClass=user)」だけにしてしまうと,userクラスのオブジェクトである,ユーザアカウントとコンピュータアカウント両方が検索対象となってしまいますので,希望どおりの結果となりません。

LDAPのフィルタ条件は,演算子と括弧を使った条件式から指定できますので,難しい検索条件の定義も可能です。代表的な演算子は次のとおりです。なお,演算子は条件式の先頭に置く必要があります。

=等しい(equal)
>=以上(grater-than)
<=以下(less-than)
&かつ(and)
|または(or)
!等しくない(not equal)

フィルタ検索の例

(&(objectCategory=computer)(primaryGroupID=516))
        ドメインコントローラを検索する

(&(&(objectCategory=person)(objectClass=user))(!lastlogon=0)(lastPwdSet=0)))
        新規作成でない利用中のユーザアカウントで"ユーザーは次回ログオン時にパスワード変更が必要"がチェックされたものを検索する

(&(objectCategory=computer)(lastlogon<=129163356000000000))
        コンピュータオブジェクトで最終ログオン日時が2010/04/22 0:00:00以前のものを検索する

(&(&(objectCategory=person)(objectClass=user))(userAccountControl:1.2.840.113556.1.4.803:=2))
        ユーザオブジェクトでアカウントが無効なものを検索する

著者プロフィール

小鮒通成(こぶなみちなり)

Active DirectoryおよびWindows Serverに関するコンサルタント。あわせて各種コミュニティ活動や執筆活動を行っており,Microsoft Most Valuable Professional (Windows Server System - Directory Services) 表彰を5年連続で受けている。現在はNTTデータ先端技術株式会社に勤務。

コメント

コメントの記入