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 セキュリティ オブジェクト間の関係を
アクセス セキュリティの役割の詳細については、「セキュリティのベスト プラクティスの、WMI セキュリティの管理」、および「アクセス制御」を参照してください。
Win32_SecurityDescriptor オブジェクト
次の表に、Win32_SecurityDescriptor クラスのプロパティを示します。
財産 | 形容 |
---|---|
ControlFlags | SD またはその個々のメンバーの意味を修飾する制御ビットのセット。
ControlFlags ビット値の設定の詳細については、Win32_SecurityDescriptorを参照してください。 |
DACL |
ユーザーとグループの随意アクセス制御リスト (ACL) と、セキュリティで保護されたオブジェクトに対するアクセス権です。 このプロパティには、アクセス制御エントリ表す Win32_ACE インスタンスの配列が含まれています。 詳細については、「DACLの作成」を参照してください。 |
グループ | このセキュリティで保護されたオブジェクトが属するグループ。 このプロパティには、所有者が属するグループの名前、ドメイン、およびセキュリティ識別子 (SID) を含む Win32_Trustee のインスタンスが含まれています。 |
所有者 | このセキュリティで保護されたオブジェクトの所有者。 このプロパティには、所有者の名前、ドメイン、およびセキュリティ識別子 (SID) を含む Win32_Trustee のインスタンスが含まれています。 |
SACL を する |
システム アクセス制御リスト (ACL) には、ユーザーまたはグループの監査レコードを生成するアクセス試行の種類を表す 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 データを指定する方法は、オペレーティング システムによって異なります。 詳細については、「セキュリティ保護可能なオブジェクトのアクセス セキュリティの変更 を参照してください。
次の図は、1 つの Win32_ACE インスタンスの内容を示しています。
1 つの 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
関連トピック
-
セキュリティ保護可能なオブジェクト のアクセス セキュリティの変更の
-
WMI セキュリティ の維持