ユーザ用ツール

サイト用ツール


acl

アクセス制御リスト (ACL: Access Control List) の技術概要 †

http://msdn.microsoft.com/ja-jp/library/ms229936(VS.80).aspx

NTFS のセキュリティ機能と落とし穴 http://www.ipa.go.jp/security/awareness/vendor/programming/b08_03_main.html

WSH ウォークスルー (DACLを操作する) http://msdn.microsoft.com/ja-jp/library/cc364508.aspx

ユーザーをASPで作成

http://winofsql.jp/VA003334/smalltech040218163326.htm ↑ ファイルのアクセス許可設定のサンプル

c:\scripts\test.txt のアクセス許可を変更します

Option Explicit

Dim instance
Dim strMoniker
Dim objDescriptor
Dim retval
Dim DACL
Dim controlFlags
Dim accessmask
Dim Group
Dim Owner
Dim SACL
Dim number_of_trustees
Dim trustee_Domain
Dim trustee_Name
Dim trustee_Sidstring
Dim i
Dim strACL 

'' アクセス権のマスク
Const FULLACCESS = 2032127 '' フルアクセス(All)
Const READ = 1179817 '' 読み取り(RX)
Const UPDATE = 1245631 '' 変更(RWXD)
Const R = 1179785 '' 特殊なアクセス権(R)
Const W = 1179926 '' 特殊なアクセス権(W)
Const X = 1179808 '' 特殊なアクセス権(X)
Const D = 65536 '' 特殊なアクセス権(D)
Const P = 262144 '' 特殊なアクセス権(P)
Const O = 524288 '' 特殊なアクセス権(O)

Const ImpLevel = "{impersonationLevel=impersonate}"
Const namespace = "!root\cimv2:"
Const objectpath = _
     "Win32_LogicalFileSecuritySetting=""c:\\scripts\\test.txt"""
     strMoniker = "winmgmts:" & ImpLevel & namespace & objectpath

Set instance = GetObject(strMoniker)
If instance Is Nothing Then
 MsgBox ("インスタンスを取得出来ません。")
 WSCript.Quit
End If

retval = instance.getsecuritydescriptor(objDescriptor)

Set DACL = objDescriptor.Properties_.Item("dacl") ' get dacl
controlFlags = objDescriptor.Properties_.Item("controlflags")
Set Group = objDescriptor.Properties_.Item("Group")
Set Owner = objDescriptor.Properties_.Item("Owner")
Set SACL = objDescriptor.Properties_.Item("Sacl")

number_of_trustees = UBound(DACL.Value)
WScript.Echo "ドメイン名\ユーザ名:SID\アクセス権\アクセスマスク"
For i = 0 To number_of_trustees
 Set trustee_Domain = DACL.Value(i).Properties_.Item _
     ("trustee").Value.Properties_.Item("Domain")
 Set trustee_Name = DACL.Value(i).Properties_.Item _
     ("trustee").Value.Properties_.Item("Name")
 Set trustee_Sidstring = DACL.Value(i).Properties_.Item _
     ("trustee").Value.Properties_.Item("Sidstring")

 accessmask = DACL.Value(i).Properties_.Item _
     ("AccessMask").Value ' Save the accessmask

 Select Case accessmask
     Case FULLACCESS
         strACL = "フルコントロール(All)"
     Case READ
         strACL = "読み取り(RX)"
     Case UPDATE
         strACL = "変更(RWXD)"
     Case Else
         strACL = accessmask
 End Select

 WScript.Echo trustee_domain & "\" & trustee_name & ":" & trustee_Sidstring & ":" & strACL & ":" & accessmask

 If trustee_name = "Administrators" Then
     'アクセス許可の設定
     'Administratorsを「読み取り」にする
     objDescriptor.Properties_.Item("dacl").Value(i).Properties_.Item _
         ("AccessMask").Value = R
 End If
Next

retval = instance.setsecuritydescriptor(objDescriptor)
If retval = 0 Then
 MsgBox "成功しました。"
Else
 MsgBox "セキュリティ設定を変更できませんでした。"
End If
Set instance = Nothing
WSCript.Quit
acl.txt · 最終更新: 2019/06/30 12:22 by 127.0.0.1