Share via


Delegación con WMI

Al ejecutar un script en un sistema local que obtiene datos de un sistema remoto, WMI proporciona sus credenciales al proveedor de los datos en el sistema remoto. Esto solo requiere un nivel de suplantación de Suplantar, ya que solo se requiere un salto de red. Sin embargo, si el script se conecta a WMI en el sistema remoto e intenta abrir un archivo de registro en un sistema remoto adicional, el script producirá un error a menos que el nivel de suplantación sea Delegar. Cualquier operación que implique más de un salto de red requiere el nivel de suplantación Delegar. Para más información sobre la seguridad de DCOM en WMI, consulte Configurar la seguridad del proceso de aplicación cliente. Para más información sobre una conexión de salto de red entre dos equipos, consulte Conexión a WMI en un equipo remoto.

Para usar la delegación para conectarse a un equipo a través de otro equipo

  1. Habilite la delegación en Active Directory (Usuarios y equipos de Active Directory en Panel de controlTareas administrativas) en el controlador de dominio. La cuenta del sistema remoto debe estar marcada como De confianza para la delegación y la cuenta en el sistema local no debe estar marcada como La cuenta es importante y no se puede delegar. El sistema local, el sistema remoto y el controlador de dominio deben ser miembros del mismo dominio o en dominios de confianza.

    Nota: El uso de la delegación es un riesgo de seguridad porque proporciona a procesos que están fuera del control directo la posibilidad de usar sus credenciales.

  2. Modifique el código de la siguiente manera para indicar que desea usar la delegación.

    PowerShell

    Establezca el parámetro -Impersonation en el cmdlet de WMI en Delegar.

    VBScript

    Establezca el parámetro impersonationLevel en Delegar en la llamada a SWbemLocator.ConnectServer o Delegaren la cadena de moniker. También puede establecer la suplantación en un objeto SWbemSecurity.

    C++

    Establezca el parámetro de nivel de suplantación en RPC_C_IMP_LEVEL_DELEGATE en la llamada a CoInitializeSecurity o CoSetProxyBlanket. Para más información sobre cuándo realizar estas llamadas, consulte Inicialización de COM para una aplicación WMI.

    Para pasar la identidad de cliente a servidores COM remotos en C++, establezca el ocultamiento de la llamada en CoSetProxyBlanket. Para más información, consulte Ocultamiento.

Ejemplos

En el ejemplo de código siguiente se muestra una cadena de moniker que establece la suplantación en Delegar. Tenga en cuenta que la entidad emisora debe establecerse en Kerberos.

set objWMIServices = Getobject("winmgmts:{impersonationLevel=Delegate,authority=kerberos:MyDomain\Computer_B}!\\ComputerB\Root\CIMv2")

En el ejemplo de código siguiente se muestra cómo establecer la suplantación en Delegar (un valor de 4) mediante SWbemLocator.ConnectServer.

Set objLocator = CreateObject("WbemScripting.SWbemLocator")
Set objWMIService = objLocator.ConnectServer(Computer_B, _
                                             "Root\CIMv2", _
                                             AdminAccount, _
                                             MyPassword, _
                                             "kerberos:Domain\Computer_B")
objWMIService.Security_.ImpersonationLevel = 4

Protección de una conexión WMI remota

Creación de procesos de forma remota con WMI