何か腹立ってきたので愚痴っておく。
2013年12月24日火曜日
2013年7月18日木曜日
階層構造になっているセキュリティグループ内のユーザーを再帰的に検索するLDAPフィルタ
Posted on 7/18/2013 by dsp74118 with No comments
"LDAP_MATCHING_RULE_IN_CHAIN"。非常に有益な機能だと思うが、日本語の情報がほとんど無かったので記事にしておく。
Active Directory環境では、セキュリティグループのメンバーにセキュリティグループを入れるというネスト(入れ子)構造をよく使うと思う。セキュリティグループは会社組織と対応付けされることが多いので、例えば○○部のセキュリティグループの下に●●課のセキュリティグループと▲▲課のセキュリティグループを入れるといった具合だ。
ところが、このような構造において、「○○部に所属するユーザを全員取り出す」といったLDAP検索フィルタを書こうとすると難儀することになる。
上図のような構造で、GroupAに属するユーザーを取り出すLDAPフィルタを書く場合、単純に考えると
Search Filter Syntax (Windows)
に紹介されている"LDAP_MATCHING_RULE_IN_CHAIN"がそれだ。
具体的には下記のように記述すればよい。
手っ取り早く試すなら、ldifdeコマンドで
普通の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と通信しているのが原因かも。
Posted on 6/14/2012 by dsp74118 with No comments
階層型アドレス帳がクソ重い
本拠地にExchange Server 2007がある環境で、遠隔サイトより「Outlook2007で階層型アドレス帳を使うと、ちょお遅いんですけど」という申告があった。ツリーを展開するだけで数十秒固まるという深刻な状況とのこと。(ちなみに遠隔サイトにもドメインコントローラは存在する)。
パケットを取ったりして調査した結果、遠隔サイトのOutlook2007にて階層型アドレス帳を操作すると、自サイトのドメインコントローラではなく本拠地のドメインコントローラ(グローバルカタログ=GC)に対して通信を行っていることが判明した。
![]() |
| Figure.1 デフォルト設定では、Outlookは本拠地のGCと通信する |
2012年3月25日日曜日
Active Directory レプリケーションが片方向だけエラーになる場合の対応手順
Posted on 3/25/2012 by dsp74118 with No comments
レプリケーションエラーの対応メモ(主に自分用)。
いま面倒を見ているシステムにて、「片方向は問題なくレプリケーションできるが、反対方向のレプリケーションがある日突然エラーになる」という現象が起きている。これまで何度もこの障害に見舞われており、正直見飽きたぐらい。
はじめに。
ADはマルチマスタなので、各ドメインコントローラが互いに双方向にデータのレプリケーションを行う。いま面倒を見ているシステムにて、「片方向は問題なくレプリケーションできるが、反対方向のレプリケーションがある日突然エラーになる」という現象が起きている。これまで何度もこの障害に見舞われており、正直見飽きたぐらい。
2012年3月18日日曜日
Exchange 2007のグローバル アドレス一覧とオフラインアドレス帳について(2)
Posted on 3/18/2012 by dsp74118 with No comments
前回の続き。
これは、Outlookの「Exchange キャッシュ モード」がOnの場合に使われるもので、グローバル アドレス一覧のローカルキャッシュである。毎回Exchange Server上のアドレス帳を見に行かなくても済むので、サーバの負荷軽減や、アドレス帳の表示レスポンス改善に効果がある。
ローカルキャッシュといいつつも、データはExchange Server上で生成され、拡張子oabのファイルとしてクライアントにダウンロードされる仕組みになっている。
Outlookクライアントでアドレス帳画面より「グローバル アドレス一覧」を選択すると、oabファイルがダウンロードされるまではExchange Server上のグローバル アドレス一覧を見に行き、oabファイルのダウンロードが完了すると以後はそちらを見に行く。
当たり前の話だけど、Exchange キャッシュ モードがOffの場合には常にExchange Server上のグローバル アドレス一覧が参照される。
オフラインアドレス帳とは
Exchange 2007にはオフライン アドレス帳というものがある。これは、Outlookの「Exchange キャッシュ モード」がOnの場合に使われるもので、グローバル アドレス一覧のローカルキャッシュである。毎回Exchange Server上のアドレス帳を見に行かなくても済むので、サーバの負荷軽減や、アドレス帳の表示レスポンス改善に効果がある。
ローカルキャッシュといいつつも、データはExchange Server上で生成され、拡張子oabのファイルとしてクライアントにダウンロードされる仕組みになっている。
Outlookクライアントでアドレス帳画面より「グローバル アドレス一覧」を選択すると、oabファイルがダウンロードされるまではExchange Server上のグローバル アドレス一覧を見に行き、oabファイルのダウンロードが完了すると以後はそちらを見に行く。
当たり前の話だけど、Exchange キャッシュ モードがOffの場合には常にExchange Server上のグローバル アドレス一覧が参照される。
![]() |
| Figure.1 グローバル アドレス一覧(参考画像) |
Exchange 2007のグローバル アドレス一覧とオフラインアドレス帳について(1)
Posted on 3/18/2012 by dsp74118 with No comments
グローバル アドレス一覧とは何か
グローバル アドレス一覧は、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レプリケーションに失敗する場合の対処法
Posted on 1/29/2012 by dsp74118 with No comments
先日、遠隔地の拠点に新たにADサーバを立てた時に、回線が細すぎてADレプリケーション に失敗するという、「こんなの初めて!」な現象に出くわした。(結構レアだと思う)
状況を確認するためrepadmin /showrepl を叩くと、下記のようなエラーが表示された。
「結果は 1818(0x71a)」とはこれいかに。
マイクロソフトの判断の是非はさておき、RPCのタイムアウト値を長くすることでこの問題は解決する。
レジストリエディタで
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTDS\Parameters
にDWORD値 "RPC Replication Timeout (mins)" を追加し、
値を45に設定し、再起動すればOK。
see also:Active Directory Replication Tools and Settings
発生したエラー
遠隔地のサーバで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でログオンスクリプトによるネットワークドライブ接続に失敗する
Posted on 1/10/2012 by dsp74118 with No comments
ネットワークドライブが見えない!
Active Directory環境において、グループポリシーのログオンスクリプトを利用して自動的にネットワークドライブに接続させようとしても、うまくいかないことがある。私が最近遭遇したのは、ログオンスクリプトをVBSで書いていてWScript.NetworkオブジェクトのMapNetworkDriveメソッドでネットワークドライブを割り当てたのに、マイコンピュータに表示されないしnet useコマンドでも表示されないというもの。MapNetworkDriveメソッドの結果をログファイルに出力してみると、結果(Err.Number)は0。つまり「スクリプト的には処理に成功している」のだが、「実際にはネットワークドライブが使えない」という状況であった。
2011年12月25日日曜日
Win2k8R2: ifmを使ったdcpromoにおいて、SYSVOL入りinstallation mediaをDVDに焼いて遠隔地に送る方法
Posted on 12/25/2011 by dsp74118 with No comments
dcpromoといえば、Active Directory(AD)のドメインコントローラ(DC)を構築するコマンドであり、Windowsサーバ技術者であれば知らぬ者はいないが、今回はそのdcpromoについてのTIPSを記事にしてみた。
登録:
投稿 (Atom)


