ключ реестра ресурс
Используйте ресурс проверки аудита 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/