WMI 보안 설명자 개체
WMI에는 보안 설명자를 읽고 조작하여 보안 개체에 대한 액세스 권한이 있는 사용자를 확인할 수 있는 개체와 메서드가 있습니다.
- 보안 설명자의 역할
- 액세스 제어 및 WMI 보안 개체
- Win32_SecurityDescriptor 개체
- DACL 및 SACL
- Win32_ACE, Win32_Trustee, Win32_SID
- 예: 프린터에 대한 액세스 권한이 있는 사용자 확인
- 관련 항목
보안 설명자의 역할
보안 설명자는 파일, 레지스트리 키, WMI 네임스페이스, 프린터, 서비스 또는 공유와 같은 보안 개체의 보안 특성을 정의합니다. 보안 설명자에는 개체의 소유자 및 주 그룹에 대한 정보가 포함됩니다. 공급자는 리소스 보안 설명자를 요청 중인 사용자의 ID와 비교하여 사용자가 요청하는 리소스에 액세스할 수 있는 권한이 사용자에게 있는지 여부를 확인할 수 있습니다. 자세한 내용은 WMI 보안 개체에 대한 액세스를 참조하세요.
GetSD와 같은 일부 WMI 메서드는 이진 바이트 배열 형식으로 보안 설명자를 반환합니다. Windows Vista부터 Win32_SecurityDescriptorHelper 클래스의 메서드를 사용하여 이진 보안 설명자를 더 쉽게 조작할 수 있는 Win32_SecurityDescriptor 인스턴스로 변환합니다. 자세한 내용은 보안 개체에 대한 액세스 보안 변경을 참조하세요.
액세스 제어 및 WMI 보안 개체
다음은 WMI 보안 개체 목록입니다.
다음 다이어그램은 WMI 보안 개체 간의 관계를 보여줍니다.
액세스 보안의 역할에 대한 자세한 내용은 보안 모범 사례, WMI 보안 유지 관리 및 액세스 제어를 참조하세요.
Win32_SecurityDescriptor 개체
다음 표에는 Win32_SecurityDescriptor 클래스 속성이 나열되어 있습니다.
속성 | 설명 |
---|---|
ControlFlags | SD 또는 그 개별 멤버의 의미를 한정하는 컨트롤 비트 집합입니다.
ControlFlags 비트 값을 설정하는 방법에 대한 자세한 내용은 Win32_SecurityDescriptor를 참조하세요. |
DACL | 사용자 및 그룹의 DACL(임의 액세스 제어 목록) 및 보안 개체에 대한 액세스 권한입니다. 이 속성에는 액세스 제어 항목을 나타내는 Win32_ACE 인스턴스의 배열이 포함되어 있습니다. 자세한 내용은 DACL 만들기를 참조하세요. |
그룹 | 이 보안 개체가 속한 그룹입니다. 이 속성에는 소유자가 속한 그룹의 이름, 도메인 및 SID(보안 식별자)를 포함하는 Win32_Trustee 인스턴스가 포함되어 있습니다. |
소유자 | 이 보안 개체의 소유자입니다. 이 속성에는 소유자의 이름, 도메인 및 SID(보안 식별자)를 포함하는 Win32_Trustee 인스턴스가 포함되어 있습니다. |
SACL |
SACL(시스템 액세스 제어 목록)에는 사용자 또는 그룹에 대한 감사 레코드를 생성하는 액세스 시도 유형을 나타내는 Win32_ACE 인스턴스의 배열이 포함되어 있습니다. 자세한 내용은 새 개체에 대한 SACL을 참조하세요. |
DACL 및 SACL
DACL(임의 액세스 제어 목록) 및 SACL(시스템 액세스 제어 목록)에 있는 Win32_ACE 개체의 배열은 사용자 또는 그룹과 해당 액세스 권한 간에 링크를 만듭니다.
DACL 속성에 ACE(액세스 제어 항목)가 포함되어 있지 않으면 액세스 권한이 부여되지 않고 개체에 대한 액세스가 거부됩니다.
참고
NULL DACL은 모든 사용자에게 모든 권한을 부여하며 이는 심각한 보안 위험입니다. 자세한 내용은 DACL 만들기를 참조하세요.
Win32_ACE, Win32_Trustee, Win32_SID
Win32_ACE 개체에는 사용자 또는 그룹을 식별하는 Win32_Trustee 클래스의 인스턴스와 사용자 또는 그룹이 수행할 수 있는 작업을 지정하는 비트 마스크인 AccessMask 속성이 포함되어 있습니다. 예를 들어 사용자 또는 그룹에는 파일 읽기 권한은 부여될 수 있지만 파일에 쓰는 권한은 부여되지 않을 수 있습니다. Win32_ACE 개체에는 액세스 허용 또는 거부인지 여부를 나타내는 ACE도 포함됩니다.
참고
DACL에서는 ACE(액세스 제어 항목) 허용 및 거부가 모두 허용되므로 DACL의 Win32_ACE 순서가 중요합니다. 자세한 내용은 DACL의 ACE 순서를 참조하세요.
Win32_Trustee가 나타내는 각 사용자 계정 또는 그룹에는 계정을 고유하게 식별하고 계정의 액세스 권한을 지정하는 SID(보안 식별자)가 있습니다. SID 데이터를 지정하는 방법은 운영 체제에 따라 다릅니다. 자세한 내용은 보안 개체에 대한 액세스 보안 변경을 참조하세요.
다음 다이어그램은 하나의 Win32_ACE 인스턴스의 콘텐츠를 보여줍니다.
예: 프린터 액세스 권한이 있는 사용자 확인
다음 VBScript 코드 예제에서는 프린터 보안 설명자를 사용하는 방법을 보여줍니다. 스크립트는 Win32_Printer 클래스에서 GetSecurityDescriptor 메서드를 호출하여 설명자를 가져온 다음 보안 설명자에 DACL(임의 액세스 제어 목록)이 있는지 확인합니다. DACL이 있는 경우 스크립트는 DACL에서 ACE(액세스 제어 항목) 목록을 가져옵니다. 각 ACE는 Win32_ACE 인스턴스로 표시됩니다. 스크립트는 모든 ACE를 검사하여 사용자의 이름을 가져와서 사용자가 프린터에 액세스할 수 있는지 여부를 확인합니다. 사용자는 Win32_ACE 인스턴스에 포함된 Win32_Trustee 인스턴스로 표시됩니다.
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