inspec 2.0.17 → 2.0.32
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +28 -7
- data/MAINTAINERS.md +3 -1
- data/MAINTAINERS.toml +6 -1
- data/README.md +3 -4
- data/Rakefile +60 -22
- data/docs/matchers.md +15 -12
- data/docs/resources/auditd.md.erb +3 -3
- data/docs/resources/aws_config_recorder.md.erb +71 -0
- data/docs/resources/aws_ec2_instance.md.erb +1 -1
- data/docs/resources/aws_iam_policy.md.erb +2 -4
- data/docs/resources/aws_iam_role.md.erb +12 -14
- data/docs/resources/aws_route_table.md.erb +12 -12
- data/docs/resources/aws_security_group.md.erb +5 -6
- data/docs/resources/aws_security_groups.md.erb +2 -3
- data/docs/resources/aws_sns_topic.md.erb +12 -12
- data/docs/resources/crontab.md.erb +2 -1
- data/docs/resources/dh_params.md.erb +1 -13
- data/docs/resources/docker.md.erb +74 -19
- data/docs/resources/host.md.erb +17 -9
- data/docs/resources/http.md.erb +113 -17
- data/docs/resources/json.md.erb +6 -5
- data/docs/resources/kernel_module.md.erb +29 -16
- data/docs/shell.md +62 -19
- data/lib/inspec/plugins/resource.rb +9 -7
- data/lib/inspec/runner.rb +3 -2
- data/lib/inspec/runner_rspec.rb +1 -0
- data/lib/inspec/version.rb +1 -1
- data/lib/resource_support/aws.rb +1 -0
- data/lib/resources/aws/aws_config_recorder.rb +98 -0
- data/lib/resources/http.rb +1 -1
- data/lib/resources/package.rb +8 -1
- data/lib/resources/parse_config.rb +1 -1
- data/lib/resources/virtualization.rb +4 -8
- data/lib/utils/database_helpers.rb +1 -1
- metadata +4 -2
@@ -25,21 +25,9 @@ A `dh_params` resource block declares a parameter file to be tested.
|
|
25
25
|
|
26
26
|
<br>
|
27
27
|
|
28
|
-
## Resource Parameter Examples
|
29
|
-
|
30
|
-
### dh_params?
|
31
|
-
|
32
|
-
Verify whether file contains DH parameters:
|
33
|
-
|
34
|
-
describe dh_params('/path/to/file.dh_pem') do
|
35
|
-
it { should be_dh_params }
|
36
|
-
end
|
37
|
-
|
38
|
-
<br>
|
39
|
-
|
40
28
|
## Properties
|
41
29
|
|
42
|
-
generator
|
30
|
+
* `generator`, `modulus`, `prime_length`, `pem`, `text`
|
43
31
|
|
44
32
|
<br>
|
45
33
|
|
@@ -5,7 +5,7 @@ platform: linux
|
|
5
5
|
|
6
6
|
# docker
|
7
7
|
|
8
|
-
Use the `docker` InSpec audit resource to test configuration data for
|
8
|
+
Use the `docker` InSpec audit resource to test configuration data for the Docker daemon. It is a very comprehensive resource. See also: [docker_container](docker_container) and [docker_image](docker_image), too.
|
9
9
|
|
10
10
|
<br>
|
11
11
|
|
@@ -25,8 +25,8 @@ or:
|
|
25
25
|
|
26
26
|
where
|
27
27
|
|
28
|
-
* `.where()` may specify a specific item and value, to which the
|
29
|
-
* `commands`, `ids`, `images`, `labels`, `local_volumes`, `mounts`, `names`, `networks`, `ports`, `sizes` and `
|
28
|
+
* `.where()` may specify a specific item and value, to which the resource parameters are compared
|
29
|
+
* `commands`, `ids`, `images`, `labels`, `local_volumes`, `mounts`, `names`, `networks`, `ports`, `sizes` and `status` are valid parameters for `containers`
|
30
30
|
|
31
31
|
The `docker` resource block also declares allows you to write test for many images:
|
32
32
|
|
@@ -42,8 +42,7 @@ or if you want to query specific images:
|
|
42
42
|
|
43
43
|
where
|
44
44
|
|
45
|
-
* `.where()` may specify a specific
|
46
|
-
* `commands`, `ids`, `images`, `labels`, `local_volumes`, `mounts`, `names`, `networks`, `ports`, `sizes` and `'status'` are valid matchers for `containers`
|
45
|
+
* `.where()` may specify a specific filter and expected value, against which parameters are compared
|
47
46
|
|
48
47
|
<br>
|
49
48
|
|
@@ -69,7 +68,7 @@ The following examples show how to use this InSpec audit resource.
|
|
69
68
|
### Iterate over all containers to verify host coniguration
|
70
69
|
|
71
70
|
docker.containers.ids.each do |id|
|
72
|
-
# call
|
71
|
+
# call Docker inspect for a specific container id
|
73
72
|
describe docker.object(id) do
|
74
73
|
its(%w(HostConfig Privileged)) { should cmp false }
|
75
74
|
its(%w(HostConfig Privileged)) { should_not cmp true }
|
@@ -90,7 +89,9 @@ The following examples show how to use this InSpec audit resource.
|
|
90
89
|
its(%w(Config Healthcheck)) { should_not eq nil }
|
91
90
|
end
|
92
91
|
|
93
|
-
|
92
|
+
<br>
|
93
|
+
|
94
|
+
## How to run the DevSec Docker baseline profile
|
94
95
|
|
95
96
|
There are two ways to run the `docker-baseline` profile to test Docker via the `docker` resource.
|
96
97
|
|
@@ -108,13 +109,17 @@ Or execute the profile directly via URL:
|
|
108
109
|
|
109
110
|
<br>
|
110
111
|
|
111
|
-
##
|
112
|
+
## Resource Parameters
|
112
113
|
|
113
|
-
|
114
|
+
* `commands`, `ids`, `images`, `labels`, `local_volumes`, `mounts`, `names`, `networks`, `ports`, `sizes` and `status` are valid parameters for `containers`
|
115
|
+
|
116
|
+
<br>
|
117
|
+
|
118
|
+
## Resource Parameter Examples
|
114
119
|
|
115
120
|
### containers
|
116
121
|
|
117
|
-
`containers` returns information about containers as returned by [docker ps -a](https://docs.docker.com/engine/reference/commandline/ps/).
|
122
|
+
`containers` returns information about containers as returned by [docker ps -a](https://docs.docker.com/engine/reference/commandline/ps/).
|
118
123
|
|
119
124
|
describe docker.containers do
|
120
125
|
its('ids') { should include 'sha:71b5df59...442b' }
|
@@ -124,10 +129,17 @@ For a full list of available matchers, please visit our [matchers page](https://
|
|
124
129
|
its('labels') { should include 'License=GPLv2,Vendor=CentOS' }
|
125
130
|
end
|
126
131
|
|
132
|
+
### object('id')
|
133
|
+
|
134
|
+
`object` returns low-level information about Docker objects. It is calling [docker inspect](https://docs.docker.com/engine/reference/commandline/info/) under the hood.
|
135
|
+
|
136
|
+
describe docker.object(id) do
|
137
|
+
its('Configuration.Path') { should eq 'value' }
|
138
|
+
end
|
127
139
|
|
128
140
|
### images
|
129
141
|
|
130
|
-
`images` returns information about
|
142
|
+
`images` returns information about Docker image as returned by [docker images](https://docs.docker.com/engine/reference/commandline/images/).
|
131
143
|
|
132
144
|
describe docker.images do
|
133
145
|
its('ids') { should include 'sha:12b5df59...442b' }
|
@@ -136,6 +148,14 @@ For a full list of available matchers, please visit our [matchers page](https://
|
|
136
148
|
its('sizes') { should_not include "1.41 GB" }
|
137
149
|
end
|
138
150
|
|
151
|
+
### info
|
152
|
+
|
153
|
+
`info` returns the parsed result of [docker info](https://docs.docker.com/engine/reference/commandline/info/)
|
154
|
+
|
155
|
+
describe docker.info do
|
156
|
+
its('Configuration.Path') { should eq 'value' }
|
157
|
+
end
|
158
|
+
|
139
159
|
### version
|
140
160
|
|
141
161
|
`info` returns the parsed result of [docker version](https://docs.docker.com/engine/reference/commandline/version/)
|
@@ -145,20 +165,55 @@ For a full list of available matchers, please visit our [matchers page](https://
|
|
145
165
|
its('Client.Version') { should cmp >= '1.12'}
|
146
166
|
end
|
147
167
|
|
168
|
+
<br>
|
148
169
|
|
149
|
-
|
170
|
+
## Properties
|
150
171
|
|
151
|
-
`
|
172
|
+
* `id`, `image`, `repo`, `tag`, `ports`, `command`
|
152
173
|
|
153
|
-
|
154
|
-
|
174
|
+
<br>
|
175
|
+
|
176
|
+
## Property Examples
|
177
|
+
|
178
|
+
### id
|
179
|
+
|
180
|
+
describe docker_container(name: 'an-echo-server') do
|
181
|
+
its('id') { should_not eq '' }
|
155
182
|
end
|
156
183
|
|
184
|
+
### image
|
157
185
|
|
158
|
-
|
186
|
+
describe docker_container(name: 'an-echo-server') do
|
187
|
+
its('image') { should eq 'busybox:latest' }
|
188
|
+
end
|
159
189
|
|
160
|
-
|
190
|
+
### repo
|
161
191
|
|
162
|
-
describe
|
163
|
-
its('
|
192
|
+
describe docker_container(name: 'an-echo-server') do
|
193
|
+
its('repo') { should eq 'busybox' }
|
194
|
+
end
|
195
|
+
|
196
|
+
### tag
|
197
|
+
|
198
|
+
describe docker_container(name: 'an-echo-server') do
|
199
|
+
its('tag') { should eq 'latest' }
|
200
|
+
end
|
201
|
+
|
202
|
+
### ports
|
203
|
+
|
204
|
+
describe docker_container(name: 'an-echo-server') do
|
205
|
+
its('ports') { should eq "0.0.0.0:1234->1234/tcp" }
|
206
|
+
end
|
207
|
+
|
208
|
+
### command
|
209
|
+
|
210
|
+
describe docker_container(name: 'an-echo-server') do
|
211
|
+
its('command') { should eq 'nc -ll -p 1234 -e /bin/cat' }
|
164
212
|
end
|
213
|
+
|
214
|
+
<br>
|
215
|
+
|
216
|
+
## Matchers
|
217
|
+
|
218
|
+
For a full list of available matchers, please visit our [matchers page](https://www.inspec.io/docs/reference/matchers/).
|
219
|
+
|
data/docs/resources/host.md.erb
CHANGED
@@ -28,10 +28,24 @@ where
|
|
28
28
|
|
29
29
|
<br>
|
30
30
|
|
31
|
-
##
|
31
|
+
## Resource Properties
|
32
|
+
|
33
|
+
* `connection`, `ipaddress`, `protocol`, `socket`
|
34
|
+
|
35
|
+
<br>
|
36
|
+
|
37
|
+
## Resource Examples
|
32
38
|
|
33
39
|
The following examples show how to use this InSpec audit resource.
|
34
40
|
|
41
|
+
### ipaddress
|
42
|
+
|
43
|
+
The `ipaddress` matcher tests if a host name is resolvable to a specific IP address:
|
44
|
+
|
45
|
+
describe host('example.com') do
|
46
|
+
its('ipaddress') { should include '93.184.216.34' }
|
47
|
+
end
|
48
|
+
|
35
49
|
### Verify host name is reachable over a specific protocol and port number
|
36
50
|
|
37
51
|
describe host('example.com', port: 80, protocol: 'tcp') do
|
@@ -42,7 +56,7 @@ The following examples show how to use this InSpec audit resource.
|
|
42
56
|
|
43
57
|
describe host('example.com') do
|
44
58
|
it { should be_resolvable }
|
45
|
-
its('ipaddress') { should include '
|
59
|
+
its('ipaddress') { should include '93.184.216.34' }
|
46
60
|
end
|
47
61
|
|
48
62
|
### Review the connection setup and socket contents when checking reachability
|
@@ -57,7 +71,7 @@ The following examples show how to use this InSpec audit resource.
|
|
57
71
|
|
58
72
|
## Matchers
|
59
73
|
|
60
|
-
For a full list of available matchers, please visit our [matchers page](https://www.inspec.io/docs/reference/matchers/).
|
74
|
+
This InSpec audit resource has the following special matchers. For a full list of available matchers, please visit our [matchers page](https://www.inspec.io/docs/reference/matchers/).
|
61
75
|
|
62
76
|
### be_reachable
|
63
77
|
|
@@ -70,9 +84,3 @@ The `be_reachable` matcher tests if the host name is available:
|
|
70
84
|
The `be_resolvable` matcher tests for host name resolution, i.e. "resolvable to an IP address":
|
71
85
|
|
72
86
|
it { should be_resolvable }
|
73
|
-
|
74
|
-
### ipaddress
|
75
|
-
|
76
|
-
The `ipaddress` matcher tests if a host name is resolvable to a specific IP address:
|
77
|
-
|
78
|
-
its('ipaddress') { should include '93.184.216.34' }
|
data/docs/resources/http.md.erb
CHANGED
@@ -33,6 +33,33 @@ where
|
|
33
33
|
|
34
34
|
<br>
|
35
35
|
|
36
|
+
## Example
|
37
|
+
|
38
|
+
The following examples show how to use this InSpec audit resource. An `http` resource block declares the configuration settings to be tested:
|
39
|
+
|
40
|
+
### Simple http test
|
41
|
+
|
42
|
+
For example, a service is listening on default http port can be tested like this:
|
43
|
+
|
44
|
+
describe http('http://localhost') do
|
45
|
+
its('status') { should cmp 200 }
|
46
|
+
end
|
47
|
+
|
48
|
+
### Complex http test
|
49
|
+
|
50
|
+
describe http('http://localhost:8080/ping',
|
51
|
+
auth: {user: 'user', pass: 'test'},
|
52
|
+
params: {format: 'html'},
|
53
|
+
method: 'POST',
|
54
|
+
headers: {'Content-Type' => 'application/json'},
|
55
|
+
data: '{"data":{"a":"1","b":"five"}}') do
|
56
|
+
its('status') { should cmp 200 }
|
57
|
+
its('body') { should cmp 'pong' }
|
58
|
+
its('headers.Content-Type') { should cmp 'text/html' }
|
59
|
+
end
|
60
|
+
|
61
|
+
<br>
|
62
|
+
|
36
63
|
## Local vs. Remote
|
37
64
|
|
38
65
|
Beginning with InSpec 1.41, you can enable the ability to have the HTTP test execute on the remote target:
|
@@ -45,39 +72,102 @@ In InSpec 2.0, the HTTP test will automatically execute remotely whenever InSpec
|
|
45
72
|
|
46
73
|
<br>
|
47
74
|
|
48
|
-
##
|
75
|
+
## Parameters
|
49
76
|
|
50
|
-
|
77
|
+
* `url`, `auth`, `params`, `method`, `headers`, `data`, `open_timeout`, `read_timeout`, `ssl_verify`
|
51
78
|
|
52
|
-
|
79
|
+
## Parameter Examples
|
53
80
|
|
54
|
-
|
81
|
+
### url
|
55
82
|
|
56
|
-
|
83
|
+
`('url')` is the url to test.
|
57
84
|
|
58
|
-
|
85
|
+
describe http('http://localhost:8080/ping') do
|
86
|
+
...
|
87
|
+
end
|
59
88
|
|
60
|
-
|
89
|
+
### auth
|
61
90
|
|
62
|
-
|
63
|
-
|
91
|
+
`auth: { user: 'user', pass: 'test' }` may be specified for basic auth request.
|
92
|
+
|
93
|
+
describe http('http://localhost:8080/ping',
|
94
|
+
auth: {user: 'user', pass: 'test'}) do
|
95
|
+
...
|
64
96
|
end
|
65
97
|
|
66
|
-
###
|
98
|
+
### params
|
99
|
+
|
100
|
+
`{params}` may be specified for http request parameters.
|
67
101
|
|
68
102
|
describe http('http://localhost:8080/ping',
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
103
|
+
params: {format: 'html'}) do
|
104
|
+
...
|
105
|
+
end
|
106
|
+
|
107
|
+
### method
|
108
|
+
|
109
|
+
`'method'` may be specified for http request method (default to 'GET').
|
110
|
+
|
111
|
+
describe http('http://localhost:8080/ping',
|
112
|
+
method: 'POST') do
|
113
|
+
...
|
114
|
+
end
|
115
|
+
|
116
|
+
### headers
|
117
|
+
|
118
|
+
`{headers}` may be specified for http request headers.
|
119
|
+
|
120
|
+
describe http('http://localhost:8080/ping',
|
121
|
+
headers: {'Content-Type' => 'application/json'}) do
|
122
|
+
...
|
123
|
+
end
|
124
|
+
|
125
|
+
### data
|
126
|
+
|
127
|
+
`data` may be specified for http request body.
|
128
|
+
|
129
|
+
describe http('http://localhost:8080/ping',
|
73
130
|
data: '{"data":{"a":"1","b":"five"}}') do
|
74
|
-
|
75
|
-
|
76
|
-
|
131
|
+
...
|
132
|
+
end
|
133
|
+
|
134
|
+
### open_timeout
|
135
|
+
|
136
|
+
`open_timeout` may be specified for a timeout for opening connections (default to 60).
|
137
|
+
|
138
|
+
describe('http://localhost:8080/ping',
|
139
|
+
open_timeout: '90') do
|
140
|
+
...
|
141
|
+
end
|
142
|
+
|
143
|
+
### read_timeout
|
144
|
+
|
145
|
+
`read_timeout` may be specified for a timeout for reading connections (default to 60).
|
146
|
+
|
147
|
+
describe('http://localhost:8080/ping',
|
148
|
+
read_timeout: '90') do
|
149
|
+
...
|
77
150
|
end
|
78
151
|
|
152
|
+
### ssl_verify
|
153
|
+
|
154
|
+
`ssl_verify` may be specified to enable or disable verification of SSL certificates (default to `true`).
|
155
|
+
|
156
|
+
describe('http://localhost:8080/ping',
|
157
|
+
ssl_verify: 'true') do
|
158
|
+
...
|
159
|
+
end
|
160
|
+
|
161
|
+
<br>
|
162
|
+
|
163
|
+
## Properties
|
164
|
+
|
165
|
+
* `body`, `headers`, `http_method`, `status`,
|
166
|
+
|
79
167
|
<br>
|
80
168
|
|
169
|
+
## Property Examples
|
170
|
+
|
81
171
|
### body
|
82
172
|
|
83
173
|
The `body` matcher tests body content of http response:
|
@@ -99,3 +189,9 @@ Individual headers can be tested via:
|
|
99
189
|
The `status` matcher tests status of the http response:
|
100
190
|
|
101
191
|
its('status') { should eq 200 }
|
192
|
+
|
193
|
+
<br>
|
194
|
+
|
195
|
+
## Matchers
|
196
|
+
|
197
|
+
For a full list of available matchers, please visit our [matchers page](https://www.inspec.io/docs/reference/matchers/).
|
data/docs/resources/json.md.erb
CHANGED
@@ -43,6 +43,12 @@ where
|
|
43
43
|
|
44
44
|
The following examples show how to use this InSpec audit resource.
|
45
45
|
|
46
|
+
### name
|
47
|
+
|
48
|
+
The `name` matcher tests the value of the filename as read from a JSON file versus the value declared in the test:
|
49
|
+
|
50
|
+
its('name') { should eq '/tmp/example.json' }
|
51
|
+
|
46
52
|
### Test a cookbook version in a policyfile.lock.json file
|
47
53
|
|
48
54
|
describe json('policyfile.lock.json') do
|
@@ -55,8 +61,3 @@ The following examples show how to use this InSpec audit resource.
|
|
55
61
|
|
56
62
|
For a full list of available matchers, please visit our [matchers page](https://www.inspec.io/docs/reference/matchers/).
|
57
63
|
|
58
|
-
### name
|
59
|
-
|
60
|
-
The `name` matcher tests the value of `name` as read from a JSON file versus the value declared in the test:
|
61
|
-
|
62
|
-
its('name') { should eq 'foo' }
|
@@ -18,7 +18,7 @@ method.
|
|
18
18
|
## Syntax
|
19
19
|
|
20
20
|
A `kernel_module` resource block declares a module name, and then tests if that
|
21
|
-
module is a
|
21
|
+
module is a loaded kernel module, if it is enabled, disabled or if it is
|
22
22
|
blacklisted:
|
23
23
|
|
24
24
|
describe kernel_module('module_name') do
|
@@ -30,7 +30,7 @@ blacklisted:
|
|
30
30
|
where
|
31
31
|
|
32
32
|
* `'module_name'` must specify a kernel module, such as `'bridge'`
|
33
|
-
* `{ should be_loaded }` tests if the module is a
|
33
|
+
* `{ should be_loaded }` tests if the module is a loaded kernel module
|
34
34
|
* `{ should be_blacklisted }` tests if the module is blacklisted or if the module is disabled via a fake install using /bin/false or /bin/true
|
35
35
|
* `{ should be_disabled }` tests if the module is disabled via a fake install using /bin/false or /bin/true
|
36
36
|
|
@@ -40,14 +40,20 @@ where
|
|
40
40
|
|
41
41
|
The following examples show how to use this InSpec audit resource.
|
42
42
|
|
43
|
-
###
|
43
|
+
### version
|
44
|
+
|
45
|
+
The `version` property tests if the kernel module on the system has the correct version:
|
46
|
+
|
47
|
+
its('version') { should eq '3.2.2' }
|
48
|
+
|
49
|
+
### Test a kernel module's 'version'
|
44
50
|
|
45
51
|
describe kernel_module('bridge') do
|
46
52
|
it { should be_loaded }
|
47
|
-
its(
|
53
|
+
its('version') { should cmp >= '2.2.2' }
|
48
54
|
end
|
49
55
|
|
50
|
-
### Test if a module is loaded, not disabled and not blacklisted
|
56
|
+
### Test if a kernel module is loaded, not disabled, and not blacklisted
|
51
57
|
|
52
58
|
describe kernel_module('video') do
|
53
59
|
it { should be_loaded }
|
@@ -55,34 +61,34 @@ The following examples show how to use this InSpec audit resource.
|
|
55
61
|
it { should_not be_blacklisted }
|
56
62
|
end
|
57
63
|
|
58
|
-
### Check if a module is blacklisted
|
64
|
+
### Check if a kernel module is blacklisted
|
59
65
|
|
60
66
|
describe kernel_module('floppy') do
|
61
67
|
it { should be_blacklisted }
|
62
68
|
end
|
63
69
|
|
64
|
-
###
|
70
|
+
### Check if a kernel module is *not* blacklisted and is loaded
|
65
71
|
|
66
72
|
describe kernel_module('video') do
|
67
73
|
it { should_not be_blacklisted }
|
68
74
|
it { should be_loaded }
|
69
75
|
end
|
70
76
|
|
71
|
-
###
|
77
|
+
### Check if a kernel module is disabled via 'bin_false'
|
72
78
|
|
73
79
|
describe kernel_module('sstfb') do
|
74
80
|
it { should_not be_loaded }
|
75
81
|
it { should be_disabled }
|
76
82
|
end
|
77
83
|
|
78
|
-
###
|
84
|
+
### Check if a kernel module is 'blacklisted'/'disabled' via 'bin_true'
|
79
85
|
|
80
86
|
describe kernel_module('nvidiafb') do
|
81
87
|
it { should_not be_loaded }
|
82
88
|
it { should be_blacklisted }
|
83
89
|
end
|
84
90
|
|
85
|
-
###
|
91
|
+
### Check if a kernel module is not loaded
|
86
92
|
|
87
93
|
describe kernel_module('dhcp') do
|
88
94
|
it { should_not be_loaded }
|
@@ -94,14 +100,21 @@ The following examples show how to use this InSpec audit resource.
|
|
94
100
|
|
95
101
|
For a full list of available matchers, please visit our [matchers page](https://www.inspec.io/docs/reference/matchers/).
|
96
102
|
|
97
|
-
### be_loaded
|
98
103
|
|
99
|
-
|
104
|
+
### be_blacklisted
|
100
105
|
|
101
|
-
|
106
|
+
The `be_blacklisted` matcher tests if the kernel module is a blacklisted module:
|
102
107
|
|
103
|
-
|
108
|
+
it { should be_blacklisted }
|
104
109
|
|
105
|
-
|
110
|
+
### be_disabled
|
106
111
|
|
107
|
-
|
112
|
+
The `be_disabled` matcher tests if the kernel module is disabled:
|
113
|
+
|
114
|
+
it { should be_disabled }
|
115
|
+
|
116
|
+
### be_loaded
|
117
|
+
|
118
|
+
The `be_loaded` matcher tests if the kernel module is loaded:
|
119
|
+
|
120
|
+
it { should be_loaded }
|
data/docs/shell.md
CHANGED
@@ -26,7 +26,7 @@ $ inspec help shell # This will describe inspec shell usage
|
|
26
26
|
|
27
27
|
If you wish to connect to a remote machine (called a target within
|
28
28
|
InSpec), you can use the `-t` flag. We support connecting using ssh,
|
29
|
-
WinRm and
|
29
|
+
WinRm and Docker. If no target is provided, we implicitly support the
|
30
30
|
"local" target - i.e. tests running on the current machine running
|
31
31
|
InSpec. For an ssh connection, use `-i` for specifying ssh key files,
|
32
32
|
and the `--sudo*` commands for requesting a privilege escalation after
|
@@ -37,20 +37,17 @@ path, `--ssl` to use SSL for transport layer encryption.
|
|
37
37
|
$ inspec shell -t ssh://root@192.168.64.2:11022 # Login to remote machine using ssh as root.
|
38
38
|
$ inspec shell -t ssh://user@hostname:1234 -i /path/to/user_key # Login to hostname on port 1234 as user using given ssh key.
|
39
39
|
$ inspec shell -t winrm://UserName:Password@windowsmachine:1234 # Login to windowsmachine over WinRM as UserName.
|
40
|
-
$ inspec shell -t docker://container_id # Login to a
|
40
|
+
$ inspec shell -t docker://container_id # Login to a Docker container.
|
41
41
|
```
|
42
42
|
|
43
|
-
## Resource
|
43
|
+
## Resource Packs
|
44
44
|
|
45
|
-
|
46
|
-
A resource pack is
|
47
|
-
be used in InSpec. For example, the profile in `examples/profile` in
|
48
|
-
the InSpec git repo defines a `gordon_config` resource. To use these
|
49
|
-
resources with the InSpec shell, you will need to download and specify
|
50
|
-
them as a dependency.
|
45
|
+
Use resource packs to share custom resources with other InSpec users.
|
46
|
+
A resource pack is an InSpec profile that contains only custom resources and no other controls or tests.
|
51
47
|
|
52
|
-
|
53
|
-
|
48
|
+
For example, the profile in [`examples/profile`](https://github.com/chef/inspec/tree/master/examples/profile)in the InSpec git repo defines a [`gordon_config` resource](https://github.com/chef/inspec/blob/master/examples/profile/controls/gordon.rb). To use these resources within the InSpec shell, you will need to download and specify them as a dependency.
|
49
|
+
|
50
|
+
Once you have local access to the profile, you can use the `gordon_config` custom resource provided in the `examples/profile` GitHub repo in your local environment :
|
54
51
|
|
55
52
|
```bash
|
56
53
|
inspec shell --depends examples/profile
|
@@ -97,12 +94,12 @@ $ inspec shell
|
|
97
94
|
Welcome to the interactive InSpec Shell
|
98
95
|
To find out how to use it, type: help
|
99
96
|
|
100
|
-
inspec> file('/Users/
|
97
|
+
inspec> file('/Users/myuser').directory?
|
101
98
|
=> true
|
102
99
|
inspec> os_env('HOME')
|
103
100
|
=> Environment variable HOME
|
104
101
|
inspec> os_env('HOME').content
|
105
|
-
=> /Users/
|
102
|
+
=> /Users/myuser
|
106
103
|
inspec> exit
|
107
104
|
```
|
108
105
|
|
@@ -126,10 +123,10 @@ replaced with the redefinition and the control is re-run.
|
|
126
123
|
```bash
|
127
124
|
inspec> control 'my_control' do
|
128
125
|
inspec> describe os_env('HOME') do
|
129
|
-
inspec> its('content') { should eq '/Users/
|
126
|
+
inspec> its('content') { should eq '/Users/myuser' }
|
130
127
|
inspec> end
|
131
128
|
inspec> end
|
132
|
-
✔ my_control: Environment variable HOME content should eq "/Users/
|
129
|
+
✔ my_control: Environment variable HOME content should eq "/Users/myuser"
|
133
130
|
|
134
131
|
Summary: 1 successful, 0 failures, 0 skipped
|
135
132
|
```
|
@@ -158,15 +155,61 @@ If you wish to run a single InSpec command and fetch its results, you
|
|
158
155
|
may use the `-c` flag. This is similar to using `bash -c`.
|
159
156
|
|
160
157
|
```bash
|
161
|
-
$ inspec shell -c 'describe file("/Users/
|
158
|
+
$ inspec shell -c 'describe file("/Users/myuser") do it { should exist } end'
|
162
159
|
Target: local://
|
163
160
|
|
164
|
-
✔ File /Users/
|
161
|
+
✔ File /Users/myuser should exist
|
165
162
|
|
166
163
|
Summary: 1 successful, 0 failures, 0 skipped
|
167
164
|
```
|
168
165
|
|
169
166
|
```bash
|
170
|
-
$ inspec shell --format json -c 'describe file("/Users/
|
171
|
-
{
|
167
|
+
$ inspec shell --format json -c 'describe file("/Users/test") do it { should exist } end'
|
168
|
+
{
|
169
|
+
"version": "1.49.2",
|
170
|
+
"controls": [{
|
171
|
+
"status": "passed",
|
172
|
+
"code_desc": "File /Users/test should exist",
|
173
|
+
"run_time": 0.002374,
|
174
|
+
"start_time": "2018-01-06 18:32:38 -0500"
|
175
|
+
}],
|
176
|
+
"other_checks": [],
|
177
|
+
"profiles": [{
|
178
|
+
"name": "inspec-shell",
|
179
|
+
"supports": [],
|
180
|
+
"controls": [{
|
181
|
+
"title": null,
|
182
|
+
"desc": null,
|
183
|
+
"impact": 0.5,
|
184
|
+
"refs": [],
|
185
|
+
"tags": {},
|
186
|
+
"code": "",
|
187
|
+
"source_location": {
|
188
|
+
"ref": "/usr/local/lib/ruby/gems/2.4.0/gems/inspec-1.49.2/lib/inspec/control_eval_context.rb",
|
189
|
+
"line": 89
|
190
|
+
},
|
191
|
+
"id": "(generated from (eval):1 7b6f82c2cc5e4205b3e2c97c8e855f2d)",
|
192
|
+
"results": [{
|
193
|
+
"status": "passed",
|
194
|
+
"code_desc": "File /Users/test should exist",
|
195
|
+
"run_time": 0.002374,
|
196
|
+
"start_time": "2018-01-06 18:32:38 -0500"
|
197
|
+
}]
|
198
|
+
}],
|
199
|
+
"groups": [{
|
200
|
+
"title": null,
|
201
|
+
"controls": ["(generated from (eval):1 7b6f82c2cc5e4205b3e2c97c8e855f2d)"],
|
202
|
+
"id": "unknown"
|
203
|
+
}],
|
204
|
+
"attributes": [],
|
205
|
+
"sha256": "29c070a90b7e3521babf618215573284a790d92907783d5b2c138f411bfd2e74"
|
206
|
+
}],
|
207
|
+
"platform": {
|
208
|
+
"name": "mac_os_x",
|
209
|
+
"release": "17.3.0"
|
210
|
+
},
|
211
|
+
"statistics": {
|
212
|
+
"duration": 0.003171
|
213
|
+
}
|
214
|
+
}
|
172
215
|
```
|