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.
- el rol de descriptores de seguridad
- control de acceso y objetos de seguridad WMI
- de objeto Win32_SecurityDescriptor
- DACL y SACL
- Win32_ACE, Win32_Trustee, Win32_SID
- ejemplo de : Comprobar quién tiene acceso a las impresoras
- temas relacionados
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.
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.
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
Temas relacionados
-
mantener el de seguridad de WMI