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
- Controle de acesso e objetos de segurança WMI
- Win32_SecurityDescriptor Objeto
- DACL e SACL
- Win32_ACE, Win32_Trustee Win32_SID
- Exemplo: Verificar quem tem acesso a impressoras
- Tópicos relacionados
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.
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.
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
Tópicos relacionados
-
Manutenção do de segurança WMI