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
- controle de acesso e objetos de segurança WMI
- objeto Win32_SecurityDescriptor
- DACL e SACL
- Win32_ACE, Win32_Trustee, Win32_SID
- exemplo: verificando quem tem acesso a impressoras
- tópicos relacionados
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.
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.
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
Tópicos relacionados
-
manter de segurança WMI
-
acesso a namespaces WMI