inspec-core 2.1.67
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 +7 -0
- data/CHANGELOG.md +3136 -0
- data/Gemfile +56 -0
- data/LICENSE +14 -0
- data/MAINTAINERS.md +33 -0
- data/MAINTAINERS.toml +52 -0
- data/README.md +453 -0
- data/bin/inspec +12 -0
- data/docs/.gitignore +2 -0
- data/docs/README.md +40 -0
- data/docs/dev/control-eval.md +62 -0
- data/docs/dsl_inspec.md +258 -0
- data/docs/dsl_resource.md +100 -0
- data/docs/glossary.md +99 -0
- data/docs/habitat.md +192 -0
- data/docs/inspec_and_friends.md +114 -0
- data/docs/matchers.md +169 -0
- data/docs/migration.md +293 -0
- data/docs/platforms.md +119 -0
- data/docs/plugin_kitchen_inspec.md +50 -0
- data/docs/profiles.md +378 -0
- data/docs/reporters.md +105 -0
- data/docs/resources/aide_conf.md.erb +76 -0
- data/docs/resources/apache.md.erb +67 -0
- data/docs/resources/apache_conf.md.erb +68 -0
- data/docs/resources/apt.md.erb +71 -0
- data/docs/resources/audit_policy.md.erb +47 -0
- data/docs/resources/auditd.md.erb +79 -0
- data/docs/resources/auditd_conf.md.erb +68 -0
- data/docs/resources/bash.md.erb +75 -0
- data/docs/resources/bond.md.erb +90 -0
- data/docs/resources/bridge.md.erb +57 -0
- data/docs/resources/bsd_service.md.erb +67 -0
- data/docs/resources/chocolatey_package.md.erb +58 -0
- data/docs/resources/command.md.erb +138 -0
- data/docs/resources/cpan.md.erb +79 -0
- data/docs/resources/cran.md.erb +64 -0
- data/docs/resources/crontab.md.erb +89 -0
- data/docs/resources/csv.md.erb +54 -0
- data/docs/resources/dh_params.md.erb +205 -0
- data/docs/resources/directory.md.erb +30 -0
- data/docs/resources/docker.md.erb +219 -0
- data/docs/resources/docker_container.md.erb +103 -0
- data/docs/resources/docker_image.md.erb +94 -0
- data/docs/resources/docker_service.md.erb +114 -0
- data/docs/resources/elasticsearch.md.erb +242 -0
- data/docs/resources/etc_fstab.md.erb +125 -0
- data/docs/resources/etc_group.md.erb +75 -0
- data/docs/resources/etc_hosts.md.erb +78 -0
- data/docs/resources/etc_hosts_allow.md.erb +74 -0
- data/docs/resources/etc_hosts_deny.md.erb +74 -0
- data/docs/resources/file.md.erb +526 -0
- data/docs/resources/filesystem.md.erb +41 -0
- data/docs/resources/firewalld.md.erb +107 -0
- data/docs/resources/gem.md.erb +79 -0
- data/docs/resources/group.md.erb +61 -0
- data/docs/resources/grub_conf.md.erb +101 -0
- data/docs/resources/host.md.erb +86 -0
- data/docs/resources/http.md.erb +197 -0
- data/docs/resources/iis_app.md.erb +122 -0
- data/docs/resources/iis_site.md.erb +135 -0
- data/docs/resources/inetd_conf.md.erb +94 -0
- data/docs/resources/ini.md.erb +76 -0
- data/docs/resources/interface.md.erb +58 -0
- data/docs/resources/iptables.md.erb +64 -0
- data/docs/resources/json.md.erb +63 -0
- data/docs/resources/kernel_module.md.erb +120 -0
- data/docs/resources/kernel_parameter.md.erb +53 -0
- data/docs/resources/key_rsa.md.erb +85 -0
- data/docs/resources/launchd_service.md.erb +57 -0
- data/docs/resources/limits_conf.md.erb +75 -0
- data/docs/resources/login_defs.md.erb +71 -0
- data/docs/resources/mount.md.erb +69 -0
- data/docs/resources/mssql_session.md.erb +60 -0
- data/docs/resources/mysql_conf.md.erb +99 -0
- data/docs/resources/mysql_session.md.erb +74 -0
- data/docs/resources/nginx.md.erb +79 -0
- data/docs/resources/nginx_conf.md.erb +138 -0
- data/docs/resources/npm.md.erb +60 -0
- data/docs/resources/ntp_conf.md.erb +60 -0
- data/docs/resources/oneget.md.erb +53 -0
- data/docs/resources/oracledb_session.md.erb +52 -0
- data/docs/resources/os.md.erb +141 -0
- data/docs/resources/os_env.md.erb +91 -0
- data/docs/resources/package.md.erb +120 -0
- data/docs/resources/packages.md.erb +67 -0
- data/docs/resources/parse_config.md.erb +103 -0
- data/docs/resources/parse_config_file.md.erb +138 -0
- data/docs/resources/passwd.md.erb +141 -0
- data/docs/resources/pip.md.erb +67 -0
- data/docs/resources/port.md.erb +137 -0
- data/docs/resources/postgres_conf.md.erb +79 -0
- data/docs/resources/postgres_hba_conf.md.erb +93 -0
- data/docs/resources/postgres_ident_conf.md.erb +76 -0
- data/docs/resources/postgres_session.md.erb +69 -0
- data/docs/resources/powershell.md.erb +102 -0
- data/docs/resources/processes.md.erb +109 -0
- data/docs/resources/rabbitmq_config.md.erb +41 -0
- data/docs/resources/registry_key.md.erb +158 -0
- data/docs/resources/runit_service.md.erb +57 -0
- data/docs/resources/security_policy.md.erb +47 -0
- data/docs/resources/service.md.erb +121 -0
- data/docs/resources/shadow.md.erb +146 -0
- data/docs/resources/ssh_config.md.erb +73 -0
- data/docs/resources/sshd_config.md.erb +83 -0
- data/docs/resources/ssl.md.erb +119 -0
- data/docs/resources/sys_info.md.erb +42 -0
- data/docs/resources/systemd_service.md.erb +57 -0
- data/docs/resources/sysv_service.md.erb +57 -0
- data/docs/resources/upstart_service.md.erb +57 -0
- data/docs/resources/user.md.erb +140 -0
- data/docs/resources/users.md.erb +127 -0
- data/docs/resources/vbscript.md.erb +55 -0
- data/docs/resources/virtualization.md.erb +57 -0
- data/docs/resources/windows_feature.md.erb +47 -0
- data/docs/resources/windows_hotfix.md.erb +53 -0
- data/docs/resources/windows_task.md.erb +95 -0
- data/docs/resources/wmi.md.erb +81 -0
- data/docs/resources/x509_certificate.md.erb +151 -0
- data/docs/resources/xinetd_conf.md.erb +156 -0
- data/docs/resources/xml.md.erb +85 -0
- data/docs/resources/yaml.md.erb +69 -0
- data/docs/resources/yum.md.erb +98 -0
- data/docs/resources/zfs_dataset.md.erb +53 -0
- data/docs/resources/zfs_pool.md.erb +47 -0
- data/docs/ruby_usage.md +203 -0
- data/docs/shared/matcher_be.md.erb +1 -0
- data/docs/shared/matcher_cmp.md.erb +43 -0
- data/docs/shared/matcher_eq.md.erb +3 -0
- data/docs/shared/matcher_include.md.erb +1 -0
- data/docs/shared/matcher_match.md.erb +1 -0
- data/docs/shell.md +217 -0
- data/examples/README.md +8 -0
- data/examples/inheritance/README.md +65 -0
- data/examples/inheritance/controls/example.rb +14 -0
- data/examples/inheritance/inspec.yml +15 -0
- data/examples/kitchen-ansible/.kitchen.yml +25 -0
- data/examples/kitchen-ansible/Gemfile +19 -0
- data/examples/kitchen-ansible/README.md +53 -0
- data/examples/kitchen-ansible/files/nginx.repo +6 -0
- data/examples/kitchen-ansible/tasks/main.yml +16 -0
- data/examples/kitchen-ansible/test/integration/default/default.yml +5 -0
- data/examples/kitchen-ansible/test/integration/default/web_spec.rb +28 -0
- data/examples/kitchen-chef/.kitchen.yml +20 -0
- data/examples/kitchen-chef/Berksfile +3 -0
- data/examples/kitchen-chef/Gemfile +19 -0
- data/examples/kitchen-chef/README.md +27 -0
- data/examples/kitchen-chef/metadata.rb +7 -0
- data/examples/kitchen-chef/recipes/default.rb +6 -0
- data/examples/kitchen-chef/recipes/nginx.rb +30 -0
- data/examples/kitchen-chef/test/integration/default/web_spec.rb +28 -0
- data/examples/kitchen-puppet/.kitchen.yml +23 -0
- data/examples/kitchen-puppet/Gemfile +20 -0
- data/examples/kitchen-puppet/Puppetfile +25 -0
- data/examples/kitchen-puppet/README.md +53 -0
- data/examples/kitchen-puppet/manifests/site.pp +33 -0
- data/examples/kitchen-puppet/metadata.json +11 -0
- data/examples/kitchen-puppet/modules/.gitkeep +0 -0
- data/examples/kitchen-puppet/test/integration/default/web_spec.rb +28 -0
- data/examples/meta-profile/README.md +37 -0
- data/examples/meta-profile/controls/example.rb +13 -0
- data/examples/meta-profile/inspec.yml +13 -0
- data/examples/profile-attribute.yml +2 -0
- data/examples/profile-attribute/README.md +14 -0
- data/examples/profile-attribute/controls/example.rb +11 -0
- data/examples/profile-attribute/inspec.yml +8 -0
- data/examples/profile-sensitive/README.md +29 -0
- data/examples/profile-sensitive/controls/sensitive-failures.rb +9 -0
- data/examples/profile-sensitive/controls/sensitive.rb +9 -0
- data/examples/profile-sensitive/inspec.yml +8 -0
- data/examples/profile/README.md +48 -0
- data/examples/profile/controls/example.rb +23 -0
- data/examples/profile/controls/gordon.rb +36 -0
- data/examples/profile/controls/meta.rb +34 -0
- data/examples/profile/inspec.yml +10 -0
- data/examples/profile/libraries/gordon_config.rb +59 -0
- data/inspec-core.gemspec +43 -0
- data/lib/bundles/README.md +3 -0
- data/lib/bundles/inspec-artifact.rb +7 -0
- data/lib/bundles/inspec-artifact/README.md +1 -0
- data/lib/bundles/inspec-artifact/cli.rb +277 -0
- data/lib/bundles/inspec-compliance.rb +16 -0
- data/lib/bundles/inspec-compliance/.kitchen.yml +20 -0
- data/lib/bundles/inspec-compliance/README.md +193 -0
- data/lib/bundles/inspec-compliance/api.rb +360 -0
- data/lib/bundles/inspec-compliance/api/login.rb +193 -0
- data/lib/bundles/inspec-compliance/bootstrap.sh +41 -0
- data/lib/bundles/inspec-compliance/cli.rb +260 -0
- data/lib/bundles/inspec-compliance/configuration.rb +103 -0
- data/lib/bundles/inspec-compliance/http.rb +125 -0
- data/lib/bundles/inspec-compliance/images/cc-token.png +0 -0
- data/lib/bundles/inspec-compliance/support.rb +36 -0
- data/lib/bundles/inspec-compliance/target.rb +106 -0
- data/lib/bundles/inspec-compliance/test/integration/default/cli.rb +93 -0
- data/lib/bundles/inspec-habitat.rb +12 -0
- data/lib/bundles/inspec-habitat/cli.rb +36 -0
- data/lib/bundles/inspec-habitat/log.rb +10 -0
- data/lib/bundles/inspec-habitat/profile.rb +391 -0
- data/lib/bundles/inspec-init.rb +8 -0
- data/lib/bundles/inspec-init/README.md +31 -0
- data/lib/bundles/inspec-init/cli.rb +97 -0
- data/lib/bundles/inspec-init/templates/profile/README.md +3 -0
- data/lib/bundles/inspec-init/templates/profile/controls/example.rb +19 -0
- data/lib/bundles/inspec-init/templates/profile/inspec.yml +8 -0
- data/lib/bundles/inspec-init/templates/profile/libraries/.gitkeep +0 -0
- data/lib/bundles/inspec-supermarket.rb +13 -0
- data/lib/bundles/inspec-supermarket/README.md +45 -0
- data/lib/bundles/inspec-supermarket/api.rb +84 -0
- data/lib/bundles/inspec-supermarket/cli.rb +73 -0
- data/lib/bundles/inspec-supermarket/target.rb +34 -0
- data/lib/fetchers/git.rb +163 -0
- data/lib/fetchers/local.rb +74 -0
- data/lib/fetchers/mock.rb +35 -0
- data/lib/fetchers/url.rb +247 -0
- data/lib/inspec.rb +24 -0
- data/lib/inspec/archive/tar.rb +29 -0
- data/lib/inspec/archive/zip.rb +19 -0
- data/lib/inspec/backend.rb +93 -0
- data/lib/inspec/base_cli.rb +368 -0
- data/lib/inspec/cached_fetcher.rb +66 -0
- data/lib/inspec/cli.rb +292 -0
- data/lib/inspec/completions/bash.sh.erb +45 -0
- data/lib/inspec/completions/fish.sh.erb +34 -0
- data/lib/inspec/completions/zsh.sh.erb +61 -0
- data/lib/inspec/control_eval_context.rb +179 -0
- data/lib/inspec/dependencies/cache.rb +72 -0
- data/lib/inspec/dependencies/dependency_set.rb +92 -0
- data/lib/inspec/dependencies/lockfile.rb +115 -0
- data/lib/inspec/dependencies/requirement.rb +123 -0
- data/lib/inspec/dependencies/resolver.rb +86 -0
- data/lib/inspec/describe.rb +27 -0
- data/lib/inspec/dsl.rb +66 -0
- data/lib/inspec/dsl_shared.rb +33 -0
- data/lib/inspec/env_printer.rb +157 -0
- data/lib/inspec/errors.rb +14 -0
- data/lib/inspec/exceptions.rb +12 -0
- data/lib/inspec/expect.rb +45 -0
- data/lib/inspec/fetcher.rb +45 -0
- data/lib/inspec/file_provider.rb +275 -0
- data/lib/inspec/formatters.rb +3 -0
- data/lib/inspec/formatters/base.rb +259 -0
- data/lib/inspec/formatters/json_rspec.rb +20 -0
- data/lib/inspec/formatters/show_progress.rb +12 -0
- data/lib/inspec/library_eval_context.rb +58 -0
- data/lib/inspec/log.rb +11 -0
- data/lib/inspec/metadata.rb +247 -0
- data/lib/inspec/method_source.rb +24 -0
- data/lib/inspec/objects.rb +14 -0
- data/lib/inspec/objects/attribute.rb +75 -0
- data/lib/inspec/objects/control.rb +61 -0
- data/lib/inspec/objects/describe.rb +92 -0
- data/lib/inspec/objects/each_loop.rb +36 -0
- data/lib/inspec/objects/list.rb +15 -0
- data/lib/inspec/objects/or_test.rb +40 -0
- data/lib/inspec/objects/ruby_helper.rb +15 -0
- data/lib/inspec/objects/tag.rb +27 -0
- data/lib/inspec/objects/test.rb +87 -0
- data/lib/inspec/objects/value.rb +27 -0
- data/lib/inspec/plugins.rb +60 -0
- data/lib/inspec/plugins/cli.rb +24 -0
- data/lib/inspec/plugins/fetcher.rb +86 -0
- data/lib/inspec/plugins/resource.rb +135 -0
- data/lib/inspec/plugins/secret.rb +15 -0
- data/lib/inspec/plugins/source_reader.rb +40 -0
- data/lib/inspec/polyfill.rb +12 -0
- data/lib/inspec/profile.rb +513 -0
- data/lib/inspec/profile_context.rb +208 -0
- data/lib/inspec/profile_vendor.rb +66 -0
- data/lib/inspec/reporters.rb +60 -0
- data/lib/inspec/reporters/automate.rb +76 -0
- data/lib/inspec/reporters/base.rb +25 -0
- data/lib/inspec/reporters/cli.rb +356 -0
- data/lib/inspec/reporters/json.rb +116 -0
- data/lib/inspec/reporters/json_min.rb +48 -0
- data/lib/inspec/reporters/junit.rb +78 -0
- data/lib/inspec/require_loader.rb +33 -0
- data/lib/inspec/resource.rb +190 -0
- data/lib/inspec/rule.rb +280 -0
- data/lib/inspec/runner.rb +345 -0
- data/lib/inspec/runner_mock.rb +41 -0
- data/lib/inspec/runner_rspec.rb +175 -0
- data/lib/inspec/runtime_profile.rb +26 -0
- data/lib/inspec/schema.rb +213 -0
- data/lib/inspec/secrets.rb +19 -0
- data/lib/inspec/secrets/yaml.rb +30 -0
- data/lib/inspec/shell.rb +220 -0
- data/lib/inspec/shell_detector.rb +90 -0
- data/lib/inspec/source_reader.rb +29 -0
- data/lib/inspec/version.rb +8 -0
- data/lib/matchers/matchers.rb +339 -0
- data/lib/resources/aide_conf.rb +151 -0
- data/lib/resources/apache.rb +48 -0
- data/lib/resources/apache_conf.rb +149 -0
- data/lib/resources/apt.rb +149 -0
- data/lib/resources/audit_policy.rb +63 -0
- data/lib/resources/auditd.rb +231 -0
- data/lib/resources/auditd_conf.rb +46 -0
- data/lib/resources/bash.rb +35 -0
- data/lib/resources/bond.rb +69 -0
- data/lib/resources/bridge.rb +122 -0
- data/lib/resources/chocolatey_package.rb +78 -0
- data/lib/resources/command.rb +73 -0
- data/lib/resources/cpan.rb +58 -0
- data/lib/resources/cran.rb +64 -0
- data/lib/resources/crontab.rb +169 -0
- data/lib/resources/csv.rb +56 -0
- data/lib/resources/dh_params.rb +77 -0
- data/lib/resources/directory.rb +25 -0
- data/lib/resources/docker.rb +236 -0
- data/lib/resources/docker_container.rb +89 -0
- data/lib/resources/docker_image.rb +83 -0
- data/lib/resources/docker_object.rb +57 -0
- data/lib/resources/docker_service.rb +90 -0
- data/lib/resources/elasticsearch.rb +169 -0
- data/lib/resources/etc_fstab.rb +94 -0
- data/lib/resources/etc_group.rb +154 -0
- data/lib/resources/etc_hosts.rb +66 -0
- data/lib/resources/etc_hosts_allow_deny.rb +112 -0
- data/lib/resources/file.rb +298 -0
- data/lib/resources/filesystem.rb +31 -0
- data/lib/resources/firewalld.rb +143 -0
- data/lib/resources/gem.rb +70 -0
- data/lib/resources/groups.rb +215 -0
- data/lib/resources/grub_conf.rb +227 -0
- data/lib/resources/host.rb +306 -0
- data/lib/resources/http.rb +253 -0
- data/lib/resources/iis_app.rb +101 -0
- data/lib/resources/iis_site.rb +148 -0
- data/lib/resources/inetd_conf.rb +54 -0
- data/lib/resources/ini.rb +29 -0
- data/lib/resources/interface.rb +129 -0
- data/lib/resources/iptables.rb +80 -0
- data/lib/resources/json.rb +111 -0
- data/lib/resources/kernel_module.rb +107 -0
- data/lib/resources/kernel_parameter.rb +58 -0
- data/lib/resources/key_rsa.rb +63 -0
- data/lib/resources/limits_conf.rb +46 -0
- data/lib/resources/login_def.rb +57 -0
- data/lib/resources/mount.rb +88 -0
- data/lib/resources/mssql_session.rb +101 -0
- data/lib/resources/mysql.rb +82 -0
- data/lib/resources/mysql_conf.rb +127 -0
- data/lib/resources/mysql_session.rb +85 -0
- data/lib/resources/nginx.rb +96 -0
- data/lib/resources/nginx_conf.rb +226 -0
- data/lib/resources/npm.rb +48 -0
- data/lib/resources/ntp_conf.rb +51 -0
- data/lib/resources/oneget.rb +71 -0
- data/lib/resources/oracledb_session.rb +139 -0
- data/lib/resources/os.rb +36 -0
- data/lib/resources/os_env.rb +86 -0
- data/lib/resources/package.rb +370 -0
- data/lib/resources/packages.rb +111 -0
- data/lib/resources/parse_config.rb +112 -0
- data/lib/resources/passwd.rb +76 -0
- data/lib/resources/pip.rb +130 -0
- data/lib/resources/platform.rb +109 -0
- data/lib/resources/port.rb +771 -0
- data/lib/resources/postgres.rb +131 -0
- data/lib/resources/postgres_conf.rb +114 -0
- data/lib/resources/postgres_hba_conf.rb +90 -0
- data/lib/resources/postgres_ident_conf.rb +79 -0
- data/lib/resources/postgres_session.rb +71 -0
- data/lib/resources/powershell.rb +67 -0
- data/lib/resources/processes.rb +204 -0
- data/lib/resources/rabbitmq_conf.rb +51 -0
- data/lib/resources/registry_key.rb +297 -0
- data/lib/resources/security_policy.rb +180 -0
- data/lib/resources/service.rb +794 -0
- data/lib/resources/shadow.rb +159 -0
- data/lib/resources/ssh_conf.rb +97 -0
- data/lib/resources/ssl.rb +99 -0
- data/lib/resources/sys_info.rb +28 -0
- data/lib/resources/toml.rb +32 -0
- data/lib/resources/users.rb +654 -0
- data/lib/resources/vbscript.rb +68 -0
- data/lib/resources/virtualization.rb +247 -0
- data/lib/resources/windows_feature.rb +84 -0
- data/lib/resources/windows_hotfix.rb +35 -0
- data/lib/resources/windows_task.rb +102 -0
- data/lib/resources/wmi.rb +110 -0
- data/lib/resources/x509_certificate.rb +137 -0
- data/lib/resources/xinetd.rb +106 -0
- data/lib/resources/xml.rb +46 -0
- data/lib/resources/yaml.rb +43 -0
- data/lib/resources/yum.rb +180 -0
- data/lib/resources/zfs_dataset.rb +60 -0
- data/lib/resources/zfs_pool.rb +49 -0
- data/lib/source_readers/flat.rb +39 -0
- data/lib/source_readers/inspec.rb +75 -0
- data/lib/utils/command_wrapper.rb +27 -0
- data/lib/utils/convert.rb +12 -0
- data/lib/utils/database_helpers.rb +77 -0
- data/lib/utils/enumerable_delegation.rb +9 -0
- data/lib/utils/erlang_parser.rb +192 -0
- data/lib/utils/file_reader.rb +25 -0
- data/lib/utils/filter.rb +273 -0
- data/lib/utils/filter_array.rb +27 -0
- data/lib/utils/find_files.rb +47 -0
- data/lib/utils/hash.rb +41 -0
- data/lib/utils/json_log.rb +18 -0
- data/lib/utils/latest_version.rb +22 -0
- data/lib/utils/modulator.rb +12 -0
- data/lib/utils/nginx_parser.rb +105 -0
- data/lib/utils/object_traversal.rb +49 -0
- data/lib/utils/parser.rb +274 -0
- data/lib/utils/pkey_reader.rb +15 -0
- data/lib/utils/plugin_registry.rb +93 -0
- data/lib/utils/simpleconfig.rb +120 -0
- data/lib/utils/spdx.rb +13 -0
- data/lib/utils/spdx.txt +344 -0
- metadata +713 -0
@@ -0,0 +1,58 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Inspec::Resources
|
4
|
+
class KernelParameter < Inspec.resource(1)
|
5
|
+
name 'kernel_parameter'
|
6
|
+
supports platform: 'unix'
|
7
|
+
desc 'Use the kernel_parameter InSpec audit resource to test kernel parameters on Linux platforms.'
|
8
|
+
example "
|
9
|
+
describe kernel_parameter('net.ipv4.conf.all.forwarding') do
|
10
|
+
its('value') { should eq 0 }
|
11
|
+
end
|
12
|
+
"
|
13
|
+
|
14
|
+
def initialize(parameter = nil)
|
15
|
+
@parameter = parameter
|
16
|
+
|
17
|
+
# this resource is only supported on Linux
|
18
|
+
return skip_resource 'The `kernel_parameter` resource is not supported on your OS.' if !inspec.os.linux?
|
19
|
+
end
|
20
|
+
|
21
|
+
def value
|
22
|
+
cmd = inspec.command("/sbin/sysctl -q -n #{@parameter}")
|
23
|
+
return nil if cmd.exit_status != 0
|
24
|
+
# remove whitespace
|
25
|
+
cmd = cmd.stdout.chomp.strip
|
26
|
+
# convert to number if possible
|
27
|
+
cmd = cmd.to_i if cmd =~ /^\d+$/
|
28
|
+
cmd
|
29
|
+
end
|
30
|
+
|
31
|
+
def to_s
|
32
|
+
"Kernel Parameter #{@parameter}"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
# for compatability with serverspec
|
37
|
+
# this is deprecated syntax and will be removed in future versions
|
38
|
+
class LinuxKernelParameter < KernelParameter
|
39
|
+
name 'linux_kernel_parameter'
|
40
|
+
|
41
|
+
def initialize(parameter)
|
42
|
+
super(parameter)
|
43
|
+
end
|
44
|
+
|
45
|
+
def value
|
46
|
+
deprecated
|
47
|
+
super()
|
48
|
+
end
|
49
|
+
|
50
|
+
def deprecated
|
51
|
+
warn '[DEPRECATION] `linux_kernel_parameter(parameter)` is deprecated. Please use `kernel_parameter(parameter)` instead.'
|
52
|
+
end
|
53
|
+
|
54
|
+
def to_s
|
55
|
+
"Kernel Parameter #{@parameter}"
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'openssl'
|
4
|
+
require 'hashie/mash'
|
5
|
+
require 'utils/file_reader'
|
6
|
+
require 'utils/pkey_reader'
|
7
|
+
|
8
|
+
module Inspec::Resources
|
9
|
+
class RsaKey < Inspec.resource(1)
|
10
|
+
name 'key_rsa'
|
11
|
+
supports platform: 'unix'
|
12
|
+
supports platform: 'windows'
|
13
|
+
desc 'public/private RSA key pair test'
|
14
|
+
example "
|
15
|
+
describe key_rsa('/etc/pki/www.mywebsite.com.key') do
|
16
|
+
its('public_key') { should match /BEGIN RSA PUBLIC KEY/ }
|
17
|
+
end
|
18
|
+
|
19
|
+
describe key_rsa('/etc/pki/www.mywebsite.com.key', 'passphrase') do
|
20
|
+
it { should be_private }
|
21
|
+
it { should be_public }
|
22
|
+
end
|
23
|
+
"
|
24
|
+
|
25
|
+
include FileReader
|
26
|
+
include PkeyReader
|
27
|
+
|
28
|
+
def initialize(keypath, passphrase = nil)
|
29
|
+
@key_path = keypath
|
30
|
+
@passphrase = passphrase
|
31
|
+
@key = read_pkey(read_file_content(@key_path, allow_empty: true), @passphrase)
|
32
|
+
end
|
33
|
+
|
34
|
+
def public?
|
35
|
+
return if @key.nil?
|
36
|
+
@key.public?
|
37
|
+
end
|
38
|
+
|
39
|
+
def public_key
|
40
|
+
return if @key.nil?
|
41
|
+
@key.public_key.to_s
|
42
|
+
end
|
43
|
+
|
44
|
+
def private?
|
45
|
+
return if @key.nil?
|
46
|
+
@key.private?
|
47
|
+
end
|
48
|
+
|
49
|
+
def private_key
|
50
|
+
return if @key.nil?
|
51
|
+
@key.to_s
|
52
|
+
end
|
53
|
+
|
54
|
+
def key_length
|
55
|
+
return if @key.nil?
|
56
|
+
@key.public_key.n.num_bytes * 8
|
57
|
+
end
|
58
|
+
|
59
|
+
def to_s
|
60
|
+
"rsa_key #{@key_path}"
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
# copyright: 2015, Vulcano Security GmbH
|
3
|
+
|
4
|
+
require 'utils/simpleconfig'
|
5
|
+
require 'utils/file_reader'
|
6
|
+
|
7
|
+
module Inspec::Resources
|
8
|
+
class LimitsConf < Inspec.resource(1)
|
9
|
+
name 'limits_conf'
|
10
|
+
supports platform: 'unix'
|
11
|
+
desc 'Use the limits_conf InSpec audit resource to test configuration settings in the /etc/security/limits.conf file. The limits.conf defines limits for processes (by user and/or group names) and helps ensure that the system on which those processes are running remains stable. Each process may be assigned a hard or soft limit.'
|
12
|
+
example "
|
13
|
+
describe limits_conf do
|
14
|
+
its('*') { should include ['hard','core','0'] }
|
15
|
+
end
|
16
|
+
"
|
17
|
+
|
18
|
+
include FileReader
|
19
|
+
|
20
|
+
def initialize(path = nil)
|
21
|
+
@conf_path = path || '/etc/security/limits.conf'
|
22
|
+
@content = read_file_content(@conf_path)
|
23
|
+
end
|
24
|
+
|
25
|
+
def method_missing(name)
|
26
|
+
read_params[name.to_s]
|
27
|
+
end
|
28
|
+
|
29
|
+
def read_params
|
30
|
+
return @params if defined?(@params)
|
31
|
+
|
32
|
+
# parse the file
|
33
|
+
conf = SimpleConfig.new(
|
34
|
+
@content,
|
35
|
+
assignment_regex: /^\s*(\S+?)\s+(.*?)\s+(.*?)\s+(.*?)\s*$/,
|
36
|
+
key_values: 3,
|
37
|
+
multiple_values: true,
|
38
|
+
)
|
39
|
+
@params = conf.params
|
40
|
+
end
|
41
|
+
|
42
|
+
def to_s
|
43
|
+
'limits.conf'
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
# copyright: 2015, Vulcano Security GmbH
|
3
|
+
|
4
|
+
require 'utils/simpleconfig'
|
5
|
+
require 'utils/file_reader'
|
6
|
+
|
7
|
+
# Usage:
|
8
|
+
#
|
9
|
+
# describe login_def do
|
10
|
+
# its('UMASK') {
|
11
|
+
# should eq '077'
|
12
|
+
# }
|
13
|
+
#
|
14
|
+
# its('PASS_MAX_DAYS.to_i') {
|
15
|
+
# should be <= 90
|
16
|
+
# }
|
17
|
+
# end
|
18
|
+
|
19
|
+
module Inspec::Resources
|
20
|
+
class LoginDef < Inspec.resource(1)
|
21
|
+
name 'login_defs'
|
22
|
+
supports platform: 'unix'
|
23
|
+
desc 'Use the login_defs InSpec audit resource to test configuration settings in the /etc/login.defs file. The logins.defs file defines site-specific configuration for the shadow password suite on Linux and UNIX platforms, such as password expiration ranges, minimum/maximum values for automatic selection of user and group identifiers, or the method with which passwords are encrypted.'
|
24
|
+
example "
|
25
|
+
describe login_defs do
|
26
|
+
its('ENCRYPT_METHOD') { should eq 'SHA512' }
|
27
|
+
end
|
28
|
+
"
|
29
|
+
|
30
|
+
include FileReader
|
31
|
+
|
32
|
+
def initialize(path = nil)
|
33
|
+
@conf_path = path || '/etc/login.defs'
|
34
|
+
@content = read_file_content(@conf_path)
|
35
|
+
end
|
36
|
+
|
37
|
+
def method_missing(name)
|
38
|
+
read_params[name.to_s]
|
39
|
+
end
|
40
|
+
|
41
|
+
def read_params
|
42
|
+
return @params if defined?(@params)
|
43
|
+
|
44
|
+
# parse the file
|
45
|
+
conf = SimpleConfig.new(
|
46
|
+
@content,
|
47
|
+
assignment_regex: /^\s*(\S+)\s+(\S*)\s*$/,
|
48
|
+
multiple_values: false,
|
49
|
+
)
|
50
|
+
@params = conf.params
|
51
|
+
end
|
52
|
+
|
53
|
+
def to_s
|
54
|
+
'login.defs'
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'utils/simpleconfig'
|
4
|
+
|
5
|
+
module Inspec::Resources
|
6
|
+
class Mount < Inspec.resource(1)
|
7
|
+
name 'mount'
|
8
|
+
supports platform: 'unix'
|
9
|
+
desc 'Use the mount InSpec audit resource to test if mount points.'
|
10
|
+
example "
|
11
|
+
describe mount('/') do
|
12
|
+
it { should be_mounted }
|
13
|
+
its('count') { should eq 1 }
|
14
|
+
its('device') { should eq '/dev/mapper/VolGroup-lv_root' }
|
15
|
+
its('type') { should eq 'ext4' }
|
16
|
+
its('options') { should eq ['rw', 'mode=620'] }
|
17
|
+
its('options') { should include 'nodev' }
|
18
|
+
end
|
19
|
+
"
|
20
|
+
attr_reader :file
|
21
|
+
|
22
|
+
def initialize(path)
|
23
|
+
@path = path
|
24
|
+
@mount_manager = mount_manager_for_os
|
25
|
+
return skip_resource 'The `mount` resource is not supported on your OS yet.' if @mount_manager.nil?
|
26
|
+
@file = inspec.backend.file(@path)
|
27
|
+
end
|
28
|
+
|
29
|
+
def mounted?
|
30
|
+
file.mounted?
|
31
|
+
end
|
32
|
+
|
33
|
+
def count
|
34
|
+
mounted = file.mounted
|
35
|
+
return nil if mounted.nil? || mounted.stdout.nil?
|
36
|
+
mounted.stdout.lines.count
|
37
|
+
end
|
38
|
+
|
39
|
+
def method_missing(name)
|
40
|
+
return nil if !file.mounted?
|
41
|
+
|
42
|
+
mounted = file.mounted
|
43
|
+
return nil if mounted.nil? || mounted.stdout.nil?
|
44
|
+
|
45
|
+
line = mounted.stdout
|
46
|
+
# if we got multiple lines, only use the last entry
|
47
|
+
line = mounted.stdout.lines.to_a.last if mounted.stdout.lines.count > 1
|
48
|
+
|
49
|
+
# parse content if we are on linux
|
50
|
+
@mount_options ||= @mount_manager.parse_mount_options(line)
|
51
|
+
@mount_options[name]
|
52
|
+
end
|
53
|
+
|
54
|
+
def to_s
|
55
|
+
"Mount #{@path}"
|
56
|
+
end
|
57
|
+
|
58
|
+
private
|
59
|
+
|
60
|
+
def mount_manager_for_os
|
61
|
+
os = inspec.os
|
62
|
+
if os.linux?
|
63
|
+
LinuxMounts.new(inspec)
|
64
|
+
elsif ['freebsd'].include?(os[:family])
|
65
|
+
BsdMounts.new(inspec)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
class MountsInfo
|
71
|
+
attr_reader :inspec
|
72
|
+
def initialize(inspec)
|
73
|
+
@inspec = inspec
|
74
|
+
end
|
75
|
+
|
76
|
+
def parse_mount_options(_mount_line, _compatibility = false)
|
77
|
+
raise NotImplementedError
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
class LinuxMounts < MountsInfo
|
82
|
+
include LinuxMountParser
|
83
|
+
end
|
84
|
+
|
85
|
+
class BsdMounts < MountsInfo
|
86
|
+
include BsdMountParser
|
87
|
+
end
|
88
|
+
end
|
@@ -0,0 +1,101 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'hashie/mash'
|
4
|
+
require 'utils/database_helpers'
|
5
|
+
|
6
|
+
module Inspec::Resources
|
7
|
+
# STABILITY: Experimental
|
8
|
+
# This resource needs further testing and refinement
|
9
|
+
#
|
10
|
+
# This requires the `sqlcmd` tool available on platform
|
11
|
+
# @see https://docs.microsoft.com/en-us/sql/relational-databases/scripting/sqlcmd-use-the-utility
|
12
|
+
# @see https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-connect-and-query-sqlcmd
|
13
|
+
class MssqlSession < Inspec.resource(1)
|
14
|
+
name 'mssql_session'
|
15
|
+
supports platform: 'windows'
|
16
|
+
desc 'Use the mssql_session InSpec audit resource to test SQL commands run against a MS Sql Server database.'
|
17
|
+
example "
|
18
|
+
# Using SQL authentication
|
19
|
+
sql = mssql_session(user: 'myuser', pass: 'mypassword')
|
20
|
+
describe sql.query('SELECT * FROM table').row(0).column('columnname') do
|
21
|
+
its('value') { should cmp == 1 }
|
22
|
+
end
|
23
|
+
|
24
|
+
# Passing no credentials to mssql_session forces it to use Windows authentication
|
25
|
+
sql_windows_auth = mssql_session
|
26
|
+
describe sql_windows_auth.query(\"SELECT SERVERPROPERTY('IsIntegratedSecurityOnly') as \\\"login_mode\\\";\").row(0).column('login_mode') do
|
27
|
+
its('value') { should_not be_empty }
|
28
|
+
its('value') { should cmp == 1 }
|
29
|
+
end
|
30
|
+
"
|
31
|
+
|
32
|
+
attr_reader :user, :password, :host, :port, :instance
|
33
|
+
def initialize(opts = {})
|
34
|
+
@user = opts[:user]
|
35
|
+
@password = opts[:password] || opts[:pass]
|
36
|
+
if opts[:pass]
|
37
|
+
warn '[DEPRECATED] use `password` option to supply password instead of `pass`'
|
38
|
+
end
|
39
|
+
@host = opts[:host] || 'localhost'
|
40
|
+
@port = opts[:port] || '1433'
|
41
|
+
@instance = opts[:instance]
|
42
|
+
|
43
|
+
# check if sqlcmd is available
|
44
|
+
raise Inspec::Exceptions::ResourceSkipped, 'sqlcmd is missing' unless inspec.command('sqlcmd').exist?
|
45
|
+
# check that database is reachable
|
46
|
+
raise Inspec::Exceptions::ResourceSkipped, "Can't connect to the MS SQL Server." unless test_connection
|
47
|
+
end
|
48
|
+
|
49
|
+
def query(q)
|
50
|
+
escaped_query = q.gsub(/\\/, '\\\\').gsub(/"/, '\\"').gsub(/\$/, '\\$')
|
51
|
+
# surpress 'x rows affected' in SQLCMD with 'set nocount on;'
|
52
|
+
cmd_string = "sqlcmd -Q \"set nocount on; #{escaped_query}\" -W -w 1024 -s ','"
|
53
|
+
cmd_string += " -U '#{@user}' -P '#{@password}'" unless @user.nil? || @password.nil?
|
54
|
+
if @instance.nil?
|
55
|
+
cmd_string += " -S '#{@host},#{@port}'"
|
56
|
+
else
|
57
|
+
cmd_string += " -S '#{@host},#{@port}\\#{@instance}'"
|
58
|
+
end
|
59
|
+
cmd = inspec.command(cmd_string)
|
60
|
+
out = cmd.stdout + "\n" + cmd.stderr
|
61
|
+
if cmd.exit_status != 0 || out =~ /Sqlcmd: Error/
|
62
|
+
# TODO: we need to throw an exception here
|
63
|
+
# change once https://github.com/chef/inspec/issues/1205 is in
|
64
|
+
warn "Could not execute the sql query #{out}"
|
65
|
+
DatabaseHelper::SQLQueryResult.new(cmd, Hashie::Mash.new({}))
|
66
|
+
else
|
67
|
+
DatabaseHelper::SQLQueryResult.new(cmd, parse_csv_result(cmd))
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def to_s
|
72
|
+
'MSSQL session'
|
73
|
+
end
|
74
|
+
|
75
|
+
private
|
76
|
+
|
77
|
+
def test_connection
|
78
|
+
!query('select getdate()').empty?
|
79
|
+
end
|
80
|
+
|
81
|
+
def parse_csv_result(cmd)
|
82
|
+
require 'csv'
|
83
|
+
table = CSV.parse(cmd.stdout, { headers: true })
|
84
|
+
|
85
|
+
# remove first row, since it will be a seperator line
|
86
|
+
table.delete(0)
|
87
|
+
|
88
|
+
# convert to hash
|
89
|
+
headers = table.headers
|
90
|
+
|
91
|
+
results = table.map { |row|
|
92
|
+
res = {}
|
93
|
+
headers.each { |header|
|
94
|
+
res[header.downcase] = row[header]
|
95
|
+
}
|
96
|
+
Hashie::Mash.new(res)
|
97
|
+
}
|
98
|
+
results
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
# copyright: 2015, Vulcano Security GmbH
|
3
|
+
|
4
|
+
module Inspec::Resources
|
5
|
+
class Mysql < Inspec.resource(1)
|
6
|
+
name 'mysql'
|
7
|
+
supports platform: 'unix'
|
8
|
+
desc 'The \'mysql\' resource is a helper for the \'mysql_conf\' & \'mysql_session\' resources. Please use those instead.'
|
9
|
+
|
10
|
+
attr_reader :package, :service, :conf_dir, :conf_path, :data_dir, :log_dir, :log_path, :log_group, :log_dir_group
|
11
|
+
def initialize
|
12
|
+
# set OS-dependent filenames and paths
|
13
|
+
case inspec.os[:family]
|
14
|
+
when 'debian'
|
15
|
+
init_ubuntu
|
16
|
+
when 'redhat', 'fedora'
|
17
|
+
init_redhat
|
18
|
+
when 'arch'
|
19
|
+
init_arch
|
20
|
+
else
|
21
|
+
# TODO: could not detect
|
22
|
+
init_default
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def init_ubuntu
|
27
|
+
@package = 'mysql-server'
|
28
|
+
@service = 'mysql'
|
29
|
+
@conf_path = '/etc/mysql/my.cnf'
|
30
|
+
@conf_dir = '/etc/mysql/'
|
31
|
+
@data_dir = '/var/lib/mysql/'
|
32
|
+
@log_dir = '/var/log/'
|
33
|
+
@log_path = '/var/log/mysql.log'
|
34
|
+
@log_group = 'adm'
|
35
|
+
case inspec.os[:release]
|
36
|
+
when '14.04'
|
37
|
+
@log_dir_group = 'syslog'
|
38
|
+
else
|
39
|
+
@log_dir_group = 'root'
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def init_redhat
|
44
|
+
@package = 'mysql-server'
|
45
|
+
@service = 'mysqld'
|
46
|
+
@conf_path = '/etc/my.cnf'
|
47
|
+
@conf_dir = '/etc/'
|
48
|
+
@data_dir = '/var/lib/mysql/'
|
49
|
+
@log_dir = '/var/log/'
|
50
|
+
@log_path = '/var/log/mysqld.log'
|
51
|
+
@log_group = 'mysql'
|
52
|
+
@log_dir_group = 'root'
|
53
|
+
end
|
54
|
+
|
55
|
+
def init_arch
|
56
|
+
@package = 'mariadb'
|
57
|
+
@service = 'mysql'
|
58
|
+
@conf_path = '/etc/mysql/my.cnf'
|
59
|
+
@conf_dir = '/etc/mysql/'
|
60
|
+
@data_dir = '/var/lib/mysql/'
|
61
|
+
@log_dir = '/var/log/'
|
62
|
+
@log_path = '/var/log/mysql.log'
|
63
|
+
@log_group = 'mysql'
|
64
|
+
@log_dir_group = 'root'
|
65
|
+
end
|
66
|
+
|
67
|
+
def init_default
|
68
|
+
@service = 'mysqld'
|
69
|
+
@conf_path = '/etc/my.cnf'
|
70
|
+
@conf_dir = '/etc/'
|
71
|
+
@data_dir = '/var/lib/mysql/'
|
72
|
+
@log_dir = '/var/log/'
|
73
|
+
@log_path = '/var/log/mysqld.log'
|
74
|
+
@log_group = 'mysql'
|
75
|
+
@log_dir_group = 'root'
|
76
|
+
end
|
77
|
+
|
78
|
+
def to_s
|
79
|
+
'MySQL'
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|