ラベル Active Directory の投稿を表示しています。 すべての投稿を表示
ラベル Active Directory の投稿を表示しています。 すべての投稿を表示

2013年12月24日火曜日

2013年7月18日木曜日

階層構造になっているセキュリティグループ内のユーザーを再帰的に検索するLDAPフィルタ

"LDAP_MATCHING_RULE_IN_CHAIN"。非常に有益な機能だと思うが、日本語の情報がほとんど無かったので記事にしておく。
普通のLDAP検索フィルタは、ネストしたセキュリティグループに対応不可

Active Directory環境では、セキュリティグループのメンバーにセキュリティグループを入れるというネスト(入れ子)構造をよく使うと思う。セキュリティグループは会社組織と対応付けされることが多いので、例えば○○部のセキュリティグループの下に●●課のセキュリティグループと▲▲課のセキュリティグループを入れるといった具合だ。
ところが、このような構造において、「○○部に所属するユーザを全員取り出す」といったLDAP検索フィルタを書こうとすると難儀することになる。
Figure.1 ネストしたセキュリティグループ

上図のような構造で、GroupAに属するユーザーを取り出すLDAPフィルタを書く場合、単純に考えると
(&(objectClass=user)(memberOf=CN=GroupA,DC=example,DC=com))
と書けばよさそうだが、これではUser1しかヒットしない。memberOf句はグループのネストに対応していないので、指定したグループ(GroupA)の直下にいるメンバーしか見つけてくれないのだ。
AD独自の演算子で、ネストしたセキュリティグループを再帰的に検索
実はADのLDAPには、この問題を解決してくれる独自の演算子が用意されている。
Search Filter Syntax (Windows)
に紹介されている"LDAP_MATCHING_RULE_IN_CHAIN"がそれだ。
具体的には下記のように記述すればよい。
(&(objectClass=user)(memberOf:1.2.840.113556.1.4.1941:=CN=GroupA,DC=example,DC=com))
このフィルタなら、GroupAの下にあるGroupBのメンバーも再帰的に検索してくれるので、User1、User2の両方がヒットする。  "1.2.840.113556.1.4.1941"がLDAP_MATCHING_RULE_IN_CHAINのOIDなのだそうな。
手っ取り早く試すなら、ldifdeコマンドで
ldifde -f export.ldf -r "(&(objectClass=user)(memberOf:1.2.840.113556.1.4.1941:=CN=GroupA,DC=example,DC=com))"
とか書いてみるとよい。

2012年6月14日木曜日

Outlookの階層型アドレス帳が遅かったら、他サイトのADと通信しているのが原因かも。

階層型アドレス帳がクソ重い
本拠地にExchange Server 2007がある環境で、遠隔サイトより「Outlook2007で階層型アドレス帳を使うと、ちょお遅いんですけど」という申告があった。ツリーを展開するだけで数十秒固まるという深刻な状況とのこと。
(ちなみに遠隔サイトにもドメインコントローラは存在する)。

パケットを取ったりして調査した結果、遠隔サイトのOutlook2007にて階層型アドレス帳を操作すると、自サイトのドメインコントローラではなく本拠地のドメインコントローラ(グローバルカタログ=GC)に対して通信を行っていることが判明した。

Figure.1 デフォルト設定では、Outlookは本拠地のGCと通信する

2012年3月25日日曜日

Active Directory レプリケーションが片方向だけエラーになる場合の対応手順

レプリケーションエラーの対応メモ(主に自分用)。
はじめに。
ADはマルチマスタなので、各ドメインコントローラが互いに双方向にデータのレプリケーションを行う。
いま面倒を見ているシステムにて、「片方向は問題なくレプリケーションできるが、反対方向のレプリケーションがある日突然エラーになる」という現象が起きている。これまで何度もこの障害に見舞われており、正直見飽きたぐらい。

2012年3月18日日曜日

Exchange 2007のグローバル アドレス一覧とオフラインアドレス帳について(2)

前回の続き。

オフラインアドレス帳とは
Exchange 2007にはオフライン アドレス帳というものがある。
これは、Outlookの「Exchange キャッシュ モード」がOnの場合に使われるもので、グローバル アドレス一覧のローカルキャッシュである。毎回Exchange Server上のアドレス帳を見に行かなくても済むので、サーバの負荷軽減や、アドレス帳の表示レスポンス改善に効果がある。
ローカルキャッシュといいつつも、データはExchange Server上で生成され、拡張子oabのファイルとしてクライアントにダウンロードされる仕組みになっている。
Outlookクライアントでアドレス帳画面より「グローバル アドレス一覧」を選択すると、oabファイルがダウンロードされるまではExchange Server上のグローバル アドレス一覧を見に行き、oabファイルのダウンロードが完了すると以後はそちらを見に行く。
当たり前の話だけど、Exchange キャッシュ モードがOffの場合には常にExchange Server上のグローバル アドレス一覧が参照される。
Figure.1 グローバル アドレス一覧(参考画像)

Exchange 2007のグローバル アドレス一覧とオフラインアドレス帳について(1)

グローバル アドレス一覧とは何か
グローバル アドレス一覧は、Exchange組織内の全Exchange Serverからメールアドレスを集めて来たリストである。
Exchange Serverを立てると、'既定のグローバル アドレス一覧'というのが自動的に作られる。こいつには組織内の全メールアドレスが入っている。そのため、一般的には'グローバル アドレス一覧'と言えば、全ユーザのアドレスを参照できるアドレス帳として利用されるケースが多い。
グローバル アドレス一覧は複数作成できる
しかし実は、ひとつのExchange組織内には'既定のグローバル アドレス一覧'以外にも複数のグローバル アドレス一覧を作成することができる。
グローバル アドレス一覧の作成には、Exchange管理シェルのNew-GlobalAddressListコマンドを使う。こいつの-RecipientFilterパラメータを使うと、作成するグローバル アドレス一覧に含むメンバを絞ることができる。
例えば部署単位でグローバルアドレス一覧を作ることにより、他部署のユーザのアドレスをOutlookのアドレス帳に表示させない、といったことが可能だ。
RecipientFilterの書式の詳細はここでは割愛するが、例えば"(<プロパティ名> -eq '<文字列>')"などと書く。フィルタに使えるプロパティの一覧はExchange 2007 SP1 および SP2 の -RecipientFilter パラメータでフィルタ可能なプロパティに載っている。部署名で絞る場合は例えば下記のようになる。
New-GlobalAddressList -Name '情シス' `
 -RecipientFilter "(Department -eq '情報システム部')"

2012年1月29日日曜日

回線が細すぎてADレプリケーションに失敗する場合の対処法

先日、遠隔地の拠点に新たにADサーバを立てた時に、回線が細すぎてADレプリケーションに失敗するという、「こんなの初めて!」な現象に出くわした。(結構レアだと思う)

発生したエラー
遠隔地のサーバでDCPROMOを実行し、無事終了したので、SYSVOLおよびntds.ditのレプリケーションが完了するまで見守ることにしたのだが、どうもntds.ditのレプリケーションが途中で止まってしまったようで、あるファイルサイズから一向に増えなくなってしまった。

状況を確認するためrepadmin /showrepl を叩くと、下記のようなエラーが表示された。
C:\>repadmin /showrepl
(snip)
==== 入力方向の近隣サーバー======================================
DC=****,DC=****,DC=**,DC=**
    *****\******** (RPC 経由)
        DSA オブジェクト GUID: ********-****-****-****-************
        2012-01-21 19:16:08 の最後の試行は、失敗しました。結果は 1818(0x71a):
            リモート プロシージャ コールが取り消されました。
        7 回連続で失敗しました。
        最後に成功したのは (never) です。
(snip)

「結果は 1818(0x71a)」とはこれいかに。

対処法:RPCタイムアウト値を変更
どうもWindows Server 2003以降は、ADのレプリケーション処理におけるRPCのタイムアウト値は5分になっているらしい。で、5分以内にレプリケーション元サーバからRPC応答が完了しないと、タイムアウトしてしまう。2000の頃は45分だったそうなので、ずいぶん短くされてしまったものだが、裏を返せば2000年から2003年にかけて世の中の通信事情がずいぶん良くなって、マイクロソフトとしては「5分でイケる」と判断したのであろう。
マイクロソフトの判断の是非はさておき、RPCのタイムアウト値を長くすることでこの問題は解決する。
レジストリエディタで
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTDS\Parameters
にDWORD値 "RPC Replication Timeout (mins)" を追加し、
値を45に設定し、再起動すればOK。
see also:Active Directory Replication Tools and Settings

2012年1月10日火曜日

Windows Vista,7,2008でログオンスクリプトによるネットワークドライブ接続に失敗する

ネットワークドライブが見えない!
Active Directory環境において、グループポリシーのログオンスクリプトを利用して自動的にネットワークドライブに接続させようとしても、うまくいかないことがある。
私が最近遭遇したのは、ログオンスクリプトをVBSで書いていてWScript.NetworkオブジェクトのMapNetworkDriveメソッドでネットワークドライブを割り当てたのに、マイコンピュータに表示されないしnet useコマンドでも表示されないというもの。MapNetworkDriveメソッドの結果をログファイルに出力してみると、結果(Err.Number)は0。つまり「スクリプト的には処理に成功している」のだが、「実際にはネットワークドライブが使えない」という状況であった。

2011年12月25日日曜日

Win2k8R2: ifmを使ったdcpromoにおいて、SYSVOL入りinstallation mediaをDVDに焼いて遠隔地に送る方法

dcpromoといえば、Active Directory(AD)のドメインコントローラ(DC)を構築するコマンドであり、Windowsサーバ技術者であれば知らぬ者はいないが、今回はそのdcpromoについてのTIPSを記事にしてみた。