【Management】UACの WMIへの影響について
4月2日 「スクリプトによるWindows Server 管理の自動化」では、Vista 以降で実装された UAC(User Account Control)によるWMIへの影響について触れておりませんでした。
この点については、MSDNに英語でまとめられているのですが、前回の投稿とも関連しますので、このBLOGでも触れておきたいと思います。
UACに関する基本情報ついては以下を参考にしてください。
ユーザーアカウント制御のご紹介(動画)
https://www.microsoft.com/japan/seminar/technet/vista/function/part4/play.aspx
セキュリティ対策の要点解説
第 15 回 Windows Vista のセキュリティ機能 ~ User Access Control ~
https://technet.microsoft.com/ja-jp/library/dd362924.aspx
UACの環境下では、ローカル管理者に所属しているユーザーアカウントは2つのアクセストークンを持っています。1つが一般ユーザーレベルの権限、もう1つが管理者の権限です。通常はスクリプトを実行する際には一般ユーザー権限で実行されます。これは、スクリプトを実行するコマンドプロンプト(cmd.exe)を「管理者として実行」しないかぎり変わることはありません。また、必ずしも「管理者として実行」する必要もありません。
スクリプトは、その実行にどのような権限が必要かを判断する手段を持っていません。そのため、管理者特権モードに昇格するためのダイアログボックスを表示させることができず、アクセス拒否エラーが発生することがあります。
もしスクリプトに管理者権限が必要であれば、コマンドシェル自身を「管理者として実行」する必要があります。
ところで、1点注意しなければならないことがあります。それは、このUACによる管理者特権とWMIのネームスペースへのアクセス権は別のものだということです。つまり、管理者特権を持っていてもWMIネームスペースへのアクセス権によっては実行できない操作がありますし、逆に言えば管理者特権を持っていなくてもWMIの操作に成功することもある、ということです。
以下に示すWMI関連コマンドは、実行時にユーザーが管理者グループに所属しており、かつUACによる管理者特権モードで動作させる必要があります。
-
WMICコマンドは常に管理者特権が必要というわけではありません。OSのインストールにはじめてWMICコマンドを使用する場合には、初期設定が行われるため管理者特権が必須です。その後は使用される操作によって異なります。
さて、ここからが重要です。
リモートコンピュータに対するWMIの操作はどうでしょう。
UACは、「リモートコンピュータのローカル管理者グループ」に所属しているドメインアカウントの場合には影響を及ぼしません。つまり、操作対象の全てのコンピュータがドメインに参加しており、ドメインの管理者でアクセスすればUACのフィルタリングにかかることは無いということです。逆に言えば、非ドメインアカウントである場合には、たとえ管理者グループに所属していようとUACのフィルタリング対象となります。
参考までに、UCAによる管理者特権モードで実行しないと正しい値を返さないWin32クラスの一覧を以下に示します。
■ インスタンス自体を返さないクラス
- Win32_Bus
- Win32_Printer
- Win32_ComponentCategory
- Win32_LogicalProgramGroupItem
- Win32_LogicalProgramGroup
- Win32_NetworkConnection
- Win32_UserAccount
- Win32_PrinterDriver
- Win32_PortResource
- Win32_DeviceMemoryAddress
■ プロパティの一部を返さないクラス
- Win32_NetworkAdapterConfiguration
- Win32_DCOMApplicationSetting
- Win32_DCOMApplication
- Win32_Baseboard
- Win32_ComputerSystem
- Win32_NetworkAdapter
- Win32_MotherboardDevice
- Win32_DiskDrive
- Win32_PnPEntity
- Win32_VideoController
- Win32_ParallelPort
- Win32_LogicalDisk
- Win32_SystemDriver
- Win32_IRQResource
- Win32_NetworkProtocol