Partilhar via


Objetos do descritor 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.

O papel dos 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 recursos 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 Acesso a objetos protegíveis WMI.

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 mais facilmente. 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

A seguir está 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 da segurança de acesso, consulte de práticas recomendadas de segurança, Mantendode segurança WMI e de controle de acesso .

Win32_SecurityDescriptor objeto

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 ControlFlags valores de bits, consulte Win32_SecurityDescriptor.
DACL Lista de Controle de Acesso Discricionário (ACL) de usuários e grupos e seus direitos de acesso a um objeto seguro. Esta 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 uma DACL.
Grupo Grupo ao qual este objeto seguro pertence. Esta propriedade contém uma instância de Win32_Trustee que contém o nome, domínio e identificador de segurança (SID) do grupo ao qual o proprietário pertence.
Owner Proprietário deste objeto seguro. Esta propriedade contém uma instância de Win32_Trustee que contém o nome, domínio e identificador de segurança (SID) do proprietário.
SACL de Lista de Controle de Acesso do Sistema (ACL) contém uma matriz de instâncias de 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 lista de controle de acesso discricionário (DACL) e na lista de controle de acesso do sistema {SACL) criam um link entre um usuário ou grupo e seus direitos de acesso.

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

Observação

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

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 uma ACE que indica se é ou não um acesso de permissão ou negação.

Observação

A ordem de Win32_ACE em uma DACL é importante porque tanto permitir quanto negar entrada de controle de acesso (ACE) são permitidos em uma DACL. Para obter mais informações, consulte Ordem das ACEs em umDACL .

Cada conta de usuário ou grupo representado por um Win32_Trustee tem um identificador de segurança (SID) que identifica exclusivamente uma conta e especifica os privilégios de acesso da conta. A forma como você especifica os dados 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 Win32_ACE instância.

conteúdo de uma instância Win32-ACE

Exemplo: Verificar 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 GetSecurityDescriptor método na classe Win32_Printer para obter o descritor e, em seguida, determina se há uma lista de controle de acesso discricionário (DACL) presente no descritor de segurança. Se houver uma DACL, o script obterá a lista de entradas de controle de acesso (ACE) da DACL. Cada ACE é representada 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 incorporada na instância 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

Melhores Práticas de Segurança

Manutenção do de segurança WMI

de Controle de Acesso

acesso a namespaces WMI