none
Измения разрешений безопастности на ветку реестра средства powershell - Запрошенный доступ к реестру запрещен. RRS feed

  • Вопрос

  • Пытаюсь изменить разрешения на ветку реестра "HKLM:\SOFTWARE\Classes\CLSID\{F02C1A0D-BE21-4350-88B0-7367FC96EF3C}\ShellFolder"

    Сценарий такой:

    $ACL = Get-ACL "HKLM:\SOFTWARE\Classes\CLSID\{F02C1A0D-BE21-4350-88B0-7367FC96EF3C}\ShellFolder"
    $AccessRule = new-object System.Security.AccessControl.RegistryAccessRule ("BUILTIN\Администраторы", "fullcontrol", "allow")
    $ACL.SetAccessRule($AccessRule)
    $ACL | Set-Acl "HKLM:\SOFTWARE\Classes\CLSID\{F02C1A0D-BE21-4350-88B0-7367FC96EF3C}\ShellFolder"

    Во время выполнения сценария возникает ошибка - Set-Acl : Запрошенный доступ к реестру запрещен. На других веткаx HKLM:\SOFTWARE сценарий без проблем меняет разрешения.

    Подскажите, пожалуйста, причину данной ошибки. Спасибо.

    5 сентября 2013 г. 6:04

Ответы

  • Тогда попробуйте через WMI назначить:

    $hklm = "2147483650"
    $key = "SOFTWARE\Classes\CLSID\{F02C1A0D-BE21-4350-88B0-7367FC96EF3C}\ShellFolder"
    
    $reg = [wmiclass]"\\.\root\default:stdregprov"
    $olddacl = $reg.GetSecurityDescriptor($hklm,$key).Descriptor.DACL
    
    
    $user = "Администратор"
    $SD = ([WMIClass] "Win32_SecurityDescriptor").CreateInstance()
    $ace = ([WMIClass] "Win32_ace").CreateInstance()
    $Trustee = ([WMIClass] "Win32_Trustee").CreateInstance()
    $SID = (new-object security.principal.ntaccount $user).translate([security.principal.securityidentifier])
    [byte[]] $SIDArray = ,0 * $SID.BinaryLength
    $SID.GetBinaryForm($SIDArray,0)
    $Trustee.Name = $user
    $Trustee.SID = $SIDArray
    $ace.AccessMask = [System.Security.AccessControl.RegistryRights]::FullControl
    $ace.AceFlags = "0x3"
    $ace.AceType = 0
    $ace.Trustee = $trustee
    
    $SD.DACL = $olddACL
    $SD.DACL += @($ace.psobject.baseobject)
    $SD.ControlFlags = "0x4"
    $reg.SetSecurityDescriptor($hklm,$key,$sd)

    5 сентября 2013 г. 6:45
    Отвечающий

Все ответы

  • А Powershell с повышенными привилегиями Вы запускали?
    5 сентября 2013 г. 6:12
  • Т.к. owner - System,а у Администратора и Системы права Read,то  для начала потребуется заменить ownera объекта или от Системы добавить требуемые разрешения.


    • Изменено KazunEditor 5 сентября 2013 г. 6:19 system
    5 сентября 2013 г. 6:15
    Отвечающий
  • Владелец: BUILTIN\Администраторы

    Access : BUILTIN\Администраторы Allow  ReadKey
             NT SERVICE\TrustedInstaller Allow  FullControl
             NT SERVICE\TrustedInstaller Allow  268435456
             NT AUTHORITY\система Allow  ReadKey
             NT AUTHORITY\система Allow  -2147483648
             BUILTIN\Администраторы Allow  ReadKey
             BUILTIN\Администраторы Allow  -2147483648
             BUILTIN\Пользователи Allow  ReadKey
             BUILTIN\Пользователи Allow  -2147483648

    Моя доменная учётка входит в данную группу, из под которой я запускаю сценарий.

    5 сентября 2013 г. 6:40
  • Тогда попробуйте через WMI назначить:

    $hklm = "2147483650"
    $key = "SOFTWARE\Classes\CLSID\{F02C1A0D-BE21-4350-88B0-7367FC96EF3C}\ShellFolder"
    
    $reg = [wmiclass]"\\.\root\default:stdregprov"
    $olddacl = $reg.GetSecurityDescriptor($hklm,$key).Descriptor.DACL
    
    
    $user = "Администратор"
    $SD = ([WMIClass] "Win32_SecurityDescriptor").CreateInstance()
    $ace = ([WMIClass] "Win32_ace").CreateInstance()
    $Trustee = ([WMIClass] "Win32_Trustee").CreateInstance()
    $SID = (new-object security.principal.ntaccount $user).translate([security.principal.securityidentifier])
    [byte[]] $SIDArray = ,0 * $SID.BinaryLength
    $SID.GetBinaryForm($SIDArray,0)
    $Trustee.Name = $user
    $Trustee.SID = $SIDArray
    $ace.AccessMask = [System.Security.AccessControl.RegistryRights]::FullControl
    $ace.AceFlags = "0x3"
    $ace.AceType = 0
    $ace.Trustee = $trustee
    
    $SD.DACL = $olddACL
    $SD.DACL += @($ace.psobject.baseobject)
    $SD.ControlFlags = "0x4"
    $reg.SetSecurityDescriptor($hklm,$key,$sd)

    5 сентября 2013 г. 6:45
    Отвечающий
  • Через WMI работает, но знаний в данной области не хватает. Будем разбираться. Спасибо.


    5 сентября 2013 г. 7:05