inspec 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (82) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +46 -3
  3. data/Gemfile +4 -1
  4. data/README.md +3 -0
  5. data/docs/dsl_inspec.md +3 -3
  6. data/docs/profiles.md +17 -0
  7. data/docs/resources/apache_conf.md.erb +10 -10
  8. data/docs/resources/apt.md.erb +13 -13
  9. data/docs/resources/audit_policy.md.erb +10 -10
  10. data/docs/resources/auditd_conf.md.erb +10 -10
  11. data/docs/resources/auditd_rules.md.erb +11 -11
  12. data/docs/resources/bash.md.erb +12 -12
  13. data/docs/resources/bond.md.erb +15 -15
  14. data/docs/resources/bridge.md.erb +11 -11
  15. data/docs/resources/bsd_service.md.erb +11 -11
  16. data/docs/resources/command.md.erb +21 -21
  17. data/docs/resources/csv.md.erb +10 -10
  18. data/docs/resources/directory.md.erb +8 -8
  19. data/docs/resources/etc_group.md.erb +16 -16
  20. data/docs/resources/etc_passwd.md.erb +17 -17
  21. data/docs/resources/etc_shadow.md.erb +19 -19
  22. data/docs/resources/file.md.erb +58 -58
  23. data/docs/resources/gem.md.erb +12 -12
  24. data/docs/resources/group.md.erb +12 -12
  25. data/docs/resources/grub_conf.md.erb +11 -11
  26. data/docs/resources/host.md.erb +13 -13
  27. data/docs/resources/iis_site.md.erb +16 -16
  28. data/docs/resources/inetd_conf.md.erb +10 -10
  29. data/docs/resources/ini.md.erb +9 -9
  30. data/docs/resources/interface.md.erb +11 -11
  31. data/docs/resources/iptables.md.erb +11 -11
  32. data/docs/resources/json.md.erb +10 -10
  33. data/docs/resources/kernel_module.md.erb +10 -10
  34. data/docs/resources/kernel_parameter.md.erb +12 -12
  35. data/docs/resources/launchd_service.md.erb +11 -11
  36. data/docs/resources/limits_conf.md.erb +10 -10
  37. data/docs/resources/login_def.md.erb +12 -12
  38. data/docs/resources/mount.md.erb +13 -13
  39. data/docs/resources/mysql_conf.md.erb +14 -14
  40. data/docs/resources/mysql_session.md.erb +10 -10
  41. data/docs/resources/npm.md.erb +12 -12
  42. data/docs/resources/ntp_conf.md.erb +9 -9
  43. data/docs/resources/oneget.md.erb +11 -11
  44. data/docs/resources/os.md.erb +13 -13
  45. data/docs/resources/os_env.md.erb +12 -12
  46. data/docs/resources/package.md.erb +15 -15
  47. data/docs/resources/parse_config.md.erb +13 -13
  48. data/docs/resources/parse_config_file.md.erb +22 -16
  49. data/docs/resources/pip.md.erb +12 -12
  50. data/docs/resources/port.md.erb +18 -18
  51. data/docs/resources/postgres_conf.md.erb +13 -13
  52. data/docs/resources/postgres_session.md.erb +11 -11
  53. data/docs/resources/powershell.md.erb +13 -13
  54. data/docs/resources/process.md.erb +12 -12
  55. data/docs/resources/registry_key.md.erb +17 -17
  56. data/docs/resources/runit_service.md.erb +11 -11
  57. data/docs/resources/security_policy.md.erb +10 -10
  58. data/docs/resources/service.md.erb +17 -17
  59. data/docs/resources/ssh_config.md.erb +13 -13
  60. data/docs/resources/sshd_config.md.erb +14 -14
  61. data/docs/resources/ssl.md.erb +12 -12
  62. data/docs/resources/sys_info.md.erb +10 -10
  63. data/docs/resources/systemd_service.md.erb +11 -11
  64. data/docs/resources/sysv_service.md.erb +11 -11
  65. data/docs/resources/upstart_service.md.erb +11 -11
  66. data/docs/resources/user.md.erb +20 -20
  67. data/docs/resources/users.md.erb +19 -19
  68. data/docs/resources/vbscript.md.erb +9 -9
  69. data/docs/resources/windows_feature.md.erb +10 -10
  70. data/docs/resources/wmi.md.erb +10 -10
  71. data/docs/resources/xinetd_conf.md.erb +17 -17
  72. data/docs/resources/yaml.md.erb +10 -10
  73. data/docs/resources/yum.md.erb +16 -16
  74. data/examples/meta-profile/README.md +0 -5
  75. data/lib/inspec/base_cli.rb +6 -0
  76. data/lib/inspec/cli.rb +10 -3
  77. data/lib/inspec/profile.rb +3 -3
  78. data/lib/inspec/rspec_json_formatter.rb +24 -15
  79. data/lib/inspec/version.rb +1 -1
  80. data/lib/resources/registry_key.rb +15 -5
  81. data/lib/utils/filter.rb +1 -0
  82. metadata +3 -4
@@ -6,7 +6,7 @@ title: About the file Resource
6
6
 
7
7
  Use the `file` InSpec audit resource to test all system file types, including files, directories, symbolic links, named pipes, sockets, character devices, block devices, and doors.
8
8
 
9
- # Syntax
9
+ ## Syntax
10
10
 
11
11
  A `file` resource block declares the location of the file type to be tested, what type that file should be (if required), and then one (or more) matchers:
12
12
 
@@ -21,33 +21,33 @@ where
21
21
  * `'value'` is the value to be tested
22
22
 
23
23
 
24
- # Matchers
24
+ ## Matchers
25
25
 
26
26
  This InSpec audit resource has the following matchers:
27
27
 
28
- ## be
28
+ ### be
29
29
 
30
30
  <%= partial "/shared/matcher_be" %>
31
31
 
32
- ## be_block_device
32
+ ### be_block_device
33
33
 
34
34
  The `be_block_device` matcher tests if the file exists as a block device, such as `/dev/disk0` or `/dev/disk0s9`:
35
35
 
36
36
  it { should be_block_device }
37
37
 
38
- ## be_character_device
38
+ ### be_character_device
39
39
 
40
40
  The `be_character_device` matcher tests if the file exists as a character device (that corresponds to a block device), such as `/dev/rdisk0` or `/dev/rdisk0s9`:
41
41
 
42
42
  it { should be_character_device }
43
43
 
44
- ## be_directory
44
+ ### be_directory
45
45
 
46
46
  The `be_directory` matcher tests if the file exists as a directory, such as `/etc/passwd`, `/etc/shadow`, or `/var/log/httpd`:
47
47
 
48
48
  it { should be_directory }
49
49
 
50
- ## be_executable
50
+ ### be_executable
51
51
 
52
52
  The `be_executable` matcher tests if the file exists as an executable:
53
53
 
@@ -65,49 +65,49 @@ a user:
65
65
 
66
66
  it { should be_executable.by_user('user') }
67
67
 
68
- ## be_file
68
+ ### be_file
69
69
 
70
70
  The `be_file` matcher tests if the file exists as a file. This can be useful with configuration files like `/etc/passwd` where there typically is not an associated file extension---`passwd.txt`:
71
71
 
72
72
  it { should be_file }
73
73
 
74
- ## be_grouped_into
74
+ ### be_grouped_into
75
75
 
76
76
  The `be_grouped_into` matcher tests if the file exists as part of the named group:
77
77
 
78
78
  it { should be_grouped_into 'group' }
79
79
 
80
- ## be_immutable
80
+ ### be_immutable
81
81
 
82
82
  The `be_immutable` matcher tests if the file is immutable, i.e. "cannot be changed":
83
83
 
84
84
  it { should be_immutable }
85
85
 
86
- ## be_linked_to
86
+ ### be_linked_to
87
87
 
88
88
  The `be_linked_to` matcher tests if the file is linked to the named target:
89
89
 
90
90
  it { should be_linked_to '/etc/target-file' }
91
91
 
92
- ## be_mounted
92
+ ### be_mounted
93
93
 
94
94
  The `be_mounted` matcher tests if the file is accessible from the file system:
95
95
 
96
96
  it { should be_mounted }
97
97
 
98
- ## be_owned_by
98
+ ### be_owned_by
99
99
 
100
100
  The `be_owned_by` matcher tests if the file is owned by the named user, such as `root`:
101
101
 
102
102
  it { should be_owned_by 'root' }
103
103
 
104
- ## be_pipe
104
+ ### be_pipe
105
105
 
106
106
  The `be_pipe` matcher tests if the file exists as first-in, first-out special file (`.fifo`) that is typically used to define a named pipe, such as `/var/log/nginx/access.log.fifo`:
107
107
 
108
108
  it { should be_pipe }
109
109
 
110
- ## be_readable
110
+ ### be_readable
111
111
 
112
112
  The `be_readable` matcher tests if the file is readable:
113
113
 
@@ -125,25 +125,25 @@ a user:
125
125
 
126
126
  it { should be_readable.by_user('user') }
127
127
 
128
- ## be_socket
128
+ ### be_socket
129
129
 
130
130
  The `be_socket` matcher tests if the file exists as socket (`.sock`), such as `/var/run/php-fpm.sock`:
131
131
 
132
132
  it { should be_socket }
133
133
 
134
- ## be_symlink
134
+ ### be_symlink
135
135
 
136
136
  The `be_symlink` matcher tests if the file exists as a symbolic, or soft link that contains an absolute or relative path reference to another file:
137
137
 
138
138
  it { should be_symlink }
139
139
 
140
- ## be_version
140
+ ### be_version
141
141
 
142
142
  The `be_version` matcher tests the version of the file:
143
143
 
144
144
  it { should be_version '1.2.3' }
145
145
 
146
- ## be_writable
146
+ ### be_writable
147
147
 
148
148
  The `be_writable` matcher tests if the file is writable:
149
149
 
@@ -161,11 +161,11 @@ a user:
161
161
 
162
162
  it { should be_writable.by_user('user') }
163
163
 
164
- ## cmp
164
+ ### cmp
165
165
 
166
166
  <%= partial "/shared/matcher_cmp" %>
167
167
 
168
- ## content
168
+ ### content
169
169
 
170
170
  The `content` matcher tests if contents in the file match the value specified in a regular expression. The values of the `content` matcher are arbitrary and depend on the file type being tested and also the type of information that is expected to be in that file:
171
171
 
@@ -179,67 +179,67 @@ The following complete example tests the `pg_hba.conf` file in PostgreSQL for MD
179
179
  its('content') { should match(%r{host\s.*?all\s.*?all\s.*?::1\/128\s.*?md5})
180
180
  end
181
181
 
182
- ## eq
182
+ ### eq
183
183
 
184
184
  <%= partial "/shared/matcher_eq" %>
185
185
 
186
- ## exist
186
+ ### exist
187
187
 
188
188
  The `exist` matcher tests if the named file exists:
189
189
 
190
190
  it { should exist }
191
191
 
192
- ## file_version
192
+ ### file_version
193
193
 
194
194
  The `file_version` matcher tests if the file's version matches the specified value. The difference between a file's "file version" and "product version" is that the file version is the version number of the file itself, whereas the product version is the version number associated with the application from which that file originates:
195
195
 
196
196
  its('file_version') { should eq '1.2.3' }
197
197
 
198
- ## group
198
+ ### group
199
199
 
200
200
  The `group` matcher tests if the group to which a file belongs matches the specified value:
201
201
 
202
202
  its('group') { should eq 'admins' }
203
203
 
204
- ## have_mode
204
+ ### have_mode
205
205
 
206
206
  The `have_mode` matcher tests if a file has a mode assigned to it:
207
207
 
208
208
  it { should have_mode }
209
209
 
210
- ## include
210
+ ### include
211
211
 
212
212
  <%= partial "/shared/matcher_include" %>
213
213
 
214
- ## link_path
214
+ ### link_path
215
215
 
216
216
  The `link_path` matcher tests if the file exists at the specified path:
217
217
 
218
218
  its('link_path') { should eq '/some/path/to/file' }
219
219
 
220
- ## link_target
220
+ ### link_target
221
221
 
222
222
  The `link_target` matcher tests if a file that is linked to this file exists at the specified path:
223
223
 
224
224
  its('link_target') { should eq '/some/path/to/file' }
225
225
 
226
- ## match
226
+ ### match
227
227
 
228
228
  <%= partial "/shared/matcher_match" %>
229
229
 
230
- ## md5sum
230
+ ### md5sum
231
231
 
232
232
  The `md5sum` matcher tests if the MD5 checksum for a file matches the specified value:
233
233
 
234
234
  its('md5sum') { should eq '3329x3hf9130gjs9jlasf2305mx91s4j' }
235
235
 
236
- ## mode
236
+ ### mode
237
237
 
238
238
  The `mode` matcher tests if the mode assigned to the file matches the specified value:
239
239
 
240
240
  its('mode') { should cmp '0644' }
241
241
 
242
- ## mtime
242
+ ### mtime
243
243
 
244
244
  The `mtime` matcher tests if the file modification time for the file matches the specified value:
245
245
 
@@ -252,31 +252,31 @@ or:
252
252
  it { should >= Time.now.to_i - 1000}
253
253
  end
254
254
 
255
- ## owner
255
+ ### owner
256
256
 
257
257
  The `owner` matcher tests if the owner of the file matches the specified value:
258
258
 
259
259
  its('owner') { should eq 'root' }
260
260
 
261
- ## product_version
261
+ ### product_version
262
262
 
263
263
  The `product_version` matcher tests if the file's product version matches the specified value. The difference between a file's "file version" and "product version" is that the file version is the version number of the file itself, whereas the product version is the version number associated with the application from which that file originates:
264
264
 
265
265
  its('product_version') { should eq 2.3.4 }
266
266
 
267
- ## selinux_label
267
+ ### selinux_label
268
268
 
269
269
  The `selinux_label` matcher tests if the SELinux label for a file matches the specified value:
270
270
 
271
271
  its('selinux_label') { should eq 'system_u:system_r:httpd_t:s0' }
272
272
 
273
- ## sha256sum
273
+ ### sha256sum
274
274
 
275
275
  The `sha256sum` matcher tests if the SHA-256 checksum for a file matches the specified value:
276
276
 
277
277
  its('sha256sum') { should eq 'b837ch38lh19bb8eaopl8jvxwd2e4g58jn9lkho1w3ed9jbkeicalplaad9k0pjn' }
278
278
 
279
- ## size
279
+ ### size
280
280
 
281
281
  The `size` matcher tests if a file's size matches, is greater than, or is less than the specified value. For example, equal:
282
282
 
@@ -290,7 +290,7 @@ Less than:
290
290
 
291
291
  its('size') { should < 10240 }
292
292
 
293
- ## type
293
+ ### type
294
294
 
295
295
  The `type` matcher tests if the first letter of the file's mode string contains one of the following characters:
296
296
 
@@ -311,11 +311,11 @@ or:
311
311
 
312
312
  its('type') { should eq 'socket' }
313
313
 
314
- # Examples
314
+ ## Examples
315
315
 
316
316
  The following examples show how to use this InSpec audit resource.
317
317
 
318
- ## Test the contents of a file for MD5 requirements
318
+ ### Test the contents of a file for MD5 requirements
319
319
 
320
320
  describe file(hba_config_file) do
321
321
  its('content') { should match /local\s.*?all\s.*?all\s.*?md5/ }
@@ -323,26 +323,26 @@ The following examples show how to use this InSpec audit resource.
323
323
  its('content') { should match %r{/host\s.*?all\s.*?all\s.*?::1\/128\s.*?md5/} }
324
324
  end
325
325
 
326
- ## Test if a file exists
326
+ ### Test if a file exists
327
327
 
328
328
  describe file('/tmp') do
329
329
  it { should exist }
330
330
  end
331
331
 
332
- ## Test that a file does not exist
332
+ ### Test that a file does not exist
333
333
 
334
334
  describe file('/tmpest') do
335
335
  it { should_not exist }
336
336
  end
337
337
 
338
- ## Test if a path is a directory
338
+ ### Test if a path is a directory
339
339
 
340
340
  describe file('/tmp') do
341
341
  its('type') { should eq :directory }
342
342
  it { should be_directory }
343
343
  end
344
344
 
345
- ## Test if a path is a file and not a directory
345
+ ### Test if a path is a file and not a directory
346
346
 
347
347
  describe file('/proc/version') do
348
348
  its('type') { should eq 'file' }
@@ -350,7 +350,7 @@ The following examples show how to use this InSpec audit resource.
350
350
  it { should_not be_directory }
351
351
  end
352
352
 
353
- ## Test if a file is a symbolic link
353
+ ### Test if a file is a symbolic link
354
354
 
355
355
  describe file('/dev/stdout') do
356
356
  its('type') { should eq 'symlink' }
@@ -359,7 +359,7 @@ The following examples show how to use this InSpec audit resource.
359
359
  it { should_not be_directory }
360
360
  end
361
361
 
362
- ## Test if a file is a character device
362
+ ### Test if a file is a character device
363
363
 
364
364
  describe file('/dev/zero') do
365
365
  its('type') { should eq 'character' }
@@ -368,7 +368,7 @@ The following examples show how to use this InSpec audit resource.
368
368
  it { should_not be_directory }
369
369
  end
370
370
 
371
- ## Test if a file is a block device
371
+ ### Test if a file is a block device
372
372
 
373
373
  describe file('/dev/zero') do
374
374
  its('type') { should eq 'block' }
@@ -377,51 +377,51 @@ The following examples show how to use this InSpec audit resource.
377
377
  it { should_not be_directory }
378
378
  end
379
379
 
380
- ## Test the mode for a file
380
+ ### Test the mode for a file
381
381
 
382
382
  describe file('/dev') do
383
383
  its('mode') { should cmp '00755' }
384
384
  end
385
385
 
386
- ## Test the owner of a file
386
+ ### Test the owner of a file
387
387
 
388
388
  describe file('/root') do
389
389
  its('owner') { should eq 'root' }
390
390
  end
391
391
 
392
- ## Test if a file is owned by the root user
392
+ ### Test if a file is owned by the root user
393
393
 
394
394
  describe file('/dev') do
395
395
  it { should be_owned_by 'root' }
396
396
  end
397
397
 
398
- ## Test the mtime for a file
398
+ ### Test the mtime for a file
399
399
 
400
400
  describe file('/').mtime.to_i do
401
401
  it { should <= Time.now.to_i }
402
402
  it { should >= Time.now.to_i - 1000}
403
403
  end
404
404
 
405
- ## Test that a file's size is between 64 and 10240
405
+ ### Test that a file's size is between 64 and 10240
406
406
 
407
407
  describe file('/') do
408
408
  its('size') { should be > 64 }
409
409
  its('size') { should be < 10240 }
410
410
  end
411
411
 
412
- ## Test that a file's size is zero
412
+ ### Test that a file's size is zero
413
413
 
414
414
  describe file('/proc/cpuinfo') do
415
415
  its('size') { should be 0 }
416
416
  end
417
417
 
418
- ## Test that a file is not mounted
418
+ ### Test that a file is not mounted
419
419
 
420
420
  describe file('/proc/cpuinfo') do
421
421
  it { should_not be_mounted }
422
422
  end
423
423
 
424
- ## Test an MD5 checksum
424
+ ### Test an MD5 checksum
425
425
 
426
426
  require 'digest'
427
427
  cpuinfo = file('/proc/cpuinfo').content
@@ -432,7 +432,7 @@ The following examples show how to use this InSpec audit resource.
432
432
  its('md5sum') { should eq md5sum }
433
433
  end
434
434
 
435
- ## Test an SHA-256 checksum
435
+ ### Test an SHA-256 checksum
436
436
 
437
437
  require 'digest'
438
438
  cpuinfo = file('/proc/cpuinfo').content
@@ -443,7 +443,7 @@ The following examples show how to use this InSpec audit resource.
443
443
  its('sha256sum') { should eq sha256sum }
444
444
  end
445
445
 
446
- ## Verify NTP
446
+ ### Verify NTP
447
447
 
448
448
  The following example shows how to use the `file` audit resource to verify if the `ntp.conf` and `leap-seconds` files are present, and then the `command` resource to verify if NTP is installed and running:
449
449
 
@@ -6,7 +6,7 @@ title: About the gem Resource
6
6
 
7
7
  Use the `gem` InSpec audit resource to test if a global Gem package is installed.
8
8
 
9
- # Syntax
9
+ ## Syntax
10
10
 
11
11
  A `gem` resource block declares a package and (optionally) a package version:
12
12
 
@@ -19,54 +19,54 @@ where
19
19
  * `('gem_package_name')` must specify a Gem package, such as `'rubocop'`
20
20
  * `be_installed` is a valid matcher for this resource
21
21
 
22
- # Matchers
22
+ ## Matchers
23
23
 
24
24
  This InSpec audit resource has the following matchers:
25
25
 
26
- ## be
26
+ ### be
27
27
 
28
28
  <%= partial "/shared/matcher_be" %>
29
29
 
30
- ## be_installed
30
+ ### be_installed
31
31
 
32
32
  The `be_installed` matcher tests if the named Gem package is installed:
33
33
 
34
34
  it { should be_installed }
35
35
 
36
- ## cmp
36
+ ### cmp
37
37
 
38
38
  <%= partial "/shared/matcher_cmp" %>
39
39
 
40
- ## eq
40
+ ### eq
41
41
 
42
42
  <%= partial "/shared/matcher_eq" %>
43
43
 
44
- ## include
44
+ ### include
45
45
 
46
46
  <%= partial "/shared/matcher_include" %>
47
47
 
48
- ## match
48
+ ### match
49
49
 
50
50
  <%= partial "/shared/matcher_match" %>
51
51
 
52
- ## version
52
+ ### version
53
53
 
54
54
  The `version` matcher tests if the named package version is on the system:
55
55
 
56
56
  its('version') { should eq '0.33.0' }
57
57
 
58
- # Examples
58
+ ## Examples
59
59
 
60
60
  The following examples show how to use this InSpec audit resource.
61
61
 
62
- ## Verify that a gem package is installed, with a specific version
62
+ ### Verify that a gem package is installed, with a specific version
63
63
 
64
64
  describe gem('rubocop') do
65
65
  it { should be_installed }
66
66
  its('version') { should eq '0.33.0' }
67
67
  end
68
68
 
69
- ## Verify that a gem package is not installed
69
+ ### Verify that a gem package is not installed
70
70
 
71
71
  describe gem('rubocop') do
72
72
  it { should_not be_installed }