Compartir a través de


Objetos descriptores de seguridad de WMI

WMI tiene objetos y métodos que permiten leer y manipular descriptores de seguridad para determinar quién tiene acceso a objetos protegibles.

Rol de descriptores de seguridad

Los descriptores de seguridad definen los atributos de seguridad de objetos protegibles, como archivos, claves del Registro, espacios de nombres WMI, impresoras, servicios o recursos compartidos. Un descriptor de seguridad contiene información sobre el propietario y el grupo principal de un objeto. Un proveedor puede comparar el descriptor de seguridad de recursos con la identidad de un usuario solicitante y determinar si el usuario tiene o no derecho a acceder al recurso que solicita un usuario. Para obtener más información, vea Acceso a objetos protegibles de WMI.

Algunos métodos WMI, como GetSD, devuelven un descriptor de seguridad en el formato de matriz de bytes binario. A partir de Windows Vista, use los métodos de la clase Win32_SecurityDescriptorHelper para convertir un descriptor de seguridad binario en una instancia de Win32_SecurityDescriptor, que se puede manipular más fácilmente. Para obtener más información, vea Cambio de seguridad de acceso en objetos protegibles.

Control de acceso y objetos de seguridad WMI

A continuación se muestra una lista de objetos de seguridad WMI:

En el diagrama siguiente se muestran las relaciones entre los objetos de seguridad WMI.

relaciones entre los objetos de seguridad de wmi

Para obtener más información sobre el rol de seguridad de acceso, consulte Procedimientos recomendados de seguridad, mantener lade seguridad de WMI y Control de acceso.

objeto Win32_SecurityDescriptor

En la tabla siguiente se enumeran las propiedades de Win32_SecurityDescriptor clase.

Propiedad Descripción
ControlFlags Conjunto de bits de control que califican el significado de un SD o sus miembros individuales. Para obtener más información sobre cómo establecer los valores de bits de ControlFlags, vea Win32_SecurityDescriptor.
DACL lista de control de acceso discrecional (ACL) de usuarios y grupos, y sus derechos de acceso a un objeto protegido. Esta propiedad contiene una matriz de instancias de Win32_ACE que representan entradas de Access Control. Para obtener más información, vea Creating a DACL.
de grupo de Grupo al que pertenece este objeto protegido. Esta propiedad contiene una instancia de Win32_Trustee que contiene el nombre, el dominio y el identificador de seguridad (SID) del grupo al que pertenece el propietario.
propietario Propietario de este objeto protegido. Esta propiedad contiene una instancia de Win32_Trustee que contiene el nombre, el dominio y el identificador de seguridad (SID) del propietario.
SACL lista de control de acceso del sistema (ACL) contiene una matriz de instancias de Win32_ACE que representan el tipo de intentos de acceso que generan registros de auditoría para usuarios o grupos. Para obtener más información, vea SACL para un nuevo objeto.

DACL y SACL

Las matrices de Win32_ACE objetos en la lista de control de acceso discrecional (DACL) y la lista de control de acceso del sistema {SACL) crean un vínculo entre un usuario o grupo y sus derechos de acceso.

Cuando una propiedad DACL no contiene una entrada de control de acceso (ACE), no se conceden derechos de acceso y se deniega el acceso al objeto.

Nota

Un NULL DACL proporciona acceso total a todos los usuarios, lo que supone un riesgo de seguridad grave. Para obtener más información, vea Creating a DACL.

Win32_ACE, Win32_Trustee, Win32_SID

Un objeto Win32_ACE contiene una instancia de la clase Win32_Trustee que identifica a un usuario o grupo, y una propiedad AccessMask que es una máscara de bits, que especifica las acciones que puede realizar un usuario o grupo. Por ejemplo, a un usuario o grupo se le puede conceder el derecho de leer un archivo, pero no escribir en el archivo. Un objeto Win32_ACE también contiene una ACE que indica si es o no un acceso permitido o denegado.

Nota

El orden de Win32_ACE en una DACL es importante porque tanto la entrada de control de acceso (ACE) de permitir y denegar se permiten en una DACL. Para obtener más información, vea Orden de ACL en unaDACL.

Cada cuenta de usuario o grupo representado por un Win32_Trustee tiene un identificador de seguridad (SID) que identifica de forma única una cuenta y especifica los privilegios de acceso de la cuenta. La forma de especificar los datos de SID depende del sistema operativo. Para obtener más información, vea Cambio de seguridad de acceso en objetos protegibles.

En el diagrama siguiente se muestra el contenido de una instancia de Win32_ACE.

contenido de una instancia win32-ace

Ejemplo: Comprobación de quién tiene acceso a impresoras

En el siguiente ejemplo de código de VBScript se muestra cómo usar el descriptor de seguridad de la impresora. El script llama al método GetSecurityDescriptor en la clase Win32_Printer para obtener el descriptor y, a continuación, determina si hay una lista de control de acceso discrecional (DACL) presente en el descriptor de seguridad. Si hay una DACL, el script obtiene la lista de entradas de Control de acceso (ACE) de la DACL. Cada ACE se representa mediante una instancia de Win32_ACE. El script comprueba cada ACE para obtener el nombre del usuario y determinar si el usuario tiene acceso a la impresora. El usuario se representa en mediante una instancia de Win32_Trustee insertada en la instancia de Win32_ACE.

SE_DACL_PRESENT = &h4
ACCESS_ALLOWED_ACE_TYPE = &h0
ACCESS_DENIED_ACE_TYPE  = &h1

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate, (Security)}!\\" & strComputer & "\root\cimv2")

Set colInstalledPrinters =  objWMIService.ExecQuery _
    ("Select * from Win32_Printer")

For Each objPrinter in colInstalledPrinters
   Wscript.Echo "Name: " & objPrinter.Name 
' Get security descriptor for printer
    Return = objPrinter.GetSecurityDescriptor( objSD )
    If ( return <> 0 ) Then
 WScript.Echo "Could not get security descriptor: " & Return
 wscript.Quit Return
    End If
' Extract the security descriptor flags
    intControlFlags = objSD.ControlFlags
    If intControlFlags AND SE_DACL_PRESENT Then
' Get the ACE entries from security descriptor
        colACEs = objSD.DACL
    For Each objACE in colACEs
' Get all the trustees and determine which have access to printer
        WScript.Echo objACE.Trustee.Domain & "\" & objACE.Trustee.Name
        If objACE.AceType = ACCESS_ALLOWED_ACE_TYPE Then
            WScript.Echo vbTab & "User has access to printer"
        ElseIf objACE.AceType = ACCESS_DENIED_ACE_TYPE Then
            WScript.Echo vbTab & "User does not have access to the printer"
        End If
    Next
    Else
    WScript.Echo "No DACL found in security descriptor"
End If
Next

cambiar la seguridad de acceso en objetos protegibles

de la clase auxiliar del descriptor de seguridad de

procedimientos recomendados de seguridad de

mantener el de seguridad de WMI

control de acceso

acceso a espacios de nombres WMI