Spec-Zone.ru › Chef 17

ключ реестра ресурс

[редактировать на GitHub]

Используйте ресурс проверки аудита Chef InSpec, чтобы проверить значения ключей в реестре Windows.

Доступность

Установка

Этот ресурс распространяется вместе с самим Chef InSpec. Вы можете использовать его автоматически.

Версия

Этот ресурс впервые стал доступен в версии v1.0.0 InSpec.

Синтаксис

Блок ресурса registry_key объявляет элемент в реестре Windows, путь к параметру в этом элементе, а затем одну (или несколько) пару имя/значение для проверки.

Используйте имя и путь ключа реестра:

describe registry_key('Task Scheduler','HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Schedule') do
  its('Start') { should eq 2 }
end

Используйте только путь ключа реестра:

describe registry_key('HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Schedule') do
  its('Start') { should eq 2 }
end

Или используйте Ruby Hash:

describe registry_key({
  name: 'Task Scheduler',
  hive: 'HKEY_LOCAL_MACHINE',
  key: '\SYSTEM\CurrentControlSet\services\Schedule'
}) do
  its('Start') { should eq 2 }
end

Разделители пути ключа реестра

Ключ реестра Windows может быть использован как строка в коде Ruby, например, когда ключ реестра используется в качестве имени рецепта. В Ruby, когда ключ реестра заключён в двойные кавычки (" "), тот же символ обратного слэша (\), который используется для определения разделителя пути ключа реестра, также используется в Ruby для определения управляющего символа. Поэтому разделители пути ключа реестра должны быть экранированы, когда они заключены в двойные кавычки. Например, следующий ключ реестра:

HKCU\SOFTWARE\Policies\Microsoft\Windows\CurrentVersion\Themes

можно заключить в одинарные кавычки с одним обратным слэшем:

'HKCU\SOFTWARE\path\to\key\Themes'

или можно заключить в двойные кавычки с дополнительным обратным слэшем в качестве управляющего символа:

"HKCU\\SOFTWARE\\path\\to\\key\\Themes"

Предупреждение: Убедитесь, что вы используете обратные слэши вместо прямых. Прямые слэши не будут работать для ключей реестра.

# The following will not work:
# describe registry_key('HKLM/SOFTWARE/Microsoft/NET Framework Setup/NDP/v4/Full/1033') do
#   its('Release') { should eq 378675 }
# end
# You should use:
describe registry_key('HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\1033') do
  its('Release') { should eq 378675 }
end

Примеры

В следующих примерах показано, как использовать этот ресурс проверки аудита Chef InSpec.

Проверка времени запуска службы планировщика

describe registry_key('Task Scheduler','HKEY_LOCAL_MACHINE\...\Schedule') do
  its('Start') { should eq 2 }
end

где 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Schedule' — полный путь к параметру.

Использование регулярного выражения в ответах

describe registry_key({
  hive: 'HKEY_LOCAL_MACHINE',
  key: 'SOFTWARE\Microsoft\Windows NT\CurrentVersion'
}) do
  its('ProductName') { should match /^[a-zA-Z0-9\(\)\s]*2012\s[rR]2[a-zA-Z0-9\(\)\s]*$/ }
end

Сопоставители

Полный список доступных сопоставителей вы можете найти на нашей странице сопоставителей.

children

Сопоставитель children возвращает все дочерние элементы ключа реестра. Регулярное выражение может использоваться для фильтрации дочерних элементов:

describe registry_key('Key Name', '\path\to\key').children(regex)
  ...
end

Например, чтобы получить все дочерние элементы для ключа реестра:

describe registry_key('Task Scheduler','HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet').children do
  it { should_not eq [] }
end

Следующий пример показывает, как найти свойство, которое может существовать для нескольких ключей реестра, а затем проверить это свойство для каждого ключа реестра, в котором это свойство расположено:

describe registry_key({
  hive: 'HKEY_USERS'
}).children(/^S-1-5-21-[0-9]+-[0-9]+-[0-9]+-[0-9]{3,}\\Software\\Policies\\Microsoft\\Windows\\Installer/).each { |key|
    describe registry_key(key) do
      its('AlwaysInstallElevated') { should eq 'value' }
    end
  }

exist

Сопоставитель exist проверяет, существует ли ключ реестра:

it { should exist }

have_property

Сопоставитель have_property проверяет, существует ли свойство для ключа реестра:

it { should have_property 'value' }

have_property_value

Сопоставитель have_property_value проверяет, существует ли значение свойства для ключа реестра:

it { should have_property_value 'value' }

have_value

Сопоставитель have_value проверяет, существует ли значение для ключа реестра:

it { should have_value 'value' }

name

Сопоставитель name проверяет значение для указанного параметра реестра:

its('name') { should eq 'value' }

Предупреждение: Любое имя с точкой не будет работать должным образом: its(‘explorer.exe’) { should eq ‘test’ }. Подробнее см. https://github.com/inspec/inspec/issues/1281

# instead of:
# its('explorer.exe') { should eq 'test' }
# either use have_property_value...
it { should have_property_value('explorer.exe', :string, 'test') }

# ...or provide the name in an array
its(['explorer.exe']) { should eq 'test' }

Последнее решение может быть предпочтительнее, так как при ошибке Chef InSpec отобразит ожидаемые и фактические значения:

inspec> describe registry_key('HKEY_USERS\S-1-5-20\Software\Policies\Microsoft\Windows\Control Panel\Desktop') do
inspec>   its(["SCRNSAVE.EXE"]) { should eq "FlyingToasters.scr" }
inspec> end

Profile: inspec-shell
Version: (not specified)

  Registry Key HKEY_USERS\S-1-5-20\Software\Policies\Microsoft\Windows\Control Panel\Desktop
     ×  ["SCRNSAVE.EXE"] should eq "FlyingToasters.scr"

     expected: "FlyingToasters.scr"
          got: "scrnsave.scr"

     (compared using ==)


Test Summary: 0 successful, 1 failure, 0 skipped

have_property_value отображает только ложное утверждение:

  Registry Key HKEY_USERS\S-1-5-20\Software\Policies\Microsoft\Windows\Control Panel\Desktop
     ×  should have property value "SCRNSAVE.EXE", "FlyingToasters.scr"
     expected #has_property_value?("SCRNSAVE.EXE", "FlyingToasters.scr") to return true, got false

© Chef Software, Inc.
Licensed under the Creative Commons Attribution 3.0 Unported License.
The Chef™ Mark and Chef Logo are either registered trademarks/service marks or trademarks/servicemarks of Chef, in the United States and other countries and are used with Chef Inc's permission.
We are not affiliated with, endorsed or sponsored by Chef Inc.
https://docs.chef.io/inspec/resources/registry_key/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API