inspec 1.0.0 → 1.35.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (286) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +933 -101
  3. data/Gemfile +8 -17
  4. data/MAINTAINERS.md +2 -1
  5. data/MAINTAINERS.toml +9 -4
  6. data/README.md +49 -28
  7. data/Rakefile +54 -39
  8. data/bin/inspec +1 -1
  9. data/docs/dsl_inspec.md +17 -4
  10. data/docs/dsl_resource.md +1 -1
  11. data/docs/habitat.md +192 -0
  12. data/docs/inspec_and_friends.md +4 -2
  13. data/docs/matchers.md +11 -0
  14. data/docs/migration.md +293 -0
  15. data/docs/profiles.md +124 -76
  16. data/docs/resources/aide_conf.md.erb +81 -0
  17. data/docs/resources/apache_conf.md.erb +10 -10
  18. data/docs/resources/apt.md.erb +13 -13
  19. data/docs/resources/audit_policy.md.erb +10 -10
  20. data/docs/resources/auditd_conf.md.erb +10 -10
  21. data/docs/resources/auditd_rules.md.erb +11 -11
  22. data/docs/resources/bash.md.erb +12 -12
  23. data/docs/resources/bond.md.erb +15 -15
  24. data/docs/resources/bridge.md.erb +11 -11
  25. data/docs/resources/bsd_service.md.erb +11 -11
  26. data/docs/resources/command.md.erb +23 -23
  27. data/docs/resources/crontab.md.erb +84 -0
  28. data/docs/resources/csv.md.erb +10 -10
  29. data/docs/resources/dh_params.md +191 -0
  30. data/docs/resources/directory.md.erb +8 -8
  31. data/docs/resources/docker.md.erb +160 -0
  32. data/docs/resources/docker_container.md.erb +89 -0
  33. data/docs/resources/docker_image.md.erb +86 -0
  34. data/docs/resources/etc_group.md.erb +16 -16
  35. data/docs/resources/etc_hosts.md.erb +62 -0
  36. data/docs/resources/file.md.erb +80 -58
  37. data/docs/resources/gem.md.erb +32 -13
  38. data/docs/resources/group.md.erb +12 -12
  39. data/docs/resources/grub_conf.md.erb +11 -11
  40. data/docs/resources/host.md.erb +27 -18
  41. data/docs/resources/http.md.erb +104 -0
  42. data/docs/resources/iis_app.md.erb +126 -0
  43. data/docs/resources/iis_site.md.erb +17 -17
  44. data/docs/resources/inetd_conf.md.erb +10 -10
  45. data/docs/resources/ini.md.erb +9 -9
  46. data/docs/resources/interface.md.erb +13 -13
  47. data/docs/resources/iptables.md.erb +21 -14
  48. data/docs/resources/json.md.erb +11 -11
  49. data/docs/resources/kernel_module.md.erb +73 -12
  50. data/docs/resources/kernel_parameter.md.erb +12 -12
  51. data/docs/resources/key_rsa.md.erb +70 -0
  52. data/docs/resources/launchd_service.md.erb +11 -11
  53. data/docs/resources/limits_conf.md.erb +10 -10
  54. data/docs/resources/login_def.md.erb +12 -12
  55. data/docs/resources/mount.md.erb +14 -14
  56. data/docs/resources/mssql_session.md.erb +62 -0
  57. data/docs/resources/mysql_conf.md.erb +14 -14
  58. data/docs/resources/mysql_session.md.erb +22 -10
  59. data/docs/resources/npm.md.erb +13 -13
  60. data/docs/resources/ntp_conf.md.erb +9 -9
  61. data/docs/resources/oneget.md.erb +11 -11
  62. data/docs/resources/oracledb_session.md.erb +53 -0
  63. data/docs/resources/os.md.erb +17 -17
  64. data/docs/resources/os_env.md.erb +12 -12
  65. data/docs/resources/package.md.erb +29 -16
  66. data/docs/resources/parse_config.md.erb +18 -18
  67. data/docs/resources/parse_config_file.md.erb +29 -23
  68. data/docs/resources/{etc_passwd.md.erb → passwd.md.erb} +17 -17
  69. data/docs/resources/pip.md.erb +15 -15
  70. data/docs/resources/port.md.erb +23 -23
  71. data/docs/resources/postgres_conf.md.erb +15 -13
  72. data/docs/resources/postgres_hba_conf.md.erb +104 -0
  73. data/docs/resources/postgres_ident_conf.md.erb +87 -0
  74. data/docs/resources/postgres_session.md.erb +28 -21
  75. data/docs/resources/powershell.md.erb +14 -14
  76. data/docs/resources/processes.md.erb +123 -0
  77. data/docs/resources/rabbitmq_config.md.erb +55 -0
  78. data/docs/resources/registry_key.md.erb +44 -21
  79. data/docs/resources/runit_service.md.erb +11 -11
  80. data/docs/resources/security_policy.md.erb +10 -10
  81. data/docs/resources/service.md.erb +18 -18
  82. data/docs/resources/{etc_shadow.md.erb → shadow.md.erb} +19 -19
  83. data/docs/resources/ssh_config.md.erb +13 -13
  84. data/docs/resources/sshd_config.md.erb +15 -15
  85. data/docs/resources/ssl.md.erb +13 -13
  86. data/docs/resources/sys_info.md.erb +10 -10
  87. data/docs/resources/systemd_service.md.erb +11 -11
  88. data/docs/resources/sysv_service.md.erb +11 -11
  89. data/docs/resources/upstart_service.md.erb +11 -11
  90. data/docs/resources/user.md.erb +20 -20
  91. data/docs/resources/users.md.erb +19 -19
  92. data/docs/resources/vbscript.md.erb +13 -13
  93. data/docs/resources/virtualization.md.erb +71 -0
  94. data/docs/resources/windows_feature.md.erb +10 -10
  95. data/docs/resources/windows_task.md.erb +103 -0
  96. data/docs/resources/wmi.md.erb +10 -10
  97. data/docs/resources/x509_certificate.md.erb +146 -0
  98. data/docs/resources/xinetd_conf.md.erb +17 -17
  99. data/docs/resources/xml.md.erb +75 -0
  100. data/docs/resources/yaml.md.erb +25 -11
  101. data/docs/resources/yum.md.erb +24 -16
  102. data/docs/resources/zfs_dataset.md.erb +63 -0
  103. data/docs/resources/zfs_pool.md.erb +57 -0
  104. data/docs/ruby_usage.md +50 -0
  105. data/docs/shared/matcher_cmp.md.erb +4 -6
  106. data/examples/inheritance/README.md +49 -3
  107. data/examples/inheritance/controls/example.rb +4 -1
  108. data/examples/inheritance/inspec.yml +3 -1
  109. data/examples/meta-profile/README.md +29 -3
  110. data/examples/meta-profile/controls/example.rb +10 -5
  111. data/examples/meta-profile/inspec.yml +4 -8
  112. data/examples/profile/README.md +1 -1
  113. data/examples/profile/controls/example.rb +0 -1
  114. data/examples/profile/controls/gordon.rb +0 -1
  115. data/examples/profile/inspec.yml +1 -1
  116. data/examples/profile-attribute/inspec.yml +1 -1
  117. data/examples/profile-sensitive/README.md +29 -0
  118. data/examples/profile-sensitive/controls/sensitive-failures.rb +9 -0
  119. data/examples/profile-sensitive/controls/sensitive.rb +9 -0
  120. data/examples/profile-sensitive/inspec.yml +8 -0
  121. data/inspec.gemspec +10 -2
  122. data/lib/bundles/inspec-artifact/README.md +1 -0
  123. data/lib/bundles/inspec-artifact/cli.rb +284 -0
  124. data/lib/bundles/inspec-artifact.rb +7 -0
  125. data/lib/bundles/inspec-compliance/README.md +44 -15
  126. data/lib/bundles/inspec-compliance/api.rb +135 -29
  127. data/lib/bundles/inspec-compliance/cli.rb +128 -21
  128. data/lib/bundles/inspec-compliance/configuration.rb +8 -0
  129. data/lib/bundles/inspec-compliance/http.rb +26 -19
  130. data/lib/bundles/inspec-compliance/target.rb +50 -25
  131. data/lib/bundles/inspec-habitat/cli.rb +31 -0
  132. data/lib/bundles/inspec-habitat/log.rb +10 -0
  133. data/lib/bundles/inspec-habitat/profile.rb +372 -0
  134. data/lib/bundles/inspec-habitat.rb +12 -0
  135. data/lib/bundles/inspec-init/templates/profile/controls/example.rb +0 -1
  136. data/lib/bundles/inspec-init/templates/profile/inspec.yml +1 -1
  137. data/lib/bundles/inspec-supermarket/api.rb +7 -5
  138. data/lib/bundles/inspec-supermarket/cli.rb +2 -2
  139. data/lib/fetchers/git.rb +4 -2
  140. data/lib/fetchers/local.rb +4 -1
  141. data/lib/fetchers/url.rb +64 -10
  142. data/lib/inspec/archive/tar.rb +1 -1
  143. data/lib/inspec/backend.rb +26 -3
  144. data/lib/inspec/base_cli.rb +44 -7
  145. data/lib/inspec/cached_fetcher.rb +2 -2
  146. data/lib/inspec/cli.rb +34 -12
  147. data/lib/inspec/completions/fish.sh.erb +34 -0
  148. data/lib/inspec/control_eval_context.rb +0 -2
  149. data/lib/inspec/dependencies/cache.rb +0 -1
  150. data/lib/inspec/dependencies/dependency_set.rb +2 -2
  151. data/lib/inspec/dependencies/lockfile.rb +13 -6
  152. data/lib/inspec/dependencies/requirement.rb +6 -6
  153. data/lib/inspec/dependencies/resolver.rb +4 -4
  154. data/lib/inspec/dsl.rb +3 -5
  155. data/lib/inspec/env_printer.rb +9 -1
  156. data/lib/inspec/exceptions.rb +8 -0
  157. data/lib/inspec/fetcher.rb +1 -1
  158. data/lib/inspec/file_provider.rb +47 -11
  159. data/lib/inspec/library_eval_context.rb +1 -1
  160. data/lib/inspec/metadata.rb +62 -18
  161. data/lib/inspec/method_source.rb +24 -0
  162. data/lib/inspec/objects/attribute.rb +21 -0
  163. data/lib/inspec/objects/control.rb +21 -3
  164. data/lib/inspec/objects/each_loop.rb +2 -1
  165. data/lib/inspec/objects/list.rb +1 -1
  166. data/lib/inspec/objects/or_test.rb +17 -2
  167. data/lib/inspec/objects/tag.rb +27 -0
  168. data/lib/inspec/objects/test.rb +9 -8
  169. data/lib/inspec/objects.rb +1 -0
  170. data/lib/inspec/plugins/fetcher.rb +4 -5
  171. data/lib/inspec/plugins/resource.rb +1 -2
  172. data/lib/inspec/plugins/source_reader.rb +3 -3
  173. data/lib/inspec/plugins.rb +1 -1
  174. data/lib/inspec/polyfill.rb +0 -1
  175. data/lib/inspec/profile.rb +92 -23
  176. data/lib/inspec/profile_context.rb +1 -1
  177. data/lib/inspec/profile_vendor.rb +66 -0
  178. data/lib/inspec/resource.rb +29 -3
  179. data/lib/inspec/rspec_json_formatter.rb +672 -285
  180. data/lib/inspec/rule.rb +12 -16
  181. data/lib/inspec/runner.rb +26 -15
  182. data/lib/inspec/runner_rspec.rb +1 -0
  183. data/lib/inspec/runtime_profile.rb +26 -0
  184. data/lib/inspec/schema.rb +185 -0
  185. data/lib/inspec/secrets/yaml.rb +8 -1
  186. data/lib/inspec/secrets.rb +1 -1
  187. data/lib/inspec/shell.rb +92 -22
  188. data/lib/inspec/source_reader.rb +1 -1
  189. data/lib/inspec/version.rb +1 -1
  190. data/lib/inspec.rb +1 -1
  191. data/lib/matchers/matchers.rb +67 -17
  192. data/lib/resources/aide_conf.rb +162 -0
  193. data/lib/resources/apache.rb +0 -1
  194. data/lib/resources/apache_conf.rb +3 -3
  195. data/lib/resources/apt.rb +2 -1
  196. data/lib/resources/audit_policy.rb +0 -1
  197. data/lib/resources/auditd_conf.rb +1 -2
  198. data/lib/resources/auditd_rules.rb +5 -5
  199. data/lib/resources/bond.rb +1 -1
  200. data/lib/resources/bridge.rb +1 -1
  201. data/lib/resources/command.rb +5 -3
  202. data/lib/resources/crontab.rb +102 -0
  203. data/lib/resources/csv.rb +18 -1
  204. data/lib/resources/dh_params.rb +84 -0
  205. data/lib/resources/directory.rb +7 -3
  206. data/lib/resources/docker.rb +198 -0
  207. data/lib/resources/docker_container.rb +114 -0
  208. data/lib/resources/docker_image.rb +96 -0
  209. data/lib/resources/etc_group.rb +2 -3
  210. data/lib/resources/etc_hosts.rb +81 -0
  211. data/lib/resources/file.rb +88 -30
  212. data/lib/resources/gem.rb +26 -6
  213. data/lib/resources/groups.rb +4 -5
  214. data/lib/resources/grub_conf.rb +3 -4
  215. data/lib/resources/host.rb +175 -35
  216. data/lib/resources/http.rb +73 -0
  217. data/lib/resources/iis_app.rb +103 -0
  218. data/lib/resources/iis_site.rb +23 -0
  219. data/lib/resources/inetd_conf.rb +9 -4
  220. data/lib/resources/interface.rb +4 -3
  221. data/lib/resources/json.rb +37 -14
  222. data/lib/resources/kernel_module.rb +77 -10
  223. data/lib/resources/kernel_parameter.rb +0 -1
  224. data/lib/resources/key_rsa.rb +67 -0
  225. data/lib/resources/limits_conf.rb +3 -4
  226. data/lib/resources/login_def.rb +2 -3
  227. data/lib/resources/mount.rb +34 -4
  228. data/lib/resources/mssql_session.rb +81 -12
  229. data/lib/resources/mysql.rb +0 -1
  230. data/lib/resources/mysql_conf.rb +1 -2
  231. data/lib/resources/mysql_session.rb +18 -7
  232. data/lib/resources/nginx_conf.rb +95 -0
  233. data/lib/resources/ntp_conf.rb +2 -3
  234. data/lib/resources/oracledb_session.rb +138 -0
  235. data/lib/resources/os_env.rb +7 -5
  236. data/lib/resources/package.rb +70 -13
  237. data/lib/resources/packages.rb +111 -0
  238. data/lib/resources/parse_config.rb +3 -4
  239. data/lib/resources/passwd.rb +4 -5
  240. data/lib/resources/pip.rb +29 -21
  241. data/lib/resources/port.rb +133 -14
  242. data/lib/resources/postgres.rb +53 -43
  243. data/lib/resources/postgres_conf.rb +40 -13
  244. data/lib/resources/postgres_hba_conf.rb +101 -0
  245. data/lib/resources/postgres_ident_conf.rb +79 -0
  246. data/lib/resources/postgres_session.rb +28 -20
  247. data/lib/resources/powershell.rb +2 -2
  248. data/lib/resources/processes.rb +61 -26
  249. data/lib/resources/rabbitmq_conf.rb +53 -0
  250. data/lib/resources/registry_key.rb +34 -11
  251. data/lib/resources/security_policy.rb +2 -2
  252. data/lib/resources/service.rb +17 -7
  253. data/lib/resources/ssh_conf.rb +17 -6
  254. data/lib/resources/ssl.rb +3 -4
  255. data/lib/resources/sys_info.rb +1 -1
  256. data/lib/resources/toml.rb +26 -0
  257. data/lib/resources/users.rb +41 -41
  258. data/lib/resources/virtualization.rb +252 -0
  259. data/lib/resources/windows_task.rb +106 -0
  260. data/lib/resources/x509_certificate.rb +143 -0
  261. data/lib/resources/xinetd.rb +18 -2
  262. data/lib/resources/xml.rb +27 -0
  263. data/lib/resources/yaml.rb +10 -2
  264. data/lib/resources/yum.rb +25 -7
  265. data/lib/resources/zfs_dataset.rb +60 -0
  266. data/lib/resources/zfs_pool.rb +49 -0
  267. data/lib/source_readers/flat.rb +2 -1
  268. data/lib/source_readers/inspec.rb +30 -11
  269. data/lib/utils/command_wrapper.rb +3 -3
  270. data/lib/utils/database_helpers.rb +77 -0
  271. data/lib/utils/erlang_parser.rb +192 -0
  272. data/lib/utils/filter.rb +2 -1
  273. data/lib/utils/filter_array.rb +0 -1
  274. data/lib/utils/find_files.rb +1 -2
  275. data/lib/utils/latest_version.rb +21 -0
  276. data/lib/utils/nginx_parser.rb +76 -0
  277. data/lib/utils/object_traversal.rb +5 -4
  278. data/lib/utils/parser.rb +23 -4
  279. data/lib/utils/plugin_registry.rb +3 -3
  280. data/lib/utils/simpleconfig.rb +25 -8
  281. data/lib/utils/spdx.rb +13 -0
  282. data/lib/utils/spdx.txt +344 -0
  283. metadata +168 -22
  284. data/docs/cli.md +0 -342
  285. data/docs/resources/process.md.erb +0 -73
  286. /data/docs/{plugin_kitchen_inspec.html.md → plugin_kitchen_inspec.md} +0 -0
@@ -0,0 +1,123 @@
1
+ ---
2
+ title: About the processes Resource
3
+ ---
4
+
5
+ # processes
6
+
7
+ Use the `processes` InSpec audit resource to test properties for programs that are running on the system.
8
+
9
+ ## Syntax
10
+
11
+ A `processes` resource block declares the name of the process to be tested, and then declares one (or more) property/value pairs:
12
+
13
+ describe processes('process_name') do
14
+ its('property_name') { should eq ['property_value'] }
15
+ end
16
+
17
+ where
18
+
19
+ * `processes('process_name')` specifies the name of a process to check. If this is a string, it will be converted to a Regexp. For more specificity, pass a Regexp directly.
20
+ * `property_name` may be used to test user (`its('users')`) and state properties (`its('states')`)
21
+
22
+
23
+ ## Matchers
24
+
25
+ This InSpec audit resource has the following matchers:
26
+
27
+ ### be
28
+
29
+ <%= partial "/shared/matcher_be" %>
30
+
31
+ ### cmp
32
+
33
+ <%= partial "/shared/matcher_cmp" %>
34
+
35
+ ### eq
36
+
37
+ <%= partial "/shared/matcher_eq" %>
38
+
39
+ ### include
40
+
41
+ <%= partial "/shared/matcher_include" %>
42
+
43
+ ### match
44
+
45
+ <%= partial "/shared/matcher_match" %>
46
+
47
+ ### property_name
48
+
49
+ The `property_name` matcher tests the named property for the specified value:
50
+
51
+ its('property_name') { should eq ['property_value'] }
52
+
53
+ ## Examples
54
+
55
+ The following examples show how to use this InSpec audit resource.
56
+
57
+ ### Test if the list length for the mysqld process is 1
58
+
59
+ describe processes('mysqld') do
60
+ its('list.length') { should eq 1 }
61
+ end
62
+
63
+ ### Test if the process is owned by a specifc user
64
+
65
+ describe processes('init') do
66
+ its('users') { should eq ['root'] }
67
+ end
68
+
69
+ describe processes('winlogon') do
70
+ its('users') { should cmp "NT AUTHORITY\\SYSTEM" }
71
+ end
72
+
73
+
74
+ ### Test if a high-priority process is running
75
+
76
+ describe processes('linux_process') do
77
+ its('states') { should eq ['R<'] }
78
+ end
79
+
80
+ describe processes('windows_process') do
81
+ its('labels') { should cmp "High" }
82
+ end
83
+
84
+ ### Test if a process exists on the system
85
+
86
+ describe processes('some_process') do
87
+ it { should exist }
88
+ end
89
+
90
+ ### Test for a process using a specific Regexp
91
+
92
+ If the process name is too common for a string to uniquely find it,
93
+ you may use a regexp. Inclusion of whitespace characters may be
94
+ needed.
95
+
96
+ describe processes(Regexp.new("/usr/local/bin/swap -d")) do
97
+ its('list.length') { should eq 1 }
98
+ end
99
+
100
+ ### Notes for auditing Windows systems
101
+
102
+ Sometimes with system properties there isn't a direct comparison between different operating systems.
103
+ Most of the `property_name`'s do align between the different OS's.
104
+
105
+ There are however some exception's, for example, within linux `states` offers multiple properties.
106
+ Windows doesn't have direct comparison that is a single property so instead `states` is mapped to the property of `Responding`, This is a boolean true/false flag to help determine if the process is hung.
107
+
108
+ Below is a mapping table to help you understand what property the unix field maps to the windows `Get-Process` Property
109
+
110
+ | *unix ps field* | *windows PowerShell Property* |
111
+ |:---------------:|:-----------------------------:|
112
+ |labels |PriorityClass|
113
+ |pids |Id|
114
+ |cpus |CPU|
115
+ |mem |PM|
116
+ |vsz |VirtualMemorySize|
117
+ |rss |NPM|
118
+ |tty |SessionId|
119
+ |states |Responding|
120
+ |start |StartTime|
121
+ |time |TotalProcessorTime|
122
+ |users |UserName|
123
+ |commands |Path|
@@ -0,0 +1,55 @@
1
+ ---
2
+ title: About the rabbitmq_config Resource
3
+ ---
4
+
5
+ # rabbitmq_config
6
+
7
+ Use the `rabbitmq_config` InSpec audit resource to test configuration data for the RabbitMQ daemon located at `/etc/rabbitmq/rabbitmq.config` on Linux and Unix platforms.
8
+
9
+ ## Syntax
10
+
11
+ A `rabbitmq_config` resource block declares the RabbitMQ configuration data to be tested:
12
+
13
+ describe rabbitmq_config.params('rabbit', 'ssl_listeners') do
14
+ it { should cmp 5671 }
15
+ end
16
+
17
+ where
18
+
19
+ * `params` is the list of parameters configured in the RabbitMQ config file
20
+ * `{ should cmp 5671 }` tests the value of `rabbit.ssl_listeners` as read from `rabbitmq.config` versus the value declared in the test
21
+
22
+
23
+ ## Matchers
24
+
25
+ This InSpec audit resource has the following matchers:
26
+
27
+ ### be
28
+
29
+ <%= partial "/shared/matcher_be" %>
30
+
31
+ ### cmp
32
+
33
+ <%= partial "/shared/matcher_cmp" %>
34
+
35
+ ### eq
36
+
37
+ <%= partial "/shared/matcher_eq" %>
38
+
39
+ ### include
40
+
41
+ <%= partial "/shared/matcher_include" %>
42
+
43
+ ### match
44
+
45
+ <%= partial "/shared/matcher_match" %>
46
+
47
+ ## Examples
48
+
49
+ The following examples show how to use this InSpec audit resource.
50
+
51
+ ### Test the list of TCP listeners
52
+
53
+ describe rabbitmq_config.params('rabbit', 'tcp_listeners') do
54
+ it { should eq [5672] }
55
+ end
@@ -6,7 +6,7 @@ title: About the registry_key Resource
6
6
 
7
7
  Use the `registry_key` InSpec audit resource to test key values in the Windows registry.
8
8
 
9
- # Syntax
9
+ ## Syntax
10
10
 
11
11
  A `registry_key` resource block declares the item in the Windows registry, the path to a setting under that item, and then one (or more) name/value pairs to be tested.
12
12
 
@@ -27,13 +27,13 @@ Or use a Ruby Hash:
27
27
  describe registry_key({
28
28
  name: 'Task Scheduler',
29
29
  hive: 'HKEY_LOCAL_MACHINE',
30
- key: ''\SYSTEM\CurrentControlSet\services\Schedule'
30
+ key: '\SYSTEM\CurrentControlSet\services\Schedule'
31
31
  }) do
32
32
  its('Start') { should eq 2 }
33
33
  end
34
34
 
35
35
 
36
- ## Registry Key Path Separators
36
+ ### Registry Key Path Separators
37
37
 
38
38
  A Windows registry key can be used as a string in Ruby code, such as when a registry key is used as the name of a recipe. In Ruby, when a registry key is enclosed in a double-quoted string (`" "`), the same backslash character (`\`) that is used to define the registry key path separator is also used in Ruby to define an escape character. Therefore, the registry key path separators must be escaped when they are enclosed in a double-quoted string. For example, the following registry key:
39
39
 
@@ -48,15 +48,28 @@ or may be enclosed in a double-quoted string with an extra backslash as an escap
48
48
  "HKCU\\SOFTWARE\\path\\to\\key\\Themes"
49
49
 
50
50
 
51
- # Matchers
51
+ <p class="warning">
52
+ Please make sure that you use backslashes instead of forward slashes. Forward slashes will not work for registry keys.
53
+ </p>
54
+
55
+ # The following will not work:
56
+ # describe registry_key('HKLM/SOFTWARE/Microsoft/NET Framework Setup/NDP/v4/Full/1033') do
57
+ # its('Release') { should eq 378675 }
58
+ # end
59
+ # You should use:
60
+ describe registry_key('HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\1033') do
61
+ its('Release') { should eq 378675 }
62
+ end
63
+
64
+ ## Matchers
52
65
 
53
66
  This InSpec audit resource has the following matchers:
54
67
 
55
- ## be
68
+ ### be
56
69
 
57
70
  <%= partial "/shared/matcher_be" %>
58
71
 
59
- ## children
72
+ ### children
60
73
 
61
74
  The `children` matcher return all of the child items of a registry key. A regular expression may be used to filter child items:
62
75
 
@@ -73,65 +86,75 @@ For example, to get all child items for a registry key:
73
86
  The following example shows how find a property that may exist against multiple registry keys, and then test that property for every registry key in which that property is located:
74
87
 
75
88
  describe registry_key({
76
- hive: HKEY_USERS
77
- }).children(/^S-1-5-21-[0-9]+-[0-9]+-[0-9]+-[0-9]{3,}\\Software\\Policies\\Microsoft\\Windows\\Installer/).each
78
- { |key|
89
+ hive: 'HKEY_USERS'
90
+ }).children(/^S-1-5-21-[0-9]+-[0-9]+-[0-9]+-[0-9]{3,}\\Software\\Policies\\Microsoft\\Windows\\Installer/).each { |key|
79
91
  describe registry_key(key) do
80
92
  its('AlwaysInstallElevated') { should eq 'value' }
81
93
  end
82
94
  }
83
95
 
84
- ## cmp
96
+ ### cmp
85
97
 
86
98
  <%= partial "/shared/matcher_cmp" %>
87
99
 
88
- ## eq
100
+ ### eq
89
101
 
90
102
  <%= partial "/shared/matcher_eq" %>
91
103
 
92
- ## exist
104
+ ### exist
93
105
 
94
106
  The `exist` matcher tests if the registry key is present:
95
107
 
96
108
  it { should exist }
97
109
 
98
- ## have_property
110
+ ### have_property
99
111
 
100
112
  The `have_property` matcher tests if a property exists for a registry key:
101
113
 
102
114
  it { should have_property 'value' }
103
115
 
104
- ## have_property_value
116
+ ### have\_property\_value
105
117
 
106
118
  The `have_property_value` matcher tests if a property value exists for a registry key:
107
119
 
108
120
  it { should have_property_value 'value' }
109
121
 
110
- ## have_value
122
+ ### have_value
111
123
 
112
124
  The `have_value` matcher tests if a value exists for a registry key:
113
125
 
114
126
  it { should have_value 'value' }
115
127
 
116
- ## include
128
+ ### include
117
129
 
118
130
  <%= partial "/shared/matcher_include" %>
119
131
 
120
- ## match
132
+ ### match
121
133
 
122
134
  <%= partial "/shared/matcher_match" %>
123
135
 
124
- ## name
136
+ ### name
125
137
 
126
138
  The `name` matcher tests the value for the specified registry setting:
127
139
 
128
140
  its('name') { should eq 'value' }
129
141
 
130
- # Examples
142
+
143
+ <p class="warning">
144
+ Any name with a dot will not work as expected: <code>its('explorer.exe') { should eq 'test' }</code>. This issue is tracked in <a href="https://github.com/chef/inspec/issues/1281">https://github.com/chef/inspec/issues/1281</a>
145
+ </p>
146
+
147
+ # instead of:
148
+ # its('explorer.exe') { should eq 'test' }
149
+ # use the following solution:
150
+ it { should have_property_value('explorer.exe', :string, 'test') }
151
+
152
+
153
+ ## Examples
131
154
 
132
155
  The following examples show how to use this InSpec audit resource.
133
156
 
134
- ## Test the start time for the Schedule service
157
+ ### Test the start time for the Schedule service
135
158
 
136
159
  describe registry_key('Task Scheduler','HKEY_LOCAL_MACHINE\...\Schedule') do
137
160
  its('Start') { should eq 2 }
@@ -139,7 +162,7 @@ The following examples show how to use this InSpec audit resource.
139
162
 
140
163
  where `'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Schedule'` is the full path to the setting.
141
164
 
142
- ## Use a regular expression in responses
165
+ ### Use a regular expression in responses
143
166
 
144
167
  describe registry_key({
145
168
  hive: 'HKEY_LOCAL_MACHINE',
@@ -6,7 +6,7 @@ title: About the runit_service Resource
6
6
 
7
7
  Use the `runit_service` InSpec audit resource to test a service using runit.
8
8
 
9
- # Syntax
9
+ ## Syntax
10
10
 
11
11
  A `runit_service` resource block declares the name of a service and then one (or more) matchers to test the state of the service:
12
12
 
@@ -29,48 +29,48 @@ The path to the service manager's control may be specified for situations where
29
29
  it { should be_running }
30
30
  end
31
31
 
32
- # Matchers
32
+ ## Matchers
33
33
 
34
34
  This InSpec audit resource has the following matchers:
35
35
 
36
- ## be
36
+ ### be
37
37
 
38
38
  <%= partial "/shared/matcher_be" %>
39
39
 
40
- ## be_enabled
40
+ ### be_enabled
41
41
 
42
42
  The `be_enabled` matcher tests if the named service is enabled:
43
43
 
44
44
  it { should be_enabled }
45
45
 
46
- ## be_installed
46
+ ### be_installed
47
47
 
48
48
  The `be_installed` matcher tests if the named service is installed:
49
49
 
50
50
  it { should be_installed }
51
51
 
52
- ## be_running
52
+ ### be_running
53
53
 
54
54
  The `be_running` matcher tests if the named service is running:
55
55
 
56
56
  it { should be_running }
57
57
 
58
- ## cmp
58
+ ### cmp
59
59
 
60
60
  <%= partial "/shared/matcher_cmp" %>
61
61
 
62
- ## eq
62
+ ### eq
63
63
 
64
64
  <%= partial "/shared/matcher_eq" %>
65
65
 
66
- ## include
66
+ ### include
67
67
 
68
68
  <%= partial "/shared/matcher_include" %>
69
69
 
70
- ## match
70
+ ### match
71
71
 
72
72
  <%= partial "/shared/matcher_match" %>
73
73
 
74
- # Examples
74
+ ## Examples
75
75
 
76
76
  None.
@@ -6,7 +6,7 @@ title: About the security_policy Resource
6
6
 
7
7
  Use the `security_policy` InSpec audit resource to test security policies on the Windows platform.
8
8
 
9
- # Syntax
9
+ ## Syntax
10
10
 
11
11
  A `security_policy` resource block declares the name of a security policy and the value to be tested:
12
12
 
@@ -20,41 +20,41 @@ where
20
20
  * `{ should eq 'value' }` tests the value of `policy_name` against the value declared in the test
21
21
 
22
22
 
23
- # Matchers
23
+ ## Matchers
24
24
 
25
25
  This InSpec audit resource has the following matchers:
26
26
 
27
- ## be
27
+ ### be
28
28
 
29
29
  <%= partial "/shared/matcher_be" %>
30
30
 
31
- ## cmp
31
+ ### cmp
32
32
 
33
33
  <%= partial "/shared/matcher_cmp" %>
34
34
 
35
- ## eq
35
+ ### eq
36
36
 
37
37
  <%= partial "/shared/matcher_eq" %>
38
38
 
39
- ## include
39
+ ### include
40
40
 
41
41
  <%= partial "/shared/matcher_include" %>
42
42
 
43
- ## match
43
+ ### match
44
44
 
45
45
  <%= partial "/shared/matcher_match" %>
46
46
 
47
- ## policy_name
47
+ ### policy_name
48
48
 
49
49
  The `policy_name` matcher must be the name of a security policy:
50
50
 
51
51
  its('SeNetworkLogonRight') { should eq '*S-1-5-11' }
52
52
 
53
- # Examples
53
+ ## Examples
54
54
 
55
55
  The following examples show how to use this InSpec audit resource.
56
56
 
57
- ## Verify that only the Administrators group has remote access
57
+ ### Verify that only the Administrators group has remote access
58
58
 
59
59
  describe security_policy do
60
60
  its('SeRemoteInteractiveLogonRight') { should eq '*S-1-5-32-544' }
@@ -6,9 +6,9 @@ title: About the service Resource
6
6
 
7
7
  Use the `service` InSpec audit resource to test if the named service is installed, running and/or enabled.
8
8
 
9
- Under some circumstances, it may be necessary to specify the service manager by using one of the following service manager-specific resources: `bsd_service`, `launchd_service`, `runit_service`, `systemd_service`, `sysv_service`, oe `upstart_service`. These resources are based on the `service` resource.
9
+ Under some circumstances, it may be necessary to specify the service manager by using one of the following service manager-specific resources: `bsd_service`, `launchd_service`, `runit_service`, `systemd_service`, `sysv_service`, or `upstart_service`. These resources are based on the `service` resource.
10
10
 
11
- # Syntax
11
+ ## Syntax
12
12
 
13
13
  A `service` resource block declares the name of a service and then one (or more) matchers to test the state of the service:
14
14
 
@@ -24,67 +24,67 @@ where
24
24
  * `be_installed`, `be_enabled`, and `be_running` are valid matchers for this resource
25
25
 
26
26
 
27
- # Matchers
27
+ ## Matchers
28
28
 
29
29
  This InSpec audit resource has the following matchers:
30
30
 
31
- ## be
31
+ ### be
32
32
 
33
33
  <%= partial "/shared/matcher_be" %>
34
34
 
35
- ## be_enabled
35
+ ### be_enabled
36
36
 
37
37
  The `be_enabled` matcher tests if the named service is enabled:
38
38
 
39
39
  it { should be_enabled }
40
40
 
41
- ## be_installed
41
+ ### be_installed
42
42
 
43
43
  The `be_installed` matcher tests if the named service is installed:
44
44
 
45
45
  it { should be_installed }
46
46
 
47
- ## be_running
47
+ ### be_running
48
48
 
49
49
  The `be_running` matcher tests if the named service is running:
50
50
 
51
51
  it { should be_running }
52
52
 
53
- ## cmp
53
+ ### cmp
54
54
 
55
55
  <%= partial "/shared/matcher_cmp" %>
56
56
 
57
- ## eq
57
+ ### eq
58
58
 
59
59
  <%= partial "/shared/matcher_eq" %>
60
60
 
61
- ## include
61
+ ### include
62
62
 
63
63
  <%= partial "/shared/matcher_include" %>
64
64
 
65
- ## match
65
+ ### match
66
66
 
67
67
  <%= partial "/shared/matcher_match" %>
68
68
 
69
- # Examples
69
+ ## Examples
70
70
 
71
71
  The following examples show how to use this InSpec audit resource.
72
72
 
73
- ## Test if the postgresql service is both running and enabled
73
+ ### Test if the postgresql service is both running and enabled
74
74
 
75
75
  describe service('postgresql') do
76
76
  it { should be_enabled }
77
77
  it { should be_running }
78
78
  end
79
79
 
80
- ## Test if the mysql service is both running and enabled
80
+ ### Test if the mysql service is both running and enabled
81
81
 
82
82
  describe service('mysqld') do
83
83
  it { should be_enabled }
84
84
  it { should be_running }
85
85
  end
86
86
 
87
- ## Test if ClamAV (an antivirus engine) is installed and running
87
+ ### Test if ClamAV (an antivirus engine) is installed and running
88
88
 
89
89
  describe package('clamav') do
90
90
  it { should be_installed }
@@ -97,7 +97,7 @@ The following examples show how to use this InSpec audit resource.
97
97
  it { should_not be_running }
98
98
  end
99
99
 
100
- ## Test Unix System V run levels
100
+ ### Test Unix System V run levels
101
101
 
102
102
  On targets that are using SystemV services, the existing run levels can also be checked:
103
103
 
@@ -109,7 +109,7 @@ On targets that are using SystemV services, the existing run levels can also be
109
109
  it { should be_enabled }
110
110
  end
111
111
 
112
- ## Override the service manager
112
+ ### Override the service manager
113
113
 
114
114
  Under some circumstances, it may be required to override the logic in place to select the right service manager. For example, to check a service managed by Upstart:
115
115
 
@@ -127,7 +127,7 @@ This is also possible with `systemd_service`, `runit_service`, `sysv_service`, `
127
127
  it { should be_running }
128
128
  end
129
129
 
130
- ## Verify that IIS is running
130
+ ### Verify that IIS is running
131
131
 
132
132
  describe service('W3SVC') do
133
133
  it { should be_installed }