2013-08-26 4 views
1

Я хочу добавить ACE в раздел реестра, но он не наследуется через дочерние элементы. Вот код VBScript:ACE автоматическое наследование

Set sdUtil = CreateObject("ADsSecurityUtility") 
S = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\XXXX" 
Set sd = sdUtil.GetSecurityDescriptor(S, ADS_PATH_REGISTRY, ADS_SD_FORMAT_IID) 
Set oldDacl = sd.DiscretionaryAcl 
Set dacl = CreateObject("AccessControlList") 
dacl.AclRevision = ADS_REVISION_DS 
dacl.AceCount = 0 
'remove network service ace if it exists 
For Each ace In oldDacl 
    If UCase(ace.trustee) <> "NT AUTHORITY\NETWORK SERVICE" And UCase(ace.trustee) <> "S-1-5-20" Then 
     ace.AceFlags = ace.AceFlags Or OBJECT_INHERIT_ACE Or CONTAINER_INHERIT_ACE 
     dacl.AddAce ace 
    End If 
Next 
'add the new network service ace 
Set ace = CreateObject("AccessControlEntry") 
ace.Trustee = "NT AUTHORITY\NETWORK SERVICE" 
ace.AccessMask = KEY_ALL_ACCESS 
ace.AceFlags = OBJECT_INHERIT_ACE Or CONTAINER_INHERIT_ACE 
ace.AceType = ADS_ACETYPE_ACCESS_ALLOWED 
dacl.AddAce ace 
If (sd.Control And SE_DACL_AUTO_INHERITED) <> 0 Then 
    sd.Control = sd.Control Or SE_DACL_AUTO_INHERIT_REQ 
End If 
If (sd.Control And SE_SACL_AUTO_INHERITED) <> 0 Then 
    sd.Control = sd.Control Or SE_SACL_AUTO_INHERIT_REQ 
End If 
If (sd.Control And SE_DACL_PROTECTED) <> 0 Then 
    sd.Control = sd.Control Xor SE_DACL_PROTECTED 
End If 
ReorderDacl dacl 'This subroutine reorder dacl using w2k rules 
sd.DiscretionaryAcl = dacl 
ret = sdUtil.SetSecurityDescriptor(S, ADS_PATH_REGISTRY, sd, ADS_SD_FORMAT_IID) 

Я также использую другую программу, которая сканирует все дети ключи и удалены все АСЕ, кроме помеченных как ADS_ACEFLAG_INHERITED_ACE

После выполнения кода я получаю, что Чайлдс из HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ XXXX только наследует SYSTEM, Administrators, Everyone & Ограниченный доступ. Они устанавливаются на родительский ключ, но доступ к NETWORK SERVICE находится на HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ XXXX, но не распространяется на дочерние.

ответ

0

Наконец-то я получил, что уже существующие дочерние ключи не получают унаследованного туза автоматически, поэтому мне пришлось вручную и рекурсивно добавлять туз ко всем дочерним элементам с помощью ADS_ACEFLAG_INHERITED_ACE or'ed.

Хотя в документации указано, что система ADS_ACEFLAG_INHERITED_ACE задана системой, ее можно также установить вручную.

 Смежные вопросы

  • Нет связанных вопросов^_^