inspec 0.15.0 → 0.16.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +40 -2
- data/Gemfile +2 -3
- data/README.md +2 -0
- data/Rakefile +8 -0
- data/bin/inspec +1 -157
- data/docs/resources.rst +79 -78
- data/examples/profile/controls/example.rb +3 -1
- data/lib/fetchers/mock.rb +27 -0
- data/lib/fetchers/tar.rb +3 -2
- data/lib/fetchers/zip.rb +3 -1
- data/lib/inspec/cli.rb +164 -0
- data/lib/inspec/plugins/resource.rb +6 -2
- data/lib/inspec/profile.rb +28 -17
- data/lib/inspec/resource.rb +5 -1
- data/lib/inspec/rspec_json_formatter.rb +42 -0
- data/lib/inspec/rule.rb +24 -1
- data/lib/inspec/runner.rb +15 -7
- data/lib/inspec/runner_mock.rb +6 -1
- data/lib/inspec/runner_rspec.rb +29 -1
- data/lib/inspec/version.rb +1 -1
- data/lib/resources/{script.rb → powershell.rb} +19 -5
- data/lib/resources/registry_key.rb +1 -1
- data/test/{integration/cookbooks → cookbooks}/os_prepare/files/empty.iso +0 -0
- data/test/{integration/cookbooks → cookbooks}/os_prepare/files/example.csv +0 -0
- data/test/{integration/cookbooks → cookbooks}/os_prepare/files/example.ini +0 -0
- data/test/{integration/cookbooks → cookbooks}/os_prepare/files/example.json +0 -0
- data/test/{integration/cookbooks → cookbooks}/os_prepare/files/example.yml +0 -0
- data/test/{integration/cookbooks → cookbooks}/os_prepare/metadata.rb +0 -0
- data/test/{integration/cookbooks → cookbooks}/os_prepare/recipes/_runit_service_centos.rb +0 -0
- data/test/{integration/cookbooks → cookbooks}/os_prepare/recipes/_upstart_service_centos.rb +0 -0
- data/test/{integration/cookbooks → cookbooks}/os_prepare/recipes/apache.rb +0 -0
- data/test/{integration/cookbooks → cookbooks}/os_prepare/recipes/apt.rb +0 -0
- data/test/{integration/cookbooks → cookbooks}/os_prepare/recipes/auditctl.rb +0 -0
- data/test/{integration/cookbooks → cookbooks}/os_prepare/recipes/default.rb +0 -0
- data/test/{integration/cookbooks → cookbooks}/os_prepare/recipes/file.rb +0 -0
- data/test/{integration/cookbooks → cookbooks}/os_prepare/recipes/iptables.rb +0 -0
- data/test/{integration/cookbooks → cookbooks}/os_prepare/recipes/json_yaml_csv_ini.rb +0 -0
- data/test/{integration/cookbooks → cookbooks}/os_prepare/recipes/mount.rb +2 -2
- data/test/{integration/cookbooks → cookbooks}/os_prepare/recipes/package.rb +0 -0
- data/test/{integration/cookbooks → cookbooks}/os_prepare/recipes/postgres.rb +6 -0
- data/test/{integration/cookbooks → cookbooks}/os_prepare/recipes/registry_key.rb +0 -0
- data/test/{integration/cookbooks → cookbooks}/os_prepare/recipes/service.rb +0 -0
- data/test/{integration/cookbooks → cookbooks}/os_prepare/templates/default/sv-default-svlog-run.erb +0 -0
- data/test/functional/command_test.rb +390 -0
- data/test/helper.rb +6 -0
- data/test/integration/{test/integration/default → default}/_debug_spec.rb +0 -0
- data/test/integration/{test/integration/default → default}/apache_conf_spec.rb +0 -0
- data/test/integration/{test/integration/default → default}/apt_spec.rb +0 -0
- data/test/integration/{test/integration/default → default}/auditd_rules_spec.rb +0 -0
- data/test/integration/{test/integration/default → default}/compare_matcher_spec.rb +0 -0
- data/test/integration/{test/integration/default → default}/csv_spec.rb +0 -0
- data/test/integration/{test/integration/default → default}/etc_group_spec.rb +0 -0
- data/test/integration/{test/integration/default → default}/file_spec.rb +3 -2
- data/test/integration/{test/integration/default → default}/group_spec.rb +0 -0
- data/test/integration/{test/integration/default → default}/ini_spec.rb +0 -0
- data/test/integration/{test/integration/default → default}/iptables_spec.rb +0 -0
- data/test/integration/{test/integration/default → default}/json_spec.rb +0 -0
- data/test/integration/{test/integration/default → default}/kernel_module_spec.rb +0 -0
- data/test/integration/{test/integration/default → default}/kernel_parameter_spec.rb +0 -0
- data/test/integration/{test/integration/default → default}/mount_spec.rb +1 -1
- data/test/integration/{test/integration/default → default}/os_spec.rb +0 -0
- data/test/integration/{test/integration/default → default}/package_spec.rb +0 -0
- data/test/integration/{test/integration/default → default}/port_spec.rb +0 -0
- data/test/integration/{test/integration/default → default}/postgres_session_spec.rb +0 -0
- data/test/integration/default/powershell_spec.rb +13 -0
- data/test/integration/{test/integration/default → default}/registry_key_spec.rb +0 -0
- data/test/integration/{test/integration/default → default}/secpol_spec.rb +0 -0
- data/test/integration/{test/integration/default → default}/service_spec.rb +0 -0
- data/test/integration/{test/integration/default → default}/user_spec.rb +0 -0
- data/test/integration/{test/integration/default → default}/yaml_spec.rb +0 -0
- data/test/unit/control_test.rb +58 -0
- data/test/unit/fetchers/mock_test.rb +43 -0
- data/test/unit/plugins/resource_test.rb +60 -0
- data/test/unit/resources/{script_test.rb → powershell_test.rb} +10 -1
- metadata +107 -101
- data/test/integration/.kitchen.ec2.yml +0 -75
- data/test/integration/.kitchen.yml +0 -45
- data/test/integration/Berksfile +0 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 243a577f37796094ac8a136876c11d14ded819c2
|
4
|
+
data.tar.gz: 7a95c3d207666f7d91c7ccb10316432d1ba70dd6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4d66e309baed6ba892f9b5fc4c03f488afc7886dc67c88bcf4a9d97e32e2a5cdbbb4e475e792e3f6d4199ea034177fd8a3698063a0d8b4d36d60b626eecfa993
|
7
|
+
data.tar.gz: 03d6a852e3d9e3d629e1e1d44555973ea69f66d78d630ebd80bbdcddcff6035a96a03416a58c02fcc757cbc01f838ef36e6b44ef17a41692204d6120d17426e8
|
data/CHANGELOG.md
CHANGED
@@ -1,7 +1,44 @@
|
|
1
1
|
# Change Log
|
2
2
|
|
3
|
-
## [0.
|
4
|
-
[Full Changelog](https://github.com/chef/inspec/compare/v0.
|
3
|
+
## [0.16.0](https://github.com/chef/inspec/tree/0.16.0) (2016-03-19)
|
4
|
+
[Full Changelog](https://github.com/chef/inspec/compare/v0.15.0...0.16.0)
|
5
|
+
|
6
|
+
**Implemented enhancements:**
|
7
|
+
|
8
|
+
- Read Chef attributes within the tests ? [\#541](https://github.com/chef/inspec/issues/541)
|
9
|
+
- A resource to test http GET calls [\#538](https://github.com/chef/inspec/issues/538)
|
10
|
+
- rename `script` resource to `powershell` resource [\#553](https://github.com/chef/inspec/pull/553) ([chris-rock](https://github.com/chris-rock))
|
11
|
+
- add fulljson formatter [\#552](https://github.com/chef/inspec/pull/552) ([arlimus](https://github.com/arlimus))
|
12
|
+
- feature: add tags and refs [\#551](https://github.com/chef/inspec/pull/551) ([arlimus](https://github.com/arlimus))
|
13
|
+
- fix detect + add output option to archive command [\#546](https://github.com/chef/inspec/pull/546) ([arlimus](https://github.com/arlimus))
|
14
|
+
- adding named resource registry classes [\#540](https://github.com/chef/inspec/pull/540) ([adamleff](https://github.com/adamleff))
|
15
|
+
- add output stream to rspec configuration [\#529](https://github.com/chef/inspec/pull/529) ([vjeffrey](https://github.com/vjeffrey))
|
16
|
+
- Move integration tests to test/integration [\#468](https://github.com/chef/inspec/pull/468) ([chris-rock](https://github.com/chris-rock))
|
17
|
+
|
18
|
+
**Fixed bugs:**
|
19
|
+
|
20
|
+
- fix inspec shell and continuously test it [\#556](https://github.com/chef/inspec/pull/556) ([arlimus](https://github.com/arlimus))
|
21
|
+
- bugfix: prevent duplicate loading of library files [\#547](https://github.com/chef/inspec/pull/547) ([arlimus](https://github.com/arlimus))
|
22
|
+
- fix detect + add output option to archive command [\#546](https://github.com/chef/inspec/pull/546) ([arlimus](https://github.com/arlimus))
|
23
|
+
- bugfix: archive command with inheritance-based profiles [\#545](https://github.com/chef/inspec/pull/545) ([arlimus](https://github.com/arlimus))
|
24
|
+
|
25
|
+
**Closed issues:**
|
26
|
+
|
27
|
+
- Add additional metadata to the control definition to allow for more complete mapping to security guidance documents [\#536](https://github.com/chef/inspec/issues/536)
|
28
|
+
- CLI: Specifying --profiles-path on check succeeds but displays usage error on archive [\#535](https://github.com/chef/inspec/issues/535)
|
29
|
+
- inspec failing to connect to Compliance \(SSL certificate error\) [\#531](https://github.com/chef/inspec/issues/531)
|
30
|
+
|
31
|
+
**Merged pull requests:**
|
32
|
+
|
33
|
+
- mock fetcher [\#550](https://github.com/chef/inspec/pull/550) ([arlimus](https://github.com/arlimus))
|
34
|
+
- testing: add inspec exec tests with json formatter [\#549](https://github.com/chef/inspec/pull/549) ([arlimus](https://github.com/arlimus))
|
35
|
+
- dont generate pretty json by default [\#548](https://github.com/chef/inspec/pull/548) ([arlimus](https://github.com/arlimus))
|
36
|
+
- Add title, description, code, and source\_location to example metadata [\#543](https://github.com/chef/inspec/pull/543) ([vjeffrey](https://github.com/vjeffrey))
|
37
|
+
- add functional tests for cli [\#542](https://github.com/chef/inspec/pull/542) ([arlimus](https://github.com/arlimus))
|
38
|
+
- Add a Gitter chat badge to README.md [\#530](https://github.com/chef/inspec/pull/530) ([gitter-badger](https://github.com/gitter-badger))
|
39
|
+
|
40
|
+
## [v0.15.0](https://github.com/chef/inspec/tree/v0.15.0) (2016-03-09)
|
41
|
+
[Full Changelog](https://github.com/chef/inspec/compare/v0.14.8...v0.15.0)
|
5
42
|
|
6
43
|
**Implemented enhancements:**
|
7
44
|
|
@@ -20,6 +57,7 @@
|
|
20
57
|
|
21
58
|
**Merged pull requests:**
|
22
59
|
|
60
|
+
- 0.15.0 [\#528](https://github.com/chef/inspec/pull/528) ([arlimus](https://github.com/arlimus))
|
23
61
|
- 0.14.9 [\#525](https://github.com/chef/inspec/pull/525) ([arlimus](https://github.com/arlimus))
|
24
62
|
|
25
63
|
## [v0.14.8](https://github.com/chef/inspec/tree/v0.14.8) (2016-03-04)
|
data/Gemfile
CHANGED
@@ -19,10 +19,9 @@ end
|
|
19
19
|
|
20
20
|
group :integration do
|
21
21
|
gem 'berkshelf', '~> 4.0'
|
22
|
-
gem 'test-kitchen'
|
22
|
+
gem 'test-kitchen', '~> 1.6'
|
23
23
|
gem 'kitchen-vagrant'
|
24
|
-
gem 'kitchen-inspec'
|
25
|
-
gem 'winrm-transport', '~> 1.0'
|
24
|
+
gem 'kitchen-inspec', '0.12.5'
|
26
25
|
gem 'kitchen-ec2'
|
27
26
|
end
|
28
27
|
|
data/README.md
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# InSpec: Inspect Your Infrastructure
|
2
2
|
|
3
|
+
[![Join the chat at https://gitter.im/chef/inspec](https://badges.gitter.im/chef/inspec.svg)](https://gitter.im/chef/inspec?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
4
|
+
|
3
5
|
InSpec is an open-source testing framework for infrastructure with a human- and machine-readable language for specifying compliance, security and policy requirements.
|
4
6
|
|
5
7
|
```ruby
|
data/Rakefile
CHANGED
@@ -35,6 +35,14 @@ namespace :test do
|
|
35
35
|
end or fail 'Failures'
|
36
36
|
end
|
37
37
|
|
38
|
+
Rake::TestTask.new(:functional) do |t|
|
39
|
+
t.libs << 'test'
|
40
|
+
t.pattern = 'test/functional/**/*_test.rb'
|
41
|
+
t.warning = true
|
42
|
+
t.verbose = true
|
43
|
+
t.ruby_opts = ['--dev'] if defined?(JRUBY_VERSION)
|
44
|
+
end
|
45
|
+
|
38
46
|
task :resources do
|
39
47
|
tests = Dir['test/resource/*_test.rb']
|
40
48
|
return if tests.empty?
|
data/bin/inspec
CHANGED
@@ -4,162 +4,6 @@
|
|
4
4
|
# author: Dominik Richter
|
5
5
|
# author: Christoph Hartmann
|
6
6
|
|
7
|
-
require 'thor'
|
8
|
-
require 'json'
|
9
|
-
require 'pp'
|
10
|
-
require_relative '../lib/utils/base_cli'
|
11
7
|
require_relative '../lib/inspec'
|
12
|
-
require_relative '../lib/
|
13
|
-
|
14
|
-
class Inspec::InspecCLI < Inspec::BaseCLI # rubocop:disable Metrics/ClassLength
|
15
|
-
class_option :diagnose, type: :boolean,
|
16
|
-
desc: 'Show diagnostics (versions, configurations)'
|
17
|
-
|
18
|
-
desc 'json PATH', 'read all tests in PATH and generate a JSON summary'
|
19
|
-
option :id, type: :string,
|
20
|
-
desc: 'Attach a profile ID to all test results'
|
21
|
-
option :output, aliases: :o, type: :string,
|
22
|
-
desc: 'Save the created profile to a path'
|
23
|
-
profile_options
|
24
|
-
def json(target)
|
25
|
-
diagnose
|
26
|
-
o = opts.dup
|
27
|
-
o[:ignore_supports] = true
|
28
|
-
|
29
|
-
profile = Inspec::Profile.for_target(target, o)
|
30
|
-
dst = o[:output].to_s
|
31
|
-
if dst.empty?
|
32
|
-
puts JSON.pretty_generate(profile.info)
|
33
|
-
else
|
34
|
-
if File.exist? dst
|
35
|
-
puts "----> updating #{dst}"
|
36
|
-
else
|
37
|
-
puts "----> creating #{dst}"
|
38
|
-
end
|
39
|
-
fdst = File.expand_path(dst)
|
40
|
-
File.write(fdst, JSON.dump(profile.info))
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
desc 'check PATH', 'verify all tests at the specified PATH'
|
45
|
-
option :format, type: :string
|
46
|
-
profile_options
|
47
|
-
def check(path) # rubocop:disable Metrics/AbcSize
|
48
|
-
diagnose
|
49
|
-
o = opts.dup
|
50
|
-
# configure_logger(o) # we do not need a logger for check yet
|
51
|
-
o[:ignore_supports] = true # we check for integrity only
|
52
|
-
|
53
|
-
# run check
|
54
|
-
profile = Inspec::Profile.for_target(path, o)
|
55
|
-
result = profile.check
|
56
|
-
|
57
|
-
if opts['format'] == 'json'
|
58
|
-
puts JSON.generate(result)
|
59
|
-
else
|
60
|
-
headline('Summary')
|
61
|
-
%w{location profile controls timestamp valid}.each { |item|
|
62
|
-
puts "#{mark_text(item.to_s.capitalize + ':')} #{result[:summary][item.to_sym]}"
|
63
|
-
}
|
64
|
-
puts
|
65
|
-
|
66
|
-
%w{errors warnings}.each { |list|
|
67
|
-
headline(list.to_s.capitalize)
|
68
|
-
result[list.to_sym].each { |item|
|
69
|
-
puts "#{item[:file]}:#{item[:line]}:#{item[:column]}: #{item[:msg]} "
|
70
|
-
}
|
71
|
-
puts
|
72
|
-
}
|
73
|
-
end
|
74
|
-
exit 1 unless result[:summary][:valid]
|
75
|
-
end
|
76
|
-
|
77
|
-
desc 'archive PATH', 'archive a profile to tar.gz (default) or zip'
|
78
|
-
option :zip, type: :boolean, default: false,
|
79
|
-
desc: 'Generates a zip archive.'
|
80
|
-
option :tar, type: :boolean, default: false,
|
81
|
-
desc: 'Generates a tar.gz archive.'
|
82
|
-
option :overwrite, type: :boolean, default: false,
|
83
|
-
desc: 'Overwrite existing archive.'
|
84
|
-
option :ignore_errors, type: :boolean, default: false,
|
85
|
-
desc: 'Ignore profile warnings.'
|
86
|
-
def archive(path)
|
87
|
-
diagnose
|
88
|
-
|
89
|
-
o = opts.dup
|
90
|
-
o[:logger] = Logger.new(STDOUT)
|
91
|
-
o[:logger].level = get_log_level(o.log_level)
|
92
|
-
|
93
|
-
profile = Inspec::Profile.for_target(path, o)
|
94
|
-
result = profile.check
|
95
|
-
|
96
|
-
if result && !opts[:ignore_errors] == false
|
97
|
-
@logger.info 'Profile check failed. Please fix the profile before generating an archive.'
|
98
|
-
return exit 1
|
99
|
-
end
|
100
|
-
|
101
|
-
# generate archive
|
102
|
-
exit 1 unless profile.archive(opts)
|
103
|
-
end
|
104
|
-
|
105
|
-
desc 'exec PATHS', 'run all test files at the specified PATH.'
|
106
|
-
exec_options
|
107
|
-
def exec(*targets)
|
108
|
-
diagnose
|
109
|
-
run_tests(targets, opts)
|
110
|
-
end
|
111
|
-
|
112
|
-
desc 'detect', 'detect the target OS'
|
113
|
-
target_options
|
114
|
-
def detect
|
115
|
-
diagnose
|
116
|
-
|
117
|
-
rel = File.join(File.dirname(__FILE__), *%w{.. lib utils detect.rb})
|
118
|
-
detect_util = File.expand_path(rel)
|
119
|
-
# exits on execution:
|
120
|
-
runner = Inspec::Runner.new(opts)
|
121
|
-
profile = Inspec::Profile.for_target(detect_util, opts)
|
122
|
-
runner.add_profile(profile)
|
123
|
-
exit runner.run
|
124
|
-
rescue RuntimeError => e
|
125
|
-
puts e.message
|
126
|
-
end
|
127
|
-
|
128
|
-
desc 'shell', 'open an interactive debugging shell'
|
129
|
-
target_options
|
130
|
-
option :format, type: :string, default: Inspec::NoSummaryFormatter, hide: true
|
131
|
-
def shell_func
|
132
|
-
diagnose
|
133
|
-
o = opts.dup
|
134
|
-
o[:logger] = Logger.new(STDOUT)
|
135
|
-
o[:logger].level = get_log_level(o.log_level)
|
136
|
-
|
137
|
-
runner = Inspec::Runner.new(o)
|
138
|
-
Inspec::Shell.new(runner).start
|
139
|
-
rescue RuntimeError => e
|
140
|
-
puts e.message
|
141
|
-
end
|
142
|
-
|
143
|
-
desc 'version', 'prints the version of this tool'
|
144
|
-
def version
|
145
|
-
puts Inspec::VERSION
|
146
|
-
end
|
147
|
-
end
|
148
|
-
|
149
|
-
# Load all plugins on startup
|
150
|
-
ctl = Inspec::PluginCtl.new
|
151
|
-
ctl.list.each { |x| ctl.load(x) }
|
152
|
-
|
153
|
-
# load CLI plugins before the Inspec CLI has been started
|
154
|
-
Inspec::Plugins::CLI.subcommands.each { |_subcommand, params|
|
155
|
-
Inspec::InspecCLI.register(
|
156
|
-
params[:klass],
|
157
|
-
params[:subcommand_name],
|
158
|
-
params[:usage],
|
159
|
-
params[:description],
|
160
|
-
params[:options],
|
161
|
-
)
|
162
|
-
}
|
163
|
-
|
164
|
-
# start the CLI
|
8
|
+
require_relative '../lib/inspec/cli'
|
165
9
|
Inspec::InspecCLI.start(ARGV)
|
data/docs/resources.rst
CHANGED
@@ -42,9 +42,9 @@ The following InSpec audit resources are available:
|
|
42
42
|
* `port`_
|
43
43
|
* `postgres_conf`_
|
44
44
|
* `postgres_session`_
|
45
|
+
* `powershell`_
|
45
46
|
* `processes`_
|
46
47
|
* `registry_key`_
|
47
|
-
* `script`_
|
48
48
|
* `security_policy`_
|
49
49
|
* `service`_
|
50
50
|
* `ssh_config`_
|
@@ -3525,6 +3525,84 @@ The following examples show how to use this InSpec audit resource.
|
|
3525
3525
|
|
3526
3526
|
|
3527
3527
|
|
3528
|
+
powershell
|
3529
|
+
=====================================================
|
3530
|
+
Use the ``powershell`` |inspec resource| to test a |powershell| script on the |windows| platform.
|
3531
|
+
|
3532
|
+
**Stability: Experimental**
|
3533
|
+
|
3534
|
+
Syntax
|
3535
|
+
-----------------------------------------------------
|
3536
|
+
A ``powershell`` |inspec resource| block declares a script to be tested, and then a command that should be part of that script:
|
3537
|
+
|
3538
|
+
.. code-block:: ruby
|
3539
|
+
|
3540
|
+
script = <<-EOH
|
3541
|
+
# you powershell script
|
3542
|
+
EOH
|
3543
|
+
|
3544
|
+
describe powershell(script) do
|
3545
|
+
its('matcher') { should eq 'output' }
|
3546
|
+
end
|
3547
|
+
|
3548
|
+
|
3549
|
+
where
|
3550
|
+
|
3551
|
+
* ``'script'`` must specify a Powershell script to be run
|
3552
|
+
* ``'matcher'`` is one of ``exit_status``, ``stderr``, or ``stdout``
|
3553
|
+
* ``'output'`` tests the output of the command run on the system versus the output value stated in the test
|
3554
|
+
|
3555
|
+
|
3556
|
+
Matchers
|
3557
|
+
-----------------------------------------------------
|
3558
|
+
This InSpec audit resource has the following matchers.
|
3559
|
+
|
3560
|
+
exit_status
|
3561
|
+
+++++++++++++++++++++++++++++++++++++++++++++++++++++
|
3562
|
+
The ``exit_status`` matcher tests the exit status for the command:
|
3563
|
+
|
3564
|
+
.. code-block:: ruby
|
3565
|
+
|
3566
|
+
its('exit_status') { should eq 123 }
|
3567
|
+
|
3568
|
+
stderr
|
3569
|
+
+++++++++++++++++++++++++++++++++++++++++++++++++++++
|
3570
|
+
The ``stderr`` matcher tests results of the command as returned in standard error (stderr):
|
3571
|
+
|
3572
|
+
.. code-block:: ruby
|
3573
|
+
|
3574
|
+
its('stderr') { should eq 'error' }
|
3575
|
+
|
3576
|
+
stdout
|
3577
|
+
+++++++++++++++++++++++++++++++++++++++++++++++++++++
|
3578
|
+
The ``stdout`` matcher tests results of the command as returned in standard output (stdout):
|
3579
|
+
|
3580
|
+
.. code-block:: ruby
|
3581
|
+
|
3582
|
+
its('stdout') { should eq '/^1$/' }
|
3583
|
+
|
3584
|
+
Examples
|
3585
|
+
-----------------------------------------------------
|
3586
|
+
The following examples show how to use this InSpec audit resource.
|
3587
|
+
|
3588
|
+
**Get all groups of Administrator user**
|
3589
|
+
|
3590
|
+
.. code-block:: ruby
|
3591
|
+
|
3592
|
+
myscript = <<-EOH
|
3593
|
+
# find user
|
3594
|
+
$user = Get-WmiObject Win32_UserAccount -filter "Name = 'Administrator'"
|
3595
|
+
# get related groups
|
3596
|
+
$groups = $user.GetRelated('Win32_Group') | Select-Object -Property Caption, Domain, Name, LocalAccount, SID, SIDType, Status
|
3597
|
+
$groups | ConvertTo-Json
|
3598
|
+
EOH
|
3599
|
+
|
3600
|
+
describe script(myscript) do
|
3601
|
+
its('stdout') { should_not eq '' }
|
3602
|
+
end
|
3603
|
+
|
3604
|
+
|
3605
|
+
|
3528
3606
|
processes
|
3529
3607
|
=====================================================
|
3530
3608
|
Use the ``processes`` |inspec resource| to test properties for programs that are running on the system.
|
@@ -3651,83 +3729,6 @@ The following examples show how to use this InSpec audit resource.
|
|
3651
3729
|
where ``'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Schedule'`` is the full path to the setting.
|
3652
3730
|
|
3653
3731
|
|
3654
|
-
script
|
3655
|
-
=====================================================
|
3656
|
-
Use the ``script`` |inspec resource| to test a |powershell| script on the |windows| platform.
|
3657
|
-
|
3658
|
-
**Stability: Experimental**
|
3659
|
-
|
3660
|
-
Syntax
|
3661
|
-
-----------------------------------------------------
|
3662
|
-
A ``script`` |inspec resource| block declares a script to be tested, and then a command that should be part of that script:
|
3663
|
-
|
3664
|
-
.. code-block:: ruby
|
3665
|
-
|
3666
|
-
script = <<-EOH
|
3667
|
-
# you powershell script
|
3668
|
-
EOH
|
3669
|
-
|
3670
|
-
describe script(script) do
|
3671
|
-
its('matcher') { should eq 'output' }
|
3672
|
-
end
|
3673
|
-
|
3674
|
-
|
3675
|
-
where
|
3676
|
-
|
3677
|
-
* ``'script'`` must specify a Powershell script to be run
|
3678
|
-
* ``'matcher'`` is one of ``exit_status``, ``stderr``, or ``stdout``
|
3679
|
-
* ``'output'`` tests the output of the command run on the system versus the output value stated in the test
|
3680
|
-
|
3681
|
-
|
3682
|
-
Matchers
|
3683
|
-
-----------------------------------------------------
|
3684
|
-
This InSpec audit resource has the following matchers.
|
3685
|
-
|
3686
|
-
exit_status
|
3687
|
-
+++++++++++++++++++++++++++++++++++++++++++++++++++++
|
3688
|
-
The ``exit_status`` matcher tests the exit status for the command:
|
3689
|
-
|
3690
|
-
.. code-block:: ruby
|
3691
|
-
|
3692
|
-
its('exit_status') { should eq 123 }
|
3693
|
-
|
3694
|
-
stderr
|
3695
|
-
+++++++++++++++++++++++++++++++++++++++++++++++++++++
|
3696
|
-
The ``stderr`` matcher tests results of the command as returned in standard error (stderr):
|
3697
|
-
|
3698
|
-
.. code-block:: ruby
|
3699
|
-
|
3700
|
-
its('stderr') { should eq 'error' }
|
3701
|
-
|
3702
|
-
stdout
|
3703
|
-
+++++++++++++++++++++++++++++++++++++++++++++++++++++
|
3704
|
-
The ``stdout`` matcher tests results of the command as returned in standard output (stdout):
|
3705
|
-
|
3706
|
-
.. code-block:: ruby
|
3707
|
-
|
3708
|
-
its('stdout') { should eq '/^1$/' }
|
3709
|
-
|
3710
|
-
Examples
|
3711
|
-
-----------------------------------------------------
|
3712
|
-
The following examples show how to use this InSpec audit resource.
|
3713
|
-
|
3714
|
-
**Get all groups of Administrator user**
|
3715
|
-
|
3716
|
-
.. code-block:: ruby
|
3717
|
-
|
3718
|
-
myscript = <<-EOH
|
3719
|
-
# find user
|
3720
|
-
$user = Get-WmiObject Win32_UserAccount -filter "Name = 'Administrator'"
|
3721
|
-
# get related groups
|
3722
|
-
$groups = $user.GetRelated('Win32_Group') | Select-Object -Property Caption, Domain, Name, LocalAccount, SID, SIDType, Status
|
3723
|
-
$groups | ConvertTo-Json
|
3724
|
-
EOH
|
3725
|
-
|
3726
|
-
describe script(myscript) do
|
3727
|
-
its('stdout') { should_not eq '' }
|
3728
|
-
end
|
3729
|
-
|
3730
|
-
|
3731
3732
|
security_policy
|
3732
3733
|
=====================================================
|
3733
3734
|
Use the ``security_policy`` |inspec resource| to test security policies on the |windows| platform.
|