inspec 2.0.32 → 2.0.45
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/.rubocop.yml +101 -101
- data/CHANGELOG.md +2991 -2970
- data/Gemfile +55 -55
- data/LICENSE +14 -14
- data/MAINTAINERS.md +33 -33
- data/MAINTAINERS.toml +52 -52
- data/README.md +446 -437
- data/Rakefile +322 -322
- data/bin/inspec +12 -12
- data/docs/.gitignore +2 -2
- data/docs/README.md +40 -40
- data/docs/dsl_inspec.md +258 -258
- data/docs/dsl_resource.md +93 -93
- data/docs/glossary.md +99 -99
- data/docs/habitat.md +191 -191
- data/docs/inspec_and_friends.md +107 -107
- data/docs/matchers.md +169 -168
- data/docs/migration.md +293 -293
- data/docs/platforms.md +118 -118
- data/docs/plugin_kitchen_inspec.md +49 -49
- data/docs/profiles.md +370 -370
- data/docs/reporters.md +105 -105
- data/docs/resources/aide_conf.md.erb +75 -75
- data/docs/resources/apache.md.erb +67 -67
- data/docs/resources/apache_conf.md.erb +68 -68
- data/docs/resources/apt.md.erb +71 -71
- data/docs/resources/audit_policy.md.erb +47 -47
- data/docs/resources/auditd.md.erb +79 -79
- data/docs/resources/auditd_conf.md.erb +68 -68
- data/docs/resources/aws_cloudtrail_trail.md.erb +140 -140
- data/docs/resources/aws_cloudtrail_trails.md.erb +81 -81
- data/docs/resources/aws_cloudwatch_alarm.md.erb +86 -86
- data/docs/resources/aws_cloudwatch_log_metric_filter.md.erb +151 -151
- data/docs/resources/aws_config_recorder.md.erb +71 -71
- data/docs/resources/aws_ec2_instance.md.erb +106 -106
- data/docs/resources/aws_iam_access_key.md.erb +123 -123
- data/docs/resources/aws_iam_access_keys.md.erb +198 -198
- data/docs/resources/aws_iam_group.md.erb +46 -46
- data/docs/resources/aws_iam_groups.md.erb +43 -43
- data/docs/resources/aws_iam_password_policy.md.erb +76 -76
- data/docs/resources/aws_iam_policies.md.erb +82 -82
- data/docs/resources/aws_iam_policy.md.erb +144 -144
- data/docs/resources/aws_iam_role.md.erb +63 -63
- data/docs/resources/aws_iam_root_user.md.erb +58 -58
- data/docs/resources/aws_iam_user.md.erb +64 -64
- data/docs/resources/aws_iam_users.md.erb +89 -89
- data/docs/resources/aws_kms_keys.md.erb +84 -84
- data/docs/resources/aws_route_table.md.erb +47 -47
- data/docs/resources/aws_s3_bucket.md.erb +134 -134
- data/docs/resources/aws_security_group.md.erb +151 -151
- data/docs/resources/aws_security_groups.md.erb +91 -91
- data/docs/resources/aws_sns_topic.md.erb +63 -63
- data/docs/resources/aws_subnet.md.erb +133 -133
- data/docs/resources/aws_subnets.md.erb +126 -126
- data/docs/resources/aws_vpc.md.erb +120 -120
- data/docs/resources/aws_vpcs.md.erb +48 -48
- data/docs/resources/azure_generic_resource.md.erb +170 -170
- data/docs/resources/azure_resource_group.md.erb +284 -284
- data/docs/resources/azure_virtual_machine.md.erb +347 -347
- data/docs/resources/azure_virtual_machine_data_disk.md.erb +224 -224
- data/docs/resources/bash.md.erb +75 -75
- data/docs/resources/bond.md.erb +90 -90
- data/docs/resources/bridge.md.erb +57 -57
- data/docs/resources/bsd_service.md.erb +67 -67
- data/docs/resources/command.md.erb +138 -138
- data/docs/resources/cpan.md.erb +79 -79
- data/docs/resources/cran.md.erb +64 -64
- data/docs/resources/crontab.md.erb +89 -89
- data/docs/resources/csv.md.erb +54 -54
- data/docs/resources/dh_params.md.erb +205 -205
- data/docs/resources/directory.md.erb +30 -30
- data/docs/resources/docker.md.erb +219 -219
- data/docs/resources/docker_container.md.erb +104 -104
- data/docs/resources/docker_image.md.erb +94 -94
- data/docs/resources/docker_service.md.erb +114 -114
- data/docs/resources/elasticsearch.md.erb +242 -242
- data/docs/resources/etc_fstab.md.erb +125 -125
- data/docs/resources/etc_group.md.erb +75 -75
- data/docs/resources/etc_hosts.md.erb +78 -78
- data/docs/resources/etc_hosts_allow.md.erb +74 -74
- data/docs/resources/etc_hosts_deny.md.erb +74 -74
- data/docs/resources/file.md.erb +526 -515
- data/docs/resources/filesystem.md.erb +41 -41
- data/docs/resources/firewalld.md.erb +107 -107
- data/docs/resources/gem.md.erb +79 -79
- data/docs/resources/group.md.erb +61 -61
- data/docs/resources/grub_conf.md.erb +101 -101
- data/docs/resources/host.md.erb +86 -86
- data/docs/resources/http.md.erb +196 -196
- data/docs/resources/iis_app.md.erb +122 -122
- data/docs/resources/iis_site.md.erb +135 -135
- data/docs/resources/inetd_conf.md.erb +94 -94
- data/docs/resources/ini.md.erb +76 -76
- data/docs/resources/interface.md.erb +58 -58
- data/docs/resources/iptables.md.erb +64 -64
- data/docs/resources/json.md.erb +63 -63
- data/docs/resources/kernel_module.md.erb +120 -120
- data/docs/resources/kernel_parameter.md.erb +53 -53
- data/docs/resources/key_rsa.md.erb +85 -85
- data/docs/resources/launchd_service.md.erb +57 -57
- data/docs/resources/limits_conf.md.erb +75 -75
- data/docs/resources/login_def.md.erb +71 -71
- data/docs/resources/mount.md.erb +69 -69
- data/docs/resources/mssql_session.md.erb +60 -60
- data/docs/resources/mysql_conf.md.erb +99 -99
- data/docs/resources/mysql_session.md.erb +74 -74
- data/docs/resources/nginx.md.erb +79 -79
- data/docs/resources/nginx_conf.md.erb +128 -128
- data/docs/resources/npm.md.erb +60 -60
- data/docs/resources/ntp_conf.md.erb +60 -60
- data/docs/resources/oneget.md.erb +53 -53
- data/docs/resources/oracledb_session.md.erb +52 -52
- data/docs/resources/os.md.erb +141 -141
- data/docs/resources/os_env.md.erb +78 -78
- data/docs/resources/package.md.erb +120 -120
- data/docs/resources/packages.md.erb +67 -67
- data/docs/resources/parse_config.md.erb +103 -103
- data/docs/resources/parse_config_file.md.erb +138 -138
- data/docs/resources/passwd.md.erb +141 -141
- data/docs/resources/pip.md.erb +67 -67
- data/docs/resources/port.md.erb +137 -137
- data/docs/resources/postgres_conf.md.erb +79 -79
- data/docs/resources/postgres_hba_conf.md.erb +93 -93
- data/docs/resources/postgres_ident_conf.md.erb +76 -76
- data/docs/resources/postgres_session.md.erb +69 -69
- data/docs/resources/powershell.md.erb +102 -102
- data/docs/resources/processes.md.erb +109 -109
- data/docs/resources/rabbitmq_config.md.erb +41 -41
- data/docs/resources/registry_key.md.erb +158 -158
- data/docs/resources/runit_service.md.erb +57 -57
- data/docs/resources/security_policy.md.erb +47 -47
- data/docs/resources/service.md.erb +121 -121
- data/docs/resources/shadow.md.erb +146 -144
- data/docs/resources/ssh_config.md.erb +80 -80
- data/docs/resources/sshd_config.md.erb +83 -83
- data/docs/resources/ssl.md.erb +119 -119
- data/docs/resources/sys_info.md.erb +42 -42
- data/docs/resources/systemd_service.md.erb +57 -57
- data/docs/resources/sysv_service.md.erb +57 -57
- data/docs/resources/upstart_service.md.erb +57 -57
- data/docs/resources/user.md.erb +140 -140
- data/docs/resources/users.md.erb +127 -127
- data/docs/resources/vbscript.md.erb +55 -55
- data/docs/resources/virtualization.md.erb +57 -57
- data/docs/resources/windows_feature.md.erb +47 -47
- data/docs/resources/windows_hotfix.md.erb +53 -53
- data/docs/resources/windows_task.md.erb +95 -95
- data/docs/resources/wmi.md.erb +81 -81
- data/docs/resources/x509_certificate.md.erb +151 -151
- data/docs/resources/xinetd_conf.md.erb +156 -156
- data/docs/resources/xml.md.erb +85 -85
- data/docs/resources/yaml.md.erb +69 -69
- data/docs/resources/yum.md.erb +98 -98
- data/docs/resources/zfs_dataset.md.erb +53 -53
- data/docs/resources/zfs_pool.md.erb +47 -47
- data/docs/ruby_usage.md +203 -203
- data/docs/shared/matcher_be.md.erb +1 -1
- data/docs/shared/matcher_cmp.md.erb +43 -43
- data/docs/shared/matcher_eq.md.erb +3 -3
- data/docs/shared/matcher_include.md.erb +1 -1
- data/docs/shared/matcher_match.md.erb +1 -1
- data/docs/shell.md +215 -215
- data/examples/README.md +8 -8
- data/examples/inheritance/README.md +65 -65
- data/examples/inheritance/controls/example.rb +14 -14
- data/examples/inheritance/inspec.yml +15 -15
- data/examples/kitchen-ansible/.kitchen.yml +25 -25
- data/examples/kitchen-ansible/Gemfile +19 -19
- data/examples/kitchen-ansible/README.md +53 -53
- data/examples/kitchen-ansible/files/nginx.repo +6 -6
- data/examples/kitchen-ansible/tasks/main.yml +16 -16
- data/examples/kitchen-ansible/test/integration/default/default.yml +5 -5
- data/examples/kitchen-ansible/test/integration/default/web_spec.rb +28 -28
- data/examples/kitchen-chef/.kitchen.yml +20 -20
- data/examples/kitchen-chef/Berksfile +3 -3
- data/examples/kitchen-chef/Gemfile +19 -19
- data/examples/kitchen-chef/README.md +27 -27
- data/examples/kitchen-chef/metadata.rb +7 -7
- data/examples/kitchen-chef/recipes/default.rb +6 -6
- data/examples/kitchen-chef/recipes/nginx.rb +30 -30
- data/examples/kitchen-chef/test/integration/default/web_spec.rb +28 -28
- data/examples/kitchen-puppet/.kitchen.yml +22 -22
- data/examples/kitchen-puppet/Gemfile +20 -20
- data/examples/kitchen-puppet/Puppetfile +25 -25
- data/examples/kitchen-puppet/README.md +53 -53
- data/examples/kitchen-puppet/manifests/site.pp +33 -33
- data/examples/kitchen-puppet/metadata.json +11 -11
- data/examples/kitchen-puppet/test/integration/default/web_spec.rb +28 -28
- data/examples/meta-profile/README.md +37 -37
- data/examples/meta-profile/controls/example.rb +13 -13
- data/examples/meta-profile/inspec.yml +13 -13
- data/examples/profile-attribute.yml +2 -2
- data/examples/profile-attribute/README.md +14 -14
- data/examples/profile-attribute/controls/example.rb +11 -11
- data/examples/profile-attribute/inspec.yml +8 -8
- data/examples/profile-aws/controls/iam_password_policy_expiration.rb +8 -8
- data/examples/profile-aws/controls/iam_password_policy_max_age.rb +8 -8
- data/examples/profile-aws/controls/iam_root_user_mfa.rb +8 -8
- data/examples/profile-aws/controls/iam_users_access_key_age.rb +8 -8
- data/examples/profile-aws/controls/iam_users_console_users_mfa.rb +8 -8
- data/examples/profile-aws/inspec.yml +11 -11
- data/examples/profile-azure/controls/azure_resource_group_example.rb +24 -24
- data/examples/profile-azure/controls/azure_vm_example.rb +29 -29
- data/examples/profile-azure/inspec.yml +11 -11
- data/examples/profile-sensitive/README.md +29 -29
- data/examples/profile-sensitive/controls/sensitive-failures.rb +9 -9
- data/examples/profile-sensitive/controls/sensitive.rb +9 -9
- data/examples/profile-sensitive/inspec.yml +8 -8
- data/examples/profile/README.md +48 -48
- data/examples/profile/controls/example.rb +23 -23
- data/examples/profile/controls/gordon.rb +36 -36
- data/examples/profile/controls/meta.rb +34 -34
- data/examples/profile/inspec.yml +10 -10
- data/examples/profile/libraries/gordon_config.rb +53 -53
- data/inspec.gemspec +47 -47
- data/lib/bundles/README.md +3 -3
- data/lib/bundles/inspec-artifact.rb +7 -7
- data/lib/bundles/inspec-artifact/README.md +1 -1
- data/lib/bundles/inspec-artifact/cli.rb +277 -277
- data/lib/bundles/inspec-compliance.rb +16 -16
- data/lib/bundles/inspec-compliance/.kitchen.yml +20 -20
- data/lib/bundles/inspec-compliance/README.md +185 -185
- data/lib/bundles/inspec-compliance/api.rb +316 -316
- data/lib/bundles/inspec-compliance/api/login.rb +152 -152
- data/lib/bundles/inspec-compliance/bootstrap.sh +41 -41
- data/lib/bundles/inspec-compliance/cli.rb +254 -254
- data/lib/bundles/inspec-compliance/configuration.rb +103 -103
- data/lib/bundles/inspec-compliance/http.rb +86 -86
- data/lib/bundles/inspec-compliance/support.rb +36 -36
- data/lib/bundles/inspec-compliance/target.rb +98 -98
- data/lib/bundles/inspec-compliance/test/integration/default/cli.rb +93 -93
- data/lib/bundles/inspec-habitat.rb +12 -12
- data/lib/bundles/inspec-habitat/cli.rb +36 -36
- data/lib/bundles/inspec-habitat/log.rb +10 -10
- data/lib/bundles/inspec-habitat/profile.rb +390 -390
- data/lib/bundles/inspec-init.rb +8 -8
- data/lib/bundles/inspec-init/README.md +31 -31
- data/lib/bundles/inspec-init/cli.rb +97 -97
- data/lib/bundles/inspec-init/templates/profile/README.md +3 -3
- data/lib/bundles/inspec-init/templates/profile/controls/example.rb +19 -19
- data/lib/bundles/inspec-init/templates/profile/inspec.yml +8 -8
- data/lib/bundles/inspec-supermarket.rb +13 -13
- data/lib/bundles/inspec-supermarket/README.md +45 -45
- data/lib/bundles/inspec-supermarket/api.rb +84 -84
- data/lib/bundles/inspec-supermarket/cli.rb +73 -73
- data/lib/bundles/inspec-supermarket/target.rb +34 -34
- data/lib/fetchers/git.rb +163 -163
- data/lib/fetchers/local.rb +74 -74
- data/lib/fetchers/mock.rb +35 -35
- data/lib/fetchers/url.rb +204 -204
- data/lib/inspec.rb +24 -24
- data/lib/inspec/archive/tar.rb +29 -29
- data/lib/inspec/archive/zip.rb +19 -19
- data/lib/inspec/backend.rb +92 -92
- data/lib/inspec/base_cli.rb +355 -350
- data/lib/inspec/cached_fetcher.rb +66 -66
- data/lib/inspec/cli.rb +292 -292
- data/lib/inspec/completions/bash.sh.erb +45 -45
- data/lib/inspec/completions/fish.sh.erb +34 -34
- data/lib/inspec/completions/zsh.sh.erb +61 -61
- data/lib/inspec/control_eval_context.rb +179 -179
- data/lib/inspec/dependencies/cache.rb +72 -72
- data/lib/inspec/dependencies/dependency_set.rb +92 -92
- data/lib/inspec/dependencies/lockfile.rb +115 -115
- data/lib/inspec/dependencies/requirement.rb +123 -123
- data/lib/inspec/dependencies/resolver.rb +86 -86
- data/lib/inspec/describe.rb +27 -27
- data/lib/inspec/dsl.rb +66 -66
- data/lib/inspec/dsl_shared.rb +33 -33
- data/lib/inspec/env_printer.rb +157 -157
- data/lib/inspec/errors.rb +13 -13
- data/lib/inspec/exceptions.rb +12 -12
- data/lib/inspec/expect.rb +45 -45
- data/lib/inspec/fetcher.rb +45 -45
- data/lib/inspec/file_provider.rb +275 -275
- data/lib/inspec/formatters.rb +3 -3
- data/lib/inspec/formatters/base.rb +250 -250
- data/lib/inspec/formatters/json_rspec.rb +20 -20
- data/lib/inspec/formatters/show_progress.rb +12 -12
- data/lib/inspec/library_eval_context.rb +58 -58
- data/lib/inspec/log.rb +11 -11
- data/lib/inspec/metadata.rb +247 -247
- data/lib/inspec/method_source.rb +24 -24
- data/lib/inspec/objects.rb +14 -14
- data/lib/inspec/objects/attribute.rb +65 -65
- data/lib/inspec/objects/control.rb +61 -61
- data/lib/inspec/objects/describe.rb +92 -92
- data/lib/inspec/objects/each_loop.rb +36 -36
- data/lib/inspec/objects/list.rb +15 -15
- data/lib/inspec/objects/or_test.rb +40 -40
- data/lib/inspec/objects/ruby_helper.rb +15 -15
- data/lib/inspec/objects/tag.rb +27 -27
- data/lib/inspec/objects/test.rb +87 -87
- data/lib/inspec/objects/value.rb +27 -27
- data/lib/inspec/plugins.rb +60 -60
- data/lib/inspec/plugins/cli.rb +24 -24
- data/lib/inspec/plugins/fetcher.rb +86 -86
- data/lib/inspec/plugins/resource.rb +135 -135
- data/lib/inspec/plugins/secret.rb +15 -15
- data/lib/inspec/plugins/source_reader.rb +40 -40
- data/lib/inspec/polyfill.rb +12 -12
- data/lib/inspec/profile.rb +510 -510
- data/lib/inspec/profile_context.rb +207 -207
- data/lib/inspec/profile_vendor.rb +66 -66
- data/lib/inspec/reporters.rb +54 -50
- data/lib/inspec/reporters/base.rb +24 -24
- data/lib/inspec/reporters/cli.rb +356 -356
- data/lib/inspec/reporters/json.rb +116 -116
- data/lib/inspec/reporters/json_min.rb +48 -48
- data/lib/inspec/reporters/junit.rb +77 -77
- data/lib/inspec/require_loader.rb +33 -33
- data/lib/inspec/resource.rb +186 -186
- data/lib/inspec/rule.rb +266 -266
- data/lib/inspec/runner.rb +345 -345
- data/lib/inspec/runner_mock.rb +41 -41
- data/lib/inspec/runner_rspec.rb +175 -175
- data/lib/inspec/runtime_profile.rb +26 -26
- data/lib/inspec/schema.rb +213 -213
- data/lib/inspec/secrets.rb +19 -19
- data/lib/inspec/secrets/yaml.rb +30 -30
- data/lib/inspec/shell.rb +220 -220
- data/lib/inspec/shell_detector.rb +90 -90
- data/lib/inspec/source_reader.rb +29 -29
- data/lib/inspec/version.rb +8 -8
- data/lib/matchers/matchers.rb +339 -339
- data/lib/resource_support/aws.rb +41 -41
- data/lib/resource_support/aws/aws_backend_base.rb +12 -12
- data/lib/resource_support/aws/aws_backend_factory_mixin.rb +12 -12
- data/lib/resource_support/aws/aws_plural_resource_mixin.rb +21 -21
- data/lib/resource_support/aws/aws_resource_mixin.rb +66 -66
- data/lib/resource_support/aws/aws_singular_resource_mixin.rb +24 -24
- data/lib/resources/aide_conf.rb +159 -160
- data/lib/resources/apache.rb +48 -48
- data/lib/resources/apache_conf.rb +156 -156
- data/lib/resources/apt.rb +149 -149
- data/lib/resources/audit_policy.rb +63 -63
- data/lib/resources/auditd.rb +231 -231
- data/lib/resources/auditd_conf.rb +55 -55
- data/lib/resources/aws/aws_cloudtrail_trail.rb +77 -77
- data/lib/resources/aws/aws_cloudtrail_trails.rb +47 -47
- data/lib/resources/aws/aws_cloudwatch_alarm.rb +62 -62
- data/lib/resources/aws/aws_cloudwatch_log_metric_filter.rb +100 -100
- data/lib/resources/aws/aws_config_recorder.rb +98 -98
- data/lib/resources/aws/aws_ec2_instance.rb +157 -157
- data/lib/resources/aws/aws_iam_access_key.rb +106 -106
- data/lib/resources/aws/aws_iam_access_keys.rb +149 -144
- data/lib/resources/aws/aws_iam_group.rb +56 -56
- data/lib/resources/aws/aws_iam_groups.rb +52 -45
- data/lib/resources/aws/aws_iam_password_policy.rb +116 -116
- data/lib/resources/aws/aws_iam_policies.rb +53 -46
- data/lib/resources/aws/aws_iam_policy.rb +125 -119
- data/lib/resources/aws/aws_iam_role.rb +51 -51
- data/lib/resources/aws/aws_iam_root_user.rb +60 -60
- data/lib/resources/aws/aws_iam_user.rb +111 -111
- data/lib/resources/aws/aws_iam_users.rb +108 -96
- data/lib/resources/aws/aws_kms_keys.rb +53 -46
- data/lib/resources/aws/aws_route_table.rb +61 -61
- data/lib/resources/aws/aws_s3_bucket.rb +115 -115
- data/lib/resources/aws/aws_security_group.rb +93 -93
- data/lib/resources/aws/aws_security_groups.rb +68 -68
- data/lib/resources/aws/aws_sns_topic.rb +53 -53
- data/lib/resources/aws/aws_subnet.rb +88 -88
- data/lib/resources/aws/aws_subnets.rb +53 -53
- data/lib/resources/aws/aws_vpc.rb +69 -69
- data/lib/resources/aws/aws_vpcs.rb +45 -45
- data/lib/resources/azure/azure_backend.rb +377 -377
- data/lib/resources/azure/azure_generic_resource.rb +59 -59
- data/lib/resources/azure/azure_resource_group.rb +152 -152
- data/lib/resources/azure/azure_virtual_machine.rb +264 -264
- data/lib/resources/azure/azure_virtual_machine_data_disk.rb +136 -136
- data/lib/resources/bash.rb +35 -35
- data/lib/resources/bond.rb +68 -68
- data/lib/resources/bridge.rb +122 -122
- data/lib/resources/command.rb +73 -69
- data/lib/resources/cpan.rb +58 -58
- data/lib/resources/cran.rb +64 -64
- data/lib/resources/crontab.rb +169 -170
- data/lib/resources/csv.rb +60 -60
- data/lib/resources/dh_params.rb +82 -82
- data/lib/resources/directory.rb +25 -25
- data/lib/resources/docker.rb +236 -236
- data/lib/resources/docker_container.rb +89 -89
- data/lib/resources/docker_image.rb +83 -83
- data/lib/resources/docker_object.rb +57 -57
- data/lib/resources/docker_service.rb +90 -90
- data/lib/resources/elasticsearch.rb +169 -169
- data/lib/resources/etc_fstab.rb +101 -102
- data/lib/resources/etc_group.rb +152 -156
- data/lib/resources/etc_hosts.rb +82 -81
- data/lib/resources/etc_hosts_allow_deny.rb +122 -123
- data/lib/resources/file.rb +298 -298
- data/lib/resources/filesystem.rb +31 -31
- data/lib/resources/firewalld.rb +143 -144
- data/lib/resources/gem.rb +70 -70
- data/lib/resources/groups.rb +215 -215
- data/lib/resources/grub_conf.rb +237 -237
- data/lib/resources/host.rb +306 -300
- data/lib/resources/http.rb +251 -250
- data/lib/resources/iis_app.rb +101 -104
- data/lib/resources/iis_site.rb +148 -148
- data/lib/resources/inetd_conf.rb +62 -62
- data/lib/resources/ini.rb +29 -29
- data/lib/resources/interface.rb +129 -129
- data/lib/resources/iptables.rb +80 -69
- data/lib/resources/json.rb +117 -117
- data/lib/resources/kernel_module.rb +107 -107
- data/lib/resources/kernel_parameter.rb +58 -58
- data/lib/resources/key_rsa.rb +67 -67
- data/lib/resources/limits_conf.rb +55 -55
- data/lib/resources/login_def.rb +66 -66
- data/lib/resources/mount.rb +88 -88
- data/lib/resources/mssql_session.rb +101 -101
- data/lib/resources/mysql.rb +81 -81
- data/lib/resources/mysql_conf.rb +134 -134
- data/lib/resources/mysql_session.rb +71 -71
- data/lib/resources/nginx.rb +96 -96
- data/lib/resources/nginx_conf.rb +227 -227
- data/lib/resources/npm.rb +48 -48
- data/lib/resources/ntp_conf.rb +58 -58
- data/lib/resources/oneget.rb +71 -71
- data/lib/resources/oracledb_session.rb +139 -139
- data/lib/resources/os.rb +36 -36
- data/lib/resources/os_env.rb +76 -76
- data/lib/resources/package.rb +370 -370
- data/lib/resources/packages.rb +111 -111
- data/lib/resources/parse_config.rb +116 -116
- data/lib/resources/passwd.rb +74 -74
- data/lib/resources/pip.rb +89 -89
- data/lib/resources/platform.rb +109 -109
- data/lib/resources/port.rb +771 -771
- data/lib/resources/postgres.rb +130 -130
- data/lib/resources/postgres_conf.rb +121 -121
- data/lib/resources/postgres_hba_conf.rb +99 -100
- data/lib/resources/postgres_ident_conf.rb +76 -78
- data/lib/resources/postgres_session.rb +71 -71
- data/lib/resources/powershell.rb +53 -57
- data/lib/resources/processes.rb +204 -204
- data/lib/resources/rabbitmq_conf.rb +52 -52
- data/lib/resources/registry_key.rb +296 -296
- data/lib/resources/security_policy.rb +180 -180
- data/lib/resources/service.rb +789 -789
- data/lib/resources/shadow.rb +146 -140
- data/lib/resources/ssh_conf.rb +102 -102
- data/lib/resources/ssl.rb +99 -99
- data/lib/resources/sys_info.rb +28 -28
- data/lib/resources/toml.rb +32 -32
- data/lib/resources/users.rb +654 -654
- data/lib/resources/vbscript.rb +68 -69
- data/lib/resources/virtualization.rb +247 -247
- data/lib/resources/windows_feature.rb +84 -84
- data/lib/resources/windows_hotfix.rb +35 -35
- data/lib/resources/windows_task.rb +102 -105
- data/lib/resources/wmi.rb +110 -113
- data/lib/resources/x509_certificate.rb +143 -143
- data/lib/resources/xinetd.rb +111 -111
- data/lib/resources/xml.rb +46 -46
- data/lib/resources/yaml.rb +47 -47
- data/lib/resources/yum.rb +180 -180
- data/lib/resources/zfs_dataset.rb +60 -60
- data/lib/resources/zfs_pool.rb +49 -49
- data/lib/source_readers/flat.rb +39 -39
- data/lib/source_readers/inspec.rb +75 -75
- data/lib/utils/command_wrapper.rb +27 -27
- data/lib/utils/convert.rb +12 -12
- data/lib/utils/database_helpers.rb +77 -77
- data/lib/utils/erlang_parser.rb +192 -192
- data/lib/utils/filter.rb +272 -272
- data/lib/utils/filter_array.rb +27 -27
- data/lib/utils/find_files.rb +44 -44
- data/lib/utils/hash.rb +41 -41
- data/lib/utils/json_log.rb +18 -18
- data/lib/utils/latest_version.rb +22 -22
- data/lib/utils/modulator.rb +12 -12
- data/lib/utils/nginx_parser.rb +85 -85
- data/lib/utils/object_traversal.rb +49 -49
- data/lib/utils/parser.rb +274 -274
- data/lib/utils/plugin_registry.rb +93 -93
- data/lib/utils/simpleconfig.rb +120 -120
- data/lib/utils/spdx.rb +13 -13
- data/lib/utils/spdx.txt +343 -343
- metadata +2 -2
data/lib/resources/json.rb
CHANGED
|
@@ -1,117 +1,117 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
|
|
3
|
-
require 'utils/object_traversal'
|
|
4
|
-
|
|
5
|
-
module Inspec::Resources
|
|
6
|
-
class JsonConfig < Inspec.resource(1)
|
|
7
|
-
name 'json'
|
|
8
|
-
supports platform: 'unix'
|
|
9
|
-
supports platform: 'windows'
|
|
10
|
-
supports platform: 'esx'
|
|
11
|
-
supports platform: 'cisco'
|
|
12
|
-
desc 'Use the json InSpec audit resource to test data in a JSON file.'
|
|
13
|
-
example "
|
|
14
|
-
describe json('policyfile.lock.json') do
|
|
15
|
-
its(['cookbook_locks','omnibus','version']) { should eq('2.2.0') }
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
describe json({ command: 'retrieve_data.py --json' }) do
|
|
19
|
-
its('state') { should eq('open') }
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
describe json({ content: '{\"item1\": { \"status\": \"available\" } }' }) do
|
|
23
|
-
its(['item1', 'status']) { should cmp 'available' }
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
"
|
|
27
|
-
|
|
28
|
-
include ObjectTraverser
|
|
29
|
-
|
|
30
|
-
# make params readable
|
|
31
|
-
attr_reader :params, :raw_content
|
|
32
|
-
|
|
33
|
-
def initialize(opts)
|
|
34
|
-
# pre-initialize @params to an empty hash. In the event that reading/parsing the data
|
|
35
|
-
# throws an exception, this allows the resource to still be called outside of a
|
|
36
|
-
# describe/test and not throw errors when a caller attempts to fetch a value from the params.
|
|
37
|
-
@params = {}
|
|
38
|
-
|
|
39
|
-
# load the raw content from the source, and then parse it
|
|
40
|
-
@raw_content = load_raw_content(opts)
|
|
41
|
-
@params = parse(@raw_content)
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
# Shorthand to retrieve a parameter name via `#its`.
|
|
45
|
-
# Example: describe json('file') { its('paramX') { should eq 'Y' } }
|
|
46
|
-
#
|
|
47
|
-
# @param [String] name name of the field to retrieve
|
|
48
|
-
# @return [Object] the value stored at this position
|
|
49
|
-
def method_missing(*keys)
|
|
50
|
-
# catch bahavior of rspec its implementation
|
|
51
|
-
# @see https://github.com/rspec/rspec-its/blob/master/lib/rspec/its.rb#L110
|
|
52
|
-
keys.shift if keys.is_a?(Array) && keys[0] == :[]
|
|
53
|
-
value(keys)
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
def value(key)
|
|
57
|
-
# uses ObjectTraverser.extract_value to walk the hash looking for the key,
|
|
58
|
-
# which may be an Array of keys for a nested Hash.
|
|
59
|
-
extract_value(key, params)
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
def to_s
|
|
63
|
-
"#{resource_base_name} #{@resource_name_supplement || 'content'}"
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
private
|
|
67
|
-
|
|
68
|
-
def parse(content)
|
|
69
|
-
require 'json'
|
|
70
|
-
JSON.parse(content)
|
|
71
|
-
rescue => e
|
|
72
|
-
raise Inspec::Exceptions::ResourceFailed, "Unable to parse JSON: #{e.message}"
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
def load_raw_content(opts)
|
|
76
|
-
# if the opts isn't a hash, we assume it's a path to a file
|
|
77
|
-
unless opts.is_a?(Hash)
|
|
78
|
-
@resource_name_supplement = opts
|
|
79
|
-
return load_raw_from_file(opts)
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
if opts.key?(:command)
|
|
83
|
-
@resource_name_supplement = "from command: #{opts[:command]}"
|
|
84
|
-
load_raw_from_command(opts[:command])
|
|
85
|
-
elsif opts.key?(:content)
|
|
86
|
-
opts[:content]
|
|
87
|
-
else
|
|
88
|
-
raise Inspec::Exceptions::ResourceFailed, 'No JSON content; must specify a file, command, or raw JSON content'
|
|
89
|
-
end
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
def load_raw_from_file(path)
|
|
93
|
-
file = inspec.file(path)
|
|
94
|
-
|
|
95
|
-
# these are currently ResourceSkipped to maintain consistency with the resource
|
|
96
|
-
# pre-refactor (which used skip_resource). These should likely be changed to
|
|
97
|
-
# ResourceFailed during a major version bump.
|
|
98
|
-
raise Inspec::Exceptions::ResourceSkipped, "No such file: #{path}" unless file.file?
|
|
99
|
-
raise Inspec::Exceptions::ResourceSkipped, "File #{path} is empty or is not readable by current user" if file.content.nil? || file.content.empty?
|
|
100
|
-
|
|
101
|
-
file.content
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
def load_raw_from_command(command)
|
|
105
|
-
command_output = inspec.command(command).stdout
|
|
106
|
-
raise Inspec::Exceptions::ResourceSkipped, "No output from command: #{command}" if command_output.nil? || command_output.empty?
|
|
107
|
-
|
|
108
|
-
command_output
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
# for resources the subclass JsonConfig, this allows specification of the resource
|
|
112
|
-
# base name in each subclass so we can build a good to_s method
|
|
113
|
-
def resource_base_name
|
|
114
|
-
'JSON'
|
|
115
|
-
end
|
|
116
|
-
end
|
|
117
|
-
end
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require 'utils/object_traversal'
|
|
4
|
+
|
|
5
|
+
module Inspec::Resources
|
|
6
|
+
class JsonConfig < Inspec.resource(1)
|
|
7
|
+
name 'json'
|
|
8
|
+
supports platform: 'unix'
|
|
9
|
+
supports platform: 'windows'
|
|
10
|
+
supports platform: 'esx'
|
|
11
|
+
supports platform: 'cisco'
|
|
12
|
+
desc 'Use the json InSpec audit resource to test data in a JSON file.'
|
|
13
|
+
example "
|
|
14
|
+
describe json('policyfile.lock.json') do
|
|
15
|
+
its(['cookbook_locks','omnibus','version']) { should eq('2.2.0') }
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
describe json({ command: 'retrieve_data.py --json' }) do
|
|
19
|
+
its('state') { should eq('open') }
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
describe json({ content: '{\"item1\": { \"status\": \"available\" } }' }) do
|
|
23
|
+
its(['item1', 'status']) { should cmp 'available' }
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
"
|
|
27
|
+
|
|
28
|
+
include ObjectTraverser
|
|
29
|
+
|
|
30
|
+
# make params readable
|
|
31
|
+
attr_reader :params, :raw_content
|
|
32
|
+
|
|
33
|
+
def initialize(opts)
|
|
34
|
+
# pre-initialize @params to an empty hash. In the event that reading/parsing the data
|
|
35
|
+
# throws an exception, this allows the resource to still be called outside of a
|
|
36
|
+
# describe/test and not throw errors when a caller attempts to fetch a value from the params.
|
|
37
|
+
@params = {}
|
|
38
|
+
|
|
39
|
+
# load the raw content from the source, and then parse it
|
|
40
|
+
@raw_content = load_raw_content(opts)
|
|
41
|
+
@params = parse(@raw_content)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Shorthand to retrieve a parameter name via `#its`.
|
|
45
|
+
# Example: describe json('file') { its('paramX') { should eq 'Y' } }
|
|
46
|
+
#
|
|
47
|
+
# @param [String] name name of the field to retrieve
|
|
48
|
+
# @return [Object] the value stored at this position
|
|
49
|
+
def method_missing(*keys)
|
|
50
|
+
# catch bahavior of rspec its implementation
|
|
51
|
+
# @see https://github.com/rspec/rspec-its/blob/master/lib/rspec/its.rb#L110
|
|
52
|
+
keys.shift if keys.is_a?(Array) && keys[0] == :[]
|
|
53
|
+
value(keys)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def value(key)
|
|
57
|
+
# uses ObjectTraverser.extract_value to walk the hash looking for the key,
|
|
58
|
+
# which may be an Array of keys for a nested Hash.
|
|
59
|
+
extract_value(key, params)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def to_s
|
|
63
|
+
"#{resource_base_name} #{@resource_name_supplement || 'content'}"
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
private
|
|
67
|
+
|
|
68
|
+
def parse(content)
|
|
69
|
+
require 'json'
|
|
70
|
+
JSON.parse(content)
|
|
71
|
+
rescue => e
|
|
72
|
+
raise Inspec::Exceptions::ResourceFailed, "Unable to parse JSON: #{e.message}"
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def load_raw_content(opts)
|
|
76
|
+
# if the opts isn't a hash, we assume it's a path to a file
|
|
77
|
+
unless opts.is_a?(Hash)
|
|
78
|
+
@resource_name_supplement = opts
|
|
79
|
+
return load_raw_from_file(opts)
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
if opts.key?(:command)
|
|
83
|
+
@resource_name_supplement = "from command: #{opts[:command]}"
|
|
84
|
+
load_raw_from_command(opts[:command])
|
|
85
|
+
elsif opts.key?(:content)
|
|
86
|
+
opts[:content]
|
|
87
|
+
else
|
|
88
|
+
raise Inspec::Exceptions::ResourceFailed, 'No JSON content; must specify a file, command, or raw JSON content'
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def load_raw_from_file(path)
|
|
93
|
+
file = inspec.file(path)
|
|
94
|
+
|
|
95
|
+
# these are currently ResourceSkipped to maintain consistency with the resource
|
|
96
|
+
# pre-refactor (which used skip_resource). These should likely be changed to
|
|
97
|
+
# ResourceFailed during a major version bump.
|
|
98
|
+
raise Inspec::Exceptions::ResourceSkipped, "No such file: #{path}" unless file.file?
|
|
99
|
+
raise Inspec::Exceptions::ResourceSkipped, "File #{path} is empty or is not readable by current user" if file.content.nil? || file.content.empty?
|
|
100
|
+
|
|
101
|
+
file.content
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def load_raw_from_command(command)
|
|
105
|
+
command_output = inspec.command(command).stdout
|
|
106
|
+
raise Inspec::Exceptions::ResourceSkipped, "No output from command: #{command}" if command_output.nil? || command_output.empty?
|
|
107
|
+
|
|
108
|
+
command_output
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
# for resources the subclass JsonConfig, this allows specification of the resource
|
|
112
|
+
# base name in each subclass so we can build a good to_s method
|
|
113
|
+
def resource_base_name
|
|
114
|
+
'JSON'
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
end
|
|
@@ -1,107 +1,107 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
|
|
3
|
-
module Inspec::Resources
|
|
4
|
-
class KernelModule < Inspec.resource(1)
|
|
5
|
-
name 'kernel_module'
|
|
6
|
-
supports platform: 'unix'
|
|
7
|
-
desc 'Use the kernel_module InSpec audit resource to test kernel modules on
|
|
8
|
-
Linux platforms. These parameters are located under /lib/modules. Any submodule
|
|
9
|
-
may be tested using this resource.
|
|
10
|
-
|
|
11
|
-
The `kernel_module` resource can also verify if a kernel module is `blacklisted`
|
|
12
|
-
or if a module is disabled via a fake install using the `bin_true` or `bin_false`
|
|
13
|
-
method.'
|
|
14
|
-
|
|
15
|
-
example "
|
|
16
|
-
|
|
17
|
-
describe kernel_module('video') do
|
|
18
|
-
it { should be_loaded }
|
|
19
|
-
it { should_not be_disabled }
|
|
20
|
-
it { should_not be_blacklisted }
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
describe kernel_module('sstfb') do
|
|
24
|
-
it { should_not be_loaded }
|
|
25
|
-
it { should be_disabled }
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
describe kernel_module('floppy') do
|
|
29
|
-
it { should be_blacklisted }
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
describe kernel_module('dhcp') do
|
|
33
|
-
it { should_not be_loaded }
|
|
34
|
-
end
|
|
35
|
-
"
|
|
36
|
-
|
|
37
|
-
def initialize(modulename = nil)
|
|
38
|
-
@module = modulename
|
|
39
|
-
# this resource is only supported on Linux
|
|
40
|
-
return skip_resource 'The `kernel_parameter` resource is not supported on your OS.' if !inspec.os.linux?
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
def loaded?
|
|
44
|
-
if inspec.os.redhat? || inspec.os.name == 'fedora'
|
|
45
|
-
lsmod_cmd = '/sbin/lsmod'
|
|
46
|
-
else
|
|
47
|
-
lsmod_cmd = 'lsmod'
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
# get list of all modules
|
|
51
|
-
cmd = inspec.command(lsmod_cmd)
|
|
52
|
-
return false if cmd.exit_status != 0
|
|
53
|
-
|
|
54
|
-
# check if module is loaded
|
|
55
|
-
re = Regexp.new('^'+Regexp.quote(@module)+'\s')
|
|
56
|
-
found = cmd.stdout.match(re)
|
|
57
|
-
!found.nil?
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
def disabled?
|
|
61
|
-
!modprobe_output.match(%r{^install\s+#{@module}\s+/(s?)bin/(true|false)}).nil?
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
def blacklisted?
|
|
65
|
-
!modprobe_output.match(/^blacklist\s+#{@module}/).nil? || disabled_via_bin_true? || disabled_via_bin_false?
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
def version
|
|
69
|
-
cmd = inspec.command("#{modinfo_cmd_for_os} -F version #{@module}")
|
|
70
|
-
cmd.exit_status.zero? ? cmd.stdout.delete("\n") : nil
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
def to_s
|
|
74
|
-
"Kernel Module #{@module}"
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
private
|
|
78
|
-
|
|
79
|
-
def modprobe_output
|
|
80
|
-
@modprobe_output ||= inspec.command("#{modprobe_cmd_for_os} --showconfig").stdout
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
def modinfo_cmd_for_os
|
|
84
|
-
if inspec.os.redhat? || inspec.os.name == 'fedora'
|
|
85
|
-
'/sbin/modinfo'
|
|
86
|
-
else
|
|
87
|
-
'modinfo'
|
|
88
|
-
end
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
def modprobe_cmd_for_os
|
|
92
|
-
if inspec.os.redhat? || inspec.os.name == 'fedora'
|
|
93
|
-
'/sbin/modprobe'
|
|
94
|
-
else
|
|
95
|
-
'modprobe'
|
|
96
|
-
end
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
def disabled_via_bin_true?
|
|
100
|
-
!modprobe_output.match(%r{^install\s+#{@module}\s+/(s?)bin/true}).nil?
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
def disabled_via_bin_false?
|
|
104
|
-
!modprobe_output.match(%r{^install\s+#{@module}\s+/(s?)bin/false}).nil?
|
|
105
|
-
end
|
|
106
|
-
end
|
|
107
|
-
end
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
module Inspec::Resources
|
|
4
|
+
class KernelModule < Inspec.resource(1)
|
|
5
|
+
name 'kernel_module'
|
|
6
|
+
supports platform: 'unix'
|
|
7
|
+
desc 'Use the kernel_module InSpec audit resource to test kernel modules on
|
|
8
|
+
Linux platforms. These parameters are located under /lib/modules. Any submodule
|
|
9
|
+
may be tested using this resource.
|
|
10
|
+
|
|
11
|
+
The `kernel_module` resource can also verify if a kernel module is `blacklisted`
|
|
12
|
+
or if a module is disabled via a fake install using the `bin_true` or `bin_false`
|
|
13
|
+
method.'
|
|
14
|
+
|
|
15
|
+
example "
|
|
16
|
+
|
|
17
|
+
describe kernel_module('video') do
|
|
18
|
+
it { should be_loaded }
|
|
19
|
+
it { should_not be_disabled }
|
|
20
|
+
it { should_not be_blacklisted }
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
describe kernel_module('sstfb') do
|
|
24
|
+
it { should_not be_loaded }
|
|
25
|
+
it { should be_disabled }
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
describe kernel_module('floppy') do
|
|
29
|
+
it { should be_blacklisted }
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
describe kernel_module('dhcp') do
|
|
33
|
+
it { should_not be_loaded }
|
|
34
|
+
end
|
|
35
|
+
"
|
|
36
|
+
|
|
37
|
+
def initialize(modulename = nil)
|
|
38
|
+
@module = modulename
|
|
39
|
+
# this resource is only supported on Linux
|
|
40
|
+
return skip_resource 'The `kernel_parameter` resource is not supported on your OS.' if !inspec.os.linux?
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def loaded?
|
|
44
|
+
if inspec.os.redhat? || inspec.os.name == 'fedora'
|
|
45
|
+
lsmod_cmd = '/sbin/lsmod'
|
|
46
|
+
else
|
|
47
|
+
lsmod_cmd = 'lsmod'
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# get list of all modules
|
|
51
|
+
cmd = inspec.command(lsmod_cmd)
|
|
52
|
+
return false if cmd.exit_status != 0
|
|
53
|
+
|
|
54
|
+
# check if module is loaded
|
|
55
|
+
re = Regexp.new('^'+Regexp.quote(@module)+'\s')
|
|
56
|
+
found = cmd.stdout.match(re)
|
|
57
|
+
!found.nil?
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def disabled?
|
|
61
|
+
!modprobe_output.match(%r{^install\s+#{@module}\s+/(s?)bin/(true|false)}).nil?
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def blacklisted?
|
|
65
|
+
!modprobe_output.match(/^blacklist\s+#{@module}/).nil? || disabled_via_bin_true? || disabled_via_bin_false?
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def version
|
|
69
|
+
cmd = inspec.command("#{modinfo_cmd_for_os} -F version #{@module}")
|
|
70
|
+
cmd.exit_status.zero? ? cmd.stdout.delete("\n") : nil
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def to_s
|
|
74
|
+
"Kernel Module #{@module}"
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
private
|
|
78
|
+
|
|
79
|
+
def modprobe_output
|
|
80
|
+
@modprobe_output ||= inspec.command("#{modprobe_cmd_for_os} --showconfig").stdout
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def modinfo_cmd_for_os
|
|
84
|
+
if inspec.os.redhat? || inspec.os.name == 'fedora'
|
|
85
|
+
'/sbin/modinfo'
|
|
86
|
+
else
|
|
87
|
+
'modinfo'
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def modprobe_cmd_for_os
|
|
92
|
+
if inspec.os.redhat? || inspec.os.name == 'fedora'
|
|
93
|
+
'/sbin/modprobe'
|
|
94
|
+
else
|
|
95
|
+
'modprobe'
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def disabled_via_bin_true?
|
|
100
|
+
!modprobe_output.match(%r{^install\s+#{@module}\s+/(s?)bin/true}).nil?
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def disabled_via_bin_false?
|
|
104
|
+
!modprobe_output.match(%r{^install\s+#{@module}\s+/(s?)bin/false}).nil?
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
end
|
|
@@ -1,58 +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
|
|
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
|