3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援→開発戻り浦島太郎状態の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。

(ActiveDirectory)グループポリシーのセキュリティフィルタとWMIフィルタ

フォルダリダイレクトと移動ユーザープロファイルで、フォルダリダイレクトについて特定のサーバ利用時だけリダイレクトを行いたいという要件があり、これをグループポリシーのセキュリティフィルタで実装しようとしましたが、ダメでした。

具体的にGPMC(グループポリシーの管理)でスコープタブからもセキュリティフィルタ処理をかけれるんですが、より詳細に設定したいときは フォルダリダイレクトを設定したグループポリシー → 編集 → ツリールートのプロパティ → セキュリティタブからできるようです。

ここで、Authenticated Users をリストから除け、リダイレクトをしたいサーバ(コンピュータ)に「グループポリシーの適用」を許可とし、その他のコンピュータを拒否にしました。

(Authenticated Users をのけたのは、TechNet:GPMC を使用してセキュリティ フィルタ処理を行うに「Authenticated Users グループには、ユーザーとコンピュータの両方が含まれます。」とあったからです。このグループにコンピュータが含まれるのは知りませんでした。)

こうすると、リダイレクトさせたいサーバでも、そうじゃないコンピュータでもリダイレクトされません。

おそらく、Authenticated Usersグループを外したため、対象ユーザがいなくなったからでしょう。

そう思って、新たなセキュリティグループを作成し、そこにリダイレクト対象ユーザをメンバとして所属させ、グループポリシーのセキュリティフィルタに「グループポリシーの適用」を許可として追加しました。

そうすると今度はその他のコンピュータを拒否にしているにも関わらず、その他コンピュータでも、本来リダイレクトさせたいサーバでもリダイレクトされてしまいます。

ここからは憶測なので断言ではできませんが、セキュリティフィルタでコンピュータを追加した場合は、グループポリシーのコンピュータの構成に対してフィルタがかかり、セキュリティフィルタにユーザを追加した場合は、グループポリシーのユーザの構成に対してフィルタかかるというような仕様じゃないんでしょうか。。

ということで、セキュリティフィルタは今回の要件では使えないということに。。。

グループポリシーにはセキュリティフィルタの他にWMIフィルタというものがあるようです。

これを使うとより細かい単位でグループポリシーの適用範囲を定義することができるようです。

(ただ、パフォーマンスの影響や適用対象が動的に変わるので、適用範囲の見極めしずらくなったりするようです)

ということで、WMIフィルタを使ってみました。

WMI(Windows Management Instrumentation)クエリはSQLのクエリ構文に似た感じで、自身のコンピュータの状態を取得することができます。

今回は特定のコンピュータでだけグループポリシーを実行したいので、ホスト名を取得し、実行したいコンピュータと一致するかどうかのWMIクエリを作成してみます。

しかし、WMIは膨大な数のプロパティやメソッドがあるので、なかなか簡単には探せません。

そこで役立つのが、マイクロソフトが提供しているWMI Code Creator v1.0というツールです。

このツールを使うと比較的容易にWMIの目的のプロパティを探すこともできますし、WMIスクリプトも作成できます。

使い方は、WMIを使うスクリプトを簡単に作成する - @ITが参考になります。

で、今回作成したWMIフィルタは下記のような感じです。

名前空間

root\CIMv2

クエリ:

SELECT * FROM Win32_ComputerSystem WHERE  Name ='TestSV1' OR Name = 'TestSV2'

これをGPMCでグループポリシーに関連付けしていざ評価してみたところ、想定通りの動きとなりました。

つまり、TestSV1,TestSV2でログイン(ローカル、リモート関係なく)したときのみ、フォルダリダイレクトが動作するようになりました。

しかし、この WMI フィルタなんですが、クライアントPCが Windows 2000 の場合は、フィルタが効かずグループポリシーが適用になってしまうようなので、Windows 2000 のPCがドメイン内にいる場合は要注意です。

補足:

WMIフィルタで特定のPCやユーザだけグループポリシーの対象にしたくない時は下記のようにWMIクエリを書けばいいようです。

SELECT * FROM Win32_ComputerSystem WHERE  Name <> 'TestSV1' AND UserName <> 'hoge\userA'

参考:

TechNet:セキュリティ グループを使用してフィルタ処理を行う

TechNet:セキュリティ グループ メンバシップに応じてグループ ポリシーのスコープをフィルタ処理する

リンクの継承と優先度およびフィルタ機能 - @IT

TechNet:GPMC を使用して WMI フィルタ処理を行う