使用Puppet更改TrustedInstaller拥有的注册表项的权限

时间:2016-10-03 23:34:02

标签: windows registry puppet

我尝试将所有Windows 10连接设置为metered以阻止自动更新。这需要在HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\DefaultMediaCost下编辑值,但Puppet Agent(作为LocalSystem运行)无法修改这些值,从而导致错误,如:

Error:/Stage[main]/Main/Node[default]/Registry_value[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\DefaultMediaCost\Default]: Could not evaluate: Unexpected exception from Win32 API. detail: (Access denied.). ERROR CODE: 5. Puppet Error ID: F46C6AE2-C711-48F9-86D6-5D50E1988E48

因为该密钥归TrustedInstaller所有。

是否可以自动修改这些值?

更新。 site.pp中有问题的部分:

node default {
  registry_value { 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\DefaultMediaCost\3G':
    ensure  => present,
    type    => dword,
    data    => "2",
  }
  registry_value { 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\DefaultMediaCost\4G':
    ensure  => present,
    type    => dword,
    data    => "2",
  }
  registry_value { 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\DefaultMediaCost\Default':
    ensure  => present,
    type    => dword,
    data    => "2",
  }
  registry_value { 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\DefaultMediaCost\Ethernet':
    ensure  => present,
    type    => dword,
    data    => "2",
  }
  registry_value { 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\DefaultMediaCost\WiFi':
    ensure  => present,
    type    => dword,
    data    => "2",
  }
}

1 个答案:

答案 0 :(得分:2)

这似乎是一个权限问题,LocalSystem只是没有更改这些注册表值的凭据。您可以执行以下操作之一:

  • 将LocalSystem添加到正确的组(使用组资源),以便它具有适当的权限,以便您可以调整这些键(快速搜索看起来不像是一个组帐户,而是一个特殊的帐户)
  • 在进行更改之前,使用exec对这些密钥进行LocalSystem写访问
  • 可能会授予一个转换为TrustedInstaller的权限(快速搜索也不会将其作为一种可能性)

看起来您需要像cacl.exe调用那样设置权限,将TrustedInstaller作为所有者覆盖并授予LocalSystem所有权,然后授予其权限。如果你想要改变它,请先研究一下,了解改变之前的含义以及如何改变设置。

附注:ACL模块尚未处理注册表的权限,但将来可能会这样做。