リモート WMI 接続のセキュリティ保護

WMI を使用してリモート コンピューターに接続するには、接続に対して正しい DCOM 設定と WMI 名前空間のセキュリティ設定が有効になっていることを確認します。

WMI には、リモート接続のターゲット コンピューターに必要な既定の偽装、認証、認証サービス (NTLM または Kerberos) 設定があります。 ローカル コンピューターでは、ターゲット システムで受け入れられない異なる既定値が使用される場合があります。 これらの設定は、接続呼び出しで変更できます。

このトピックでは次のセクションを扱います。

WMI での DCOM 偽装と認証の設定

WMI には、リモート システムに必要な既定の DCOM 偽装、認証、認証サービス (NTLM または Kerberos) の設定があります。 ローカル システムでは、ターゲットのリモート システムで受け入れられない異なる既定値が使用される場合があります。 これらの設定は、接続呼び出しで変更できます。 詳しくは、「クライアント アプリケーション プロセスのセキュリティの設定」をご覧ください。 ただし、認証サービスの場合は、RPC_C_AUTHN_DEFAULT を指定し、ターゲット コンピューターに適したサービスを DCOM で選択できるようにすることをお勧めします。

C++ では、CoInitializeSecurity または CoSetProxyBlanket の呼び出しのパラメーターに設定を指定できます。 スクリプトでは、SWbemLocator.ConnectServer の呼び出し、SWbemSecurity オブジェクト、またはスクリプトのモニカー文字列でセキュリティ設定を確立できます。

すべての C++ 偽装定数の一覧については、「C++ を使用した既定のプロセス セキュリティ レベルの設定」を参照してください。 モニカー接続を使うための Visual Basic 定数とスクリプト文字列については、「VBScript を使用した既定のプロセス セキュリティ レベルの設定」を参照してください。

次の表に、リモート接続のターゲット コンピューター (コンピューター B) で必要な既定の DCOM 偽装、認証、認証サービスの設定を示します。 詳細については、「リモート WMI 接続のセキュリティ保護」を参照してください。

コンピューター B のオペレーティング システム 偽装レベルのスクリプト文字列 認証レベルのスクリプト文字列 認証サービス
Windows Vista 以降 Impersonate Pkt Kerberos

 

WMI リモート接続は、ユーザー アカウント制御 (UAC)Windows ファイアウォールの影響を受けます。 詳細については、Vista 以降での WMI へのリモート接続Windows ファイアウォールを介した接続に関する記事を参照してください。

ローカル コンピューター上の WMI に接続する場合、既定の認証レベルは PktPrivacy であることに注意してください。

ユーザーがコンピューターにリモートでアクセスできるように DCOM セキュリティを設定する

WMI のセキュリティは、WMI 名前空間への接続に関連しています。 WMI では DCOM を使用してリモート呼び出しを処理します。 リモート コンピューターに接続できない理由の 1 つは、DCOM エラー (エラー "DCOM アクセスが拒否されました" 10 進数 -2147024891 または 16 進数 0x80070005) が原因です。 C++ アプリケーション用の WMI での DCOM セキュリティの詳細については、「クライアント アプリケーション プロセスのセキュリティの設定」を参照してください。

WMI に対する DCOM の設定は、コントロール パネル管理ツールにある、DCOM 構成ユーティリティ (DCOMCnfg.exe) を使用して構成できます。 このユーティリティでは、特定のユーザーが DCOM を介してコンピューターにリモート接続できるようにする設定が公開されます。 Administrators グループのメンバーは既定で、コンピューターにリモート接続できます。 このユーティリティにより、WMI サービスを開始、アクセス、構成するためのセキュリティを設定できます。

次の手順では、特定のユーザーとグループに対して DCOM リモート起動とアクティブ化のアクセス許可を付与する方法について説明します。 コンピューター A からコンピューター B にリモートで接続している場合は、コンピューター B の Administrators グループに属していないユーザーまたはグループがコンピューター B で DCOM の起動とアクティブ化の呼び出しを実行できるように、コンピューター B でこれらのアクセス許可を設定できます。

ユーザーまたはグループの DCOM リモート起動とアクティブ化のアクセス許可を付与するには

  1. [スタート] をクリックし、[ファイル名を指定して実行] をクリックして、「DCOMCNFG」と入力し、[OK] をクリックします。

  2. [コンポーネント サービス] ダイアログ ボックスで、[コンポーネント サービス][コンピューター] の順に展開し、[マイ コンピューター] を右クリックして、[プロパティ] をクリックします。

  3. [マイ コンピューターのプロパティ] ダイアログ ボックスで、[COM セキュリティ] タブをクリックします。

  4. [起動とアクティブ化のアクセス許可] で、[制限の編集] をクリックします。

  5. [起動のアクセス許可] ダイアログ ボックスで、自分の名前またはグループが [グループまたはユーザー名] の一覧に表示されない場合は、次の手順に従います。

    1. [起動のアクセス許可] ダイアログ ボックスで、[追加] をクリックします。
    2. [ユーザー、コンピューター、またはグループの選択] ダイアログ ボックスで、[選択するオブジェクト名を入力してください] ボックスに名前とグループを入力して、[OK] をクリックします。
  6. [起動のアクセス許可] ダイアログ ボックスで、[グループ名またはユーザー名] ボックスでユーザーとグループを選択します。 [ユーザーのアクセス許可][許可] 列で、[リモートからの起動][リモートからのアクティブ化] を選択して、[OK] をクリックします。

次の手順では、特定のユーザーとグループに対して DCOM リモート アクセスのアクセス許可を付与する方法について説明します。 コンピューター A からコンピューター B にリモートで接続している場合は、コンピューター B の Administrators グループに属していないユーザーまたはグループがコンピューター B に接続できるように、コンピューター B でこれらのアクセス許可を設定できます。

DCOM リモート アクセス許可を付与するには

  1. [スタート] をクリックし、[ファイル名を指定して実行] をクリックして、「DCOMCNFG」と入力し、[OK] をクリックします。
  2. [コンポーネント サービス] ダイアログ ボックスで、[コンポーネント サービス][コンピューター] の順に展開し、[マイ コンピューター] を右クリックして、[プロパティ] をクリックします。
  3. [マイ コンピューターのプロパティ] ダイアログ ボックスで、[COM セキュリティ] タブをクリックします。
  4. [アクセス許可] で、[制限の編集] をクリックします。
  5. [アクセス許可] ダイアログ ボックスで、[グループまたはユーザー名] ボックスで [匿名ログオン] の名前を選択します。 [ユーザーのアクセス許可][許可] 列で、[リモート アクセス] を選択し、[OK] をクリックします。

特定の WMI 名前空間へのアクセスをユーザーに許可する

特定の WMI 名前空間へのアクセスをユーザーに許可または禁止するには、名前空間の WMI コントロールで "リモートの有効化" アクセス許可を設定します。 アクセスが許可されていない名前空間にユーザーが接続しようとすると、エラー 0x80041003 が発生します。 既定では、このアクセス許可は管理者に対してのみ有効になっています。 管理者は、管理者以外のユーザーの特定の WMI 名前空間へのリモート アクセスを有効にすることができます。

次の手順では、管理者以外のユーザーに対してリモートの有効化のアクセス許可を設定します。

リモートの有効化のアクセス許可を設定するには

  1. WMI コントロールを使用してリモート コンピューターに接続します。

    WMI コントロールの詳細については、「WMI コントロールを使用した名前空間セキュリティの設定」を参照してください。

  2. [セキュリティ] タブで、名前空間を選択し、[セキュリティ] をクリックします。

  3. 適切なアカウントを見つけて、[アクセス許可] の一覧で [リモートの有効化] をオンにします。

リモート接続のデータ暗号化を要求するように名前空間のセキュリティを設定する

WMI 名前空間への接続でパケット プライバシー (スクリプトでモニカーとして RPC_C_AUTHN_LEVEL_PKT_PRIVACY または PktPrivacy) を使用しない限り、データが返されないように、管理者または MOF ファイルによってその名前空間を構成できます。 これで、データがネットワークを通過するときに確実に暗号化されます。 低い認証レベルを設定しようとすると、アクセス拒否メッセージが表示されます。 詳細については、名前空間への暗号化された接続を要求するに関する記事を参照してください。

次の VBScript コード例は、"pktPrivacy" を使用して暗号化された名前空間に接続する方法を示しています。

strComputer = "RemoteComputer"
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate,authenticationLevel=pktPrivacy}!\\" _
                              & strComputer & "\root\EncryptedNamespace")

WMI での委任

WMI を使用したリモートでのプロセスの作成

C++ クライアントとプロバイダーのセキュリティ保護

スクリプト クライアントのセキュリティ保護