Compartilhar via


Objetos descritores de segurança WMI

O WMI tem objetos e métodos que permitem ler e manipular descritores de segurança para determinar quem tem acesso a objetos protegíveis.

A função de descritores de segurança

Os descritores de segurança definem os atributos de segurança de objetos protegíveis, como arquivos, chaves do Registro, namespaces WMI, impressoras, serviços ou compartilhamentos. Um descritor de segurança contém informações sobre o proprietário e o grupo primário de um objeto. Um provedor pode comparar o descritor de segurança de recurso com a identidade de um usuário solicitante e determinar se o usuário tem ou não o direito de acessar o recurso que um usuário está solicitando. Para obter mais informações, consulte Access to WMI Securable Objects.

Alguns métodos WMI, como GetSD, retornam um descritor de segurança no formato de matriz de bytes binários. A partir do Windows Vista, use os métodos da classe Win32_SecurityDescriptorHelper para converter um descritor de segurança binário em uma instância de Win32_SecurityDescriptor, que pode ser manipulada com mais facilidade. Para obter mais informações, consulte Alterando a segurança de acesso em objetos protegíveis.

Controle de acesso e objetos de segurança WMI

Veja a seguir uma lista de objetos de segurança WMI:

O diagrama a seguir mostra as relações entre objetos de segurança WMI.

relações entre objetos de segurança wmi

Para obter mais informações sobre a função de segurança de acesso, consulte práticas recomendadas de segurança, manterde segurança WMI e controle de acesso.

Objeto Win32_SecurityDescriptor

A tabela a seguir lista as propriedades da classe Win32_SecurityDescriptor.

Propriedade Descrição
ControlFlags Conjunto de bits de controle que qualificam o significado de um SD ou seus membros individuais. Para obter mais informações sobre como definir os valores de bit do ControlFlags, consulte Win32_SecurityDescriptor.
DACL ACL (Lista de Controle de Acesso Discricionário) de usuários e grupos e seus direitos de acesso a um objeto protegido. Essa propriedade contém uma matriz de instâncias de Win32_ACE que representam entradas de controle de acesso. Para obter mais informações, consulte Criando umDACL.
do Grupo Agrupar ao qual esse objeto protegido pertence. Essa propriedade contém uma instância de Win32_Trustee que contém o nome, o domínio e o SID (identificador de segurança) do grupo ao qual o proprietário pertence.
proprietário Proprietário deste objeto protegido. Essa propriedade contém uma instância de Win32_Trustee que contém o nome, o domínio e o SID (identificador de segurança) do proprietário.
SACL ACL (Lista de Controle de Acesso do Sistema) contém uma matriz de instâncias Win32_ACE que representam o tipo de tentativas de acesso que geram registros de auditoria para usuários ou grupos. Para obter mais informações, consulte SACL para um novo objeto.

DACL e SACL

As matrizes de objetos Win32_ACE na DACL (lista de controle de acesso discricionário) e na lista de controle de acesso do sistema {SACL) criam um vínculo entre um usuário ou grupo e seus direitos de acesso.

Quando uma propriedade DACL não contém uma ACE (entrada de controle de acesso), os direitos de acesso não são concedidos e o acesso ao objeto é negado.

Nota

Uma NULL DACL dá acesso total a todos, o que é um sério risco à segurança. Para obter mais informações, consulte Criando umDACL.

Win32_ACE, Win32_Trustee, Win32_SID

Um objeto Win32_ACE contém uma instância da classe Win32_Trustee que identifica um usuário ou grupo e uma propriedade AccessMask que é uma máscara de bits, que especifica as ações que um usuário ou grupo pode executar. Por exemplo, um usuário ou grupo pode receber o direito de ler um arquivo, mas não gravar no arquivo. Um objeto Win32_ACE também contém um ACE que indica se ele é ou não uma permissão ou um acesso de negação.

Nota

A ordem de Win32_ACE em uma DACL é importante porque a ACE (entrada de controle de acesso) permite e nega a entrada de controle de acesso em um DACL. Para obter mais informações, consulte Order of ACEs in a DACL.

Cada conta de usuário ou grupo representado por um Win32_Trustee tem um SID (identificador de segurança) que identifica exclusivamente uma conta e especifica os privilégios de acesso da conta. A forma como você especifica os dados de SID depende do sistema operacional. Para obter mais informações, consulte Alterando a segurança de acesso em objetos protegíveis.

O diagrama a seguir mostra o conteúdo de uma instância de Win32_ACE.

conteúdo de uma instância win32-ace

Exemplo: verificando quem tem acesso a impressoras

O exemplo de código VBScript a seguir mostra como usar o descritor de segurança da impressora. O script chama o método GetSecurityDescriptor na classe Win32_Printer para obter o descritor e determina se há uma DACL (Lista de Controle de Acesso Discricionário) presente no descritor de segurança. Se houver um DACL, o script obterá a lista de ACE (Entradas de Controle de Acesso) da DACL. Cada ACE é representado por uma instância de Win32_ACE. O script verifica cada ACE para obter o nome do usuário e determinar se o usuário tem acesso à impressora. O usuário é representado por uma instância de Win32_Trustee inserida na instância 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

alterando a segurança de acesso em objetos protegíveis

classe auxiliar do descritor de segurança

Práticas recomendadas de segurança

manter de segurança WMI

controle de acesso

acesso a namespaces WMI