inspec 2.1.81 → 2.1.83
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 +5 -5
- data/.rubocop.yml +101 -101
- data/CHANGELOG.md +3183 -3177
- data/Gemfile +56 -56
- data/LICENSE +14 -14
- data/MAINTAINERS.md +33 -33
- data/MAINTAINERS.toml +52 -52
- data/README.md +453 -453
- data/Rakefile +349 -349
- data/bin/inspec +12 -12
- data/docs/.gitignore +2 -2
- data/docs/README.md +41 -40
- data/docs/dev/control-eval.md +61 -61
- data/docs/dsl_inspec.md +258 -258
- data/docs/dsl_resource.md +100 -100
- data/docs/glossary.md +99 -99
- data/docs/habitat.md +191 -191
- data/docs/inspec_and_friends.md +114 -114
- data/docs/matchers.md +169 -169
- data/docs/migration.md +293 -293
- data/docs/platforms.md +118 -118
- data/docs/plugin_kitchen_inspec.md +50 -50
- data/docs/profiles.md +378 -378
- 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 +155 -155
- data/docs/resources/aws_cloudtrail_trails.md.erb +86 -86
- data/docs/resources/aws_cloudwatch_alarm.md.erb +91 -91
- data/docs/resources/aws_cloudwatch_log_metric_filter.md.erb +154 -154
- data/docs/resources/aws_config_delivery_channel.md.erb +101 -101
- data/docs/resources/aws_config_recorder.md.erb +86 -86
- data/docs/resources/aws_ec2_instance.md.erb +112 -112
- data/docs/resources/aws_ec2_instances.md.erb +79 -79
- data/docs/resources/aws_iam_access_key.md.erb +129 -129
- data/docs/resources/aws_iam_access_keys.md.erb +204 -204
- data/docs/resources/aws_iam_group.md.erb +64 -64
- data/docs/resources/aws_iam_groups.md.erb +49 -49
- data/docs/resources/aws_iam_password_policy.md.erb +82 -82
- data/docs/resources/aws_iam_policies.md.erb +87 -87
- data/docs/resources/aws_iam_policy.md.erb +245 -245
- data/docs/resources/aws_iam_role.md.erb +69 -69
- data/docs/resources/aws_iam_root_user.md.erb +76 -76
- data/docs/resources/aws_iam_user.md.erb +120 -120
- data/docs/resources/aws_iam_users.md.erb +279 -279
- data/docs/resources/aws_kms_key.md.erb +177 -177
- data/docs/resources/aws_kms_keys.md.erb +89 -89
- data/docs/resources/aws_rds_instance.md.erb +66 -66
- data/docs/resources/aws_route_table.md.erb +53 -53
- data/docs/resources/aws_route_tables.md.erb +55 -55
- data/docs/resources/aws_s3_bucket.md.erb +146 -146
- data/docs/resources/aws_s3_bucket_object.md.erb +89 -89
- data/docs/resources/aws_s3_buckets.md.erb +59 -59
- data/docs/resources/aws_security_group.md.erb +296 -296
- data/docs/resources/aws_security_groups.md.erb +97 -97
- data/docs/resources/aws_sns_subscription.md.erb +130 -130
- data/docs/resources/aws_sns_topic.md.erb +69 -69
- data/docs/resources/aws_sns_topics.md.erb +58 -58
- data/docs/resources/aws_subnet.md.erb +140 -140
- data/docs/resources/aws_subnets.md.erb +132 -132
- data/docs/resources/aws_vpc.md.erb +125 -125
- data/docs/resources/aws_vpcs.md.erb +125 -125
- data/docs/resources/azure_generic_resource.md.erb +171 -171
- 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/chocolatey_package.md.erb +58 -58
- 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 +103 -103
- 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 -526
- 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 +197 -197
- 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_defs.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 +138 -138
- 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 +91 -91
- 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 -146
- data/docs/resources/ssh_config.md.erb +73 -73
- 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 +217 -217
- 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 +23 -23
- 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 +59 -59
- data/inspec.gemspec +49 -49
- 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 +193 -193
- data/lib/bundles/inspec-compliance/api.rb +360 -360
- data/lib/bundles/inspec-compliance/api/login.rb +193 -193
- data/lib/bundles/inspec-compliance/bootstrap.sh +41 -41
- data/lib/bundles/inspec-compliance/cli.rb +260 -260
- data/lib/bundles/inspec-compliance/configuration.rb +103 -103
- data/lib/bundles/inspec-compliance/http.rb +125 -125
- data/lib/bundles/inspec-compliance/support.rb +36 -36
- data/lib/bundles/inspec-compliance/target.rb +112 -112
- 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 +391 -391
- 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 +247 -247
- 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 +93 -93
- data/lib/inspec/base_cli.rb +368 -368
- 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 +14 -14
- 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 +259 -259
- 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 +75 -75
- 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 +513 -513
- data/lib/inspec/profile_context.rb +208 -208
- data/lib/inspec/profile_vendor.rb +66 -66
- data/lib/inspec/reporters.rb +60 -60
- data/lib/inspec/reporters/automate.rb +76 -76
- data/lib/inspec/reporters/base.rb +25 -25
- data/lib/inspec/reporters/cli.rb +356 -356
- data/lib/inspec/reporters/json.rb +117 -117
- data/lib/inspec/reporters/json_min.rb +48 -48
- data/lib/inspec/reporters/junit.rb +78 -78
- data/lib/inspec/require_loader.rb +33 -33
- data/lib/inspec/resource.rb +190 -190
- data/lib/inspec/rule.rb +280 -280
- 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 +50 -50
- 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 +151 -151
- data/lib/resources/apache.rb +48 -48
- data/lib/resources/apache_conf.rb +149 -149
- 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 +46 -46
- data/lib/resources/aws/aws_cloudtrail_trail.rb +93 -93
- 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_delivery_channel.rb +70 -70
- data/lib/resources/aws/aws_config_recorder.rb +93 -93
- data/lib/resources/aws/aws_ec2_instance.rb +157 -157
- data/lib/resources/aws/aws_ec2_instances.rb +64 -64
- data/lib/resources/aws/aws_iam_access_key.rb +106 -106
- data/lib/resources/aws/aws_iam_access_keys.rb +149 -149
- data/lib/resources/aws/aws_iam_group.rb +58 -58
- data/lib/resources/aws/aws_iam_groups.rb +52 -52
- data/lib/resources/aws/aws_iam_password_policy.rb +116 -116
- data/lib/resources/aws/aws_iam_policies.rb +53 -53
- data/lib/resources/aws/aws_iam_policy.rb +291 -291
- data/lib/resources/aws/aws_iam_role.rb +55 -55
- data/lib/resources/aws/aws_iam_root_user.rb +78 -78
- data/lib/resources/aws/aws_iam_user.rb +142 -142
- data/lib/resources/aws/aws_iam_users.rb +146 -146
- data/lib/resources/aws/aws_kms_key.rb +96 -96
- data/lib/resources/aws/aws_kms_keys.rb +53 -53
- data/lib/resources/aws/aws_rds_instance.rb +71 -71
- data/lib/resources/aws/aws_route_table.rb +63 -63
- data/lib/resources/aws/aws_route_tables.rb +60 -60
- data/lib/resources/aws/aws_s3_bucket.rb +137 -137
- data/lib/resources/aws/aws_s3_bucket_object.rb +82 -82
- data/lib/resources/aws/aws_s3_buckets.rb +51 -51
- data/lib/resources/aws/aws_security_group.rb +249 -249
- data/lib/resources/aws/aws_security_groups.rb +68 -68
- data/lib/resources/aws/aws_sns_subscription.rb +78 -78
- data/lib/resources/aws/aws_sns_topic.rb +53 -53
- data/lib/resources/aws/aws_sns_topics.rb +56 -56
- 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 +73 -73
- data/lib/resources/aws/aws_vpcs.rb +52 -52
- 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 +134 -134
- data/lib/resources/bash.rb +35 -35
- data/lib/resources/bond.rb +69 -69
- data/lib/resources/bridge.rb +122 -122
- data/lib/resources/chocolatey_package.rb +78 -78
- data/lib/resources/command.rb +73 -73
- data/lib/resources/cpan.rb +58 -58
- data/lib/resources/cran.rb +64 -64
- data/lib/resources/crontab.rb +169 -169
- data/lib/resources/csv.rb +56 -56
- data/lib/resources/dh_params.rb +77 -77
- 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 +94 -94
- data/lib/resources/etc_group.rb +154 -154
- data/lib/resources/etc_hosts.rb +66 -66
- data/lib/resources/etc_hosts_allow_deny.rb +112 -112
- data/lib/resources/file.rb +298 -298
- data/lib/resources/filesystem.rb +31 -31
- data/lib/resources/firewalld.rb +143 -143
- data/lib/resources/gem.rb +70 -70
- data/lib/resources/groups.rb +215 -215
- data/lib/resources/grub_conf.rb +227 -227
- data/lib/resources/host.rb +306 -306
- data/lib/resources/http.rb +253 -253
- data/lib/resources/iis_app.rb +101 -101
- data/lib/resources/iis_site.rb +148 -148
- data/lib/resources/inetd_conf.rb +54 -54
- data/lib/resources/ini.rb +29 -29
- data/lib/resources/interface.rb +129 -129
- data/lib/resources/iptables.rb +80 -80
- data/lib/resources/json.rb +111 -111
- data/lib/resources/kernel_module.rb +107 -107
- data/lib/resources/kernel_parameter.rb +58 -58
- data/lib/resources/key_rsa.rb +63 -63
- data/lib/resources/limits_conf.rb +46 -46
- data/lib/resources/login_def.rb +57 -57
- data/lib/resources/mount.rb +88 -88
- data/lib/resources/mssql_session.rb +101 -101
- data/lib/resources/mysql.rb +82 -82
- data/lib/resources/mysql_conf.rb +127 -127
- data/lib/resources/mysql_session.rb +85 -85
- data/lib/resources/nginx.rb +96 -96
- data/lib/resources/nginx_conf.rb +226 -226
- data/lib/resources/npm.rb +48 -48
- data/lib/resources/ntp_conf.rb +51 -51
- 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 +86 -86
- data/lib/resources/package.rb +370 -370
- data/lib/resources/packages.rb +111 -111
- data/lib/resources/parse_config.rb +112 -112
- data/lib/resources/passwd.rb +76 -76
- data/lib/resources/pip.rb +130 -130
- data/lib/resources/platform.rb +109 -109
- data/lib/resources/port.rb +771 -771
- data/lib/resources/postgres.rb +131 -131
- data/lib/resources/postgres_conf.rb +114 -114
- data/lib/resources/postgres_hba_conf.rb +90 -90
- data/lib/resources/postgres_ident_conf.rb +79 -79
- data/lib/resources/postgres_session.rb +71 -71
- data/lib/resources/powershell.rb +67 -67
- data/lib/resources/processes.rb +204 -204
- data/lib/resources/rabbitmq_conf.rb +51 -51
- data/lib/resources/registry_key.rb +297 -297
- data/lib/resources/security_policy.rb +180 -180
- data/lib/resources/service.rb +794 -794
- data/lib/resources/shadow.rb +159 -159
- data/lib/resources/ssh_conf.rb +97 -97
- 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 -68
- 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 -102
- data/lib/resources/wmi.rb +110 -110
- data/lib/resources/x509_certificate.rb +137 -137
- data/lib/resources/xinetd.rb +106 -106
- data/lib/resources/xml.rb +46 -46
- data/lib/resources/yaml.rb +43 -43
- 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/enumerable_delegation.rb +9 -9
- data/lib/utils/erlang_parser.rb +192 -192
- data/lib/utils/file_reader.rb +25 -25
- data/lib/utils/filter.rb +273 -273
- data/lib/utils/filter_array.rb +27 -27
- data/lib/utils/find_files.rb +47 -47
- 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 +105 -105
- data/lib/utils/object_traversal.rb +49 -49
- data/lib/utils/parser.rb +274 -274
- data/lib/utils/pkey_reader.rb +15 -15
- 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 +3 -3
data/lib/resources/shadow.rb
CHANGED
|
@@ -1,159 +1,159 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
# copyright: 2016, Chef Software Inc.
|
|
3
|
-
|
|
4
|
-
require 'utils/filter'
|
|
5
|
-
require 'utils/file_reader'
|
|
6
|
-
|
|
7
|
-
# The file format consists of
|
|
8
|
-
# - user
|
|
9
|
-
# - password
|
|
10
|
-
# - last_change
|
|
11
|
-
# - min_days before password change
|
|
12
|
-
# - max_days until password change
|
|
13
|
-
# - warn_days before warning about expiry
|
|
14
|
-
# - inactive_days before deactivating the account
|
|
15
|
-
# - expiry_date when this account will expire
|
|
16
|
-
|
|
17
|
-
module Inspec::Resources
|
|
18
|
-
class Shadow < Inspec.resource(1)
|
|
19
|
-
name 'shadow'
|
|
20
|
-
supports platform: 'unix'
|
|
21
|
-
desc 'Use the shadow InSpec resource to test the contents of /etc/shadow, '\
|
|
22
|
-
'which contains information for users that may log into '\
|
|
23
|
-
'the system and/or as users that own running processes.'
|
|
24
|
-
example "
|
|
25
|
-
describe shadow do
|
|
26
|
-
its('user') { should_not include 'forbidden_user' }
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
describe shadow.user('bin') do
|
|
30
|
-
its('password') { should cmp 'x' }
|
|
31
|
-
its('count') { should eq 1 }
|
|
32
|
-
end
|
|
33
|
-
"
|
|
34
|
-
|
|
35
|
-
include FileReader
|
|
36
|
-
|
|
37
|
-
attr_reader :params
|
|
38
|
-
|
|
39
|
-
def initialize(path = '/etc/shadow', opts = {})
|
|
40
|
-
@opts = opts
|
|
41
|
-
@path = path || '/etc/shadow'
|
|
42
|
-
@filters = @opts[:filters] || ''
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
filtertable = FilterTable.create
|
|
46
|
-
filtertable
|
|
47
|
-
.add_accessor(:where)
|
|
48
|
-
.add_accessor(:entries)
|
|
49
|
-
.add(:user, field: 'user')
|
|
50
|
-
.add(:password, field: 'password')
|
|
51
|
-
.add(:last_change, field: 'last_change')
|
|
52
|
-
.add(:min_days, field: 'min_days')
|
|
53
|
-
.add(:max_days, field: 'max_days')
|
|
54
|
-
.add(:warn_days, field: 'warn_days')
|
|
55
|
-
.add(:inactive_days, field: 'inactive_days')
|
|
56
|
-
.add(:expiry_date, field: 'expiry_date')
|
|
57
|
-
.add(:reserved, field: 'reserved')
|
|
58
|
-
|
|
59
|
-
filtertable.add(:content) { |t, _|
|
|
60
|
-
t.entries.map do |e|
|
|
61
|
-
[e.user, e.password, e.last_change, e.min_days, e.max_days, e.warn_days, e.inactive_days, e.expiry_date].compact.join(':')
|
|
62
|
-
end.join("\n")
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
filtertable.add(:count) { |i, _|
|
|
66
|
-
i.entries.length
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
filtertable.connect(self, :set_params)
|
|
70
|
-
|
|
71
|
-
def filter(query = {})
|
|
72
|
-
return self if query.nil? || query.empty?
|
|
73
|
-
res = set_params
|
|
74
|
-
filters = ''
|
|
75
|
-
query.each do |attr, condition|
|
|
76
|
-
condition = condition.to_s if condition.is_a? Integer
|
|
77
|
-
filters += " #{attr} = #{condition.inspect}"
|
|
78
|
-
res = res.find_all do |line|
|
|
79
|
-
case line[attr.to_s]
|
|
80
|
-
when condition
|
|
81
|
-
true
|
|
82
|
-
else
|
|
83
|
-
false
|
|
84
|
-
end
|
|
85
|
-
end
|
|
86
|
-
end
|
|
87
|
-
content = res.map { |x| x.values.join(':') }.join("\n")
|
|
88
|
-
Shadow.new(@path, content: content, filters: @filters + filters)
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
def users(query = nil)
|
|
92
|
-
warn '[DEPRECATION] The shadow `users` property is deprecated and will be removed' \
|
|
93
|
-
' in InSpec 3.0. Please use `user` instead.'
|
|
94
|
-
query.nil? ? user : user(query)
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
def passwords(query = nil)
|
|
98
|
-
warn '[DEPRECATION] The shadow `passwords` property is deprecated and will be removed' \
|
|
99
|
-
' in InSpec 3.0. Please use `password` instead.'
|
|
100
|
-
query.nil? ? password : password(query)
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
def last_changes(query = nil)
|
|
104
|
-
warn '[DEPRECATION] The shadow `last_changes` property is deprecated and will be removed' \
|
|
105
|
-
' in InSpec 3.0. Please use `last_change` instead.'
|
|
106
|
-
query.nil? ? last_change : last_change(query)
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
def expiry_dates(query = nil)
|
|
110
|
-
warn '[DEPRECATION] The shadow `expiry_dates` property is deprecated and will be removed' \
|
|
111
|
-
' in InSpec 3.0. Please use `expiry_date` instead.'
|
|
112
|
-
query.nil? ? expiry_date : expiry_date(query)
|
|
113
|
-
end
|
|
114
|
-
|
|
115
|
-
def lines
|
|
116
|
-
warn '[DEPRECATION] The shadow `lines` property is deprecated and will be removed' \
|
|
117
|
-
' in InSpec 3.0.'
|
|
118
|
-
shadow_content.to_s.split("\n")
|
|
119
|
-
end
|
|
120
|
-
|
|
121
|
-
def to_s
|
|
122
|
-
f = @filters.empty? ? '' : ' with'+@filters
|
|
123
|
-
"#{@path}#{f}"
|
|
124
|
-
end
|
|
125
|
-
|
|
126
|
-
private
|
|
127
|
-
|
|
128
|
-
def shadow_content
|
|
129
|
-
@opts[:content] || read_file_content(@path, allow_empty: true)
|
|
130
|
-
end
|
|
131
|
-
|
|
132
|
-
def set_params
|
|
133
|
-
@params ||= Array(shadow_content.to_s.split("\n")).map { |l| parse_shadow_line(l) }
|
|
134
|
-
end
|
|
135
|
-
|
|
136
|
-
def map_data(id)
|
|
137
|
-
set_params.collect { |x| x[id] }
|
|
138
|
-
end
|
|
139
|
-
|
|
140
|
-
# Parse a line of /etc/shadow
|
|
141
|
-
#
|
|
142
|
-
# @param [String] line a line of /etc/shadow
|
|
143
|
-
# @return [Hash] Map of entries in this line
|
|
144
|
-
def parse_shadow_line(line)
|
|
145
|
-
x = line.split(':')
|
|
146
|
-
{
|
|
147
|
-
'user' => x.at(0),
|
|
148
|
-
'password' => x.at(1),
|
|
149
|
-
'last_change' => x.at(2),
|
|
150
|
-
'min_days' => x.at(3),
|
|
151
|
-
'max_days' => x.at(4),
|
|
152
|
-
'warn_days' => x.at(5),
|
|
153
|
-
'inactive_days' => x.at(6),
|
|
154
|
-
'expiry_date' => x.at(7),
|
|
155
|
-
'reserved' => x.at(8),
|
|
156
|
-
}
|
|
157
|
-
end
|
|
158
|
-
end
|
|
159
|
-
end
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
# copyright: 2016, Chef Software Inc.
|
|
3
|
+
|
|
4
|
+
require 'utils/filter'
|
|
5
|
+
require 'utils/file_reader'
|
|
6
|
+
|
|
7
|
+
# The file format consists of
|
|
8
|
+
# - user
|
|
9
|
+
# - password
|
|
10
|
+
# - last_change
|
|
11
|
+
# - min_days before password change
|
|
12
|
+
# - max_days until password change
|
|
13
|
+
# - warn_days before warning about expiry
|
|
14
|
+
# - inactive_days before deactivating the account
|
|
15
|
+
# - expiry_date when this account will expire
|
|
16
|
+
|
|
17
|
+
module Inspec::Resources
|
|
18
|
+
class Shadow < Inspec.resource(1)
|
|
19
|
+
name 'shadow'
|
|
20
|
+
supports platform: 'unix'
|
|
21
|
+
desc 'Use the shadow InSpec resource to test the contents of /etc/shadow, '\
|
|
22
|
+
'which contains information for users that may log into '\
|
|
23
|
+
'the system and/or as users that own running processes.'
|
|
24
|
+
example "
|
|
25
|
+
describe shadow do
|
|
26
|
+
its('user') { should_not include 'forbidden_user' }
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
describe shadow.user('bin') do
|
|
30
|
+
its('password') { should cmp 'x' }
|
|
31
|
+
its('count') { should eq 1 }
|
|
32
|
+
end
|
|
33
|
+
"
|
|
34
|
+
|
|
35
|
+
include FileReader
|
|
36
|
+
|
|
37
|
+
attr_reader :params
|
|
38
|
+
|
|
39
|
+
def initialize(path = '/etc/shadow', opts = {})
|
|
40
|
+
@opts = opts
|
|
41
|
+
@path = path || '/etc/shadow'
|
|
42
|
+
@filters = @opts[:filters] || ''
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
filtertable = FilterTable.create
|
|
46
|
+
filtertable
|
|
47
|
+
.add_accessor(:where)
|
|
48
|
+
.add_accessor(:entries)
|
|
49
|
+
.add(:user, field: 'user')
|
|
50
|
+
.add(:password, field: 'password')
|
|
51
|
+
.add(:last_change, field: 'last_change')
|
|
52
|
+
.add(:min_days, field: 'min_days')
|
|
53
|
+
.add(:max_days, field: 'max_days')
|
|
54
|
+
.add(:warn_days, field: 'warn_days')
|
|
55
|
+
.add(:inactive_days, field: 'inactive_days')
|
|
56
|
+
.add(:expiry_date, field: 'expiry_date')
|
|
57
|
+
.add(:reserved, field: 'reserved')
|
|
58
|
+
|
|
59
|
+
filtertable.add(:content) { |t, _|
|
|
60
|
+
t.entries.map do |e|
|
|
61
|
+
[e.user, e.password, e.last_change, e.min_days, e.max_days, e.warn_days, e.inactive_days, e.expiry_date].compact.join(':')
|
|
62
|
+
end.join("\n")
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
filtertable.add(:count) { |i, _|
|
|
66
|
+
i.entries.length
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
filtertable.connect(self, :set_params)
|
|
70
|
+
|
|
71
|
+
def filter(query = {})
|
|
72
|
+
return self if query.nil? || query.empty?
|
|
73
|
+
res = set_params
|
|
74
|
+
filters = ''
|
|
75
|
+
query.each do |attr, condition|
|
|
76
|
+
condition = condition.to_s if condition.is_a? Integer
|
|
77
|
+
filters += " #{attr} = #{condition.inspect}"
|
|
78
|
+
res = res.find_all do |line|
|
|
79
|
+
case line[attr.to_s]
|
|
80
|
+
when condition
|
|
81
|
+
true
|
|
82
|
+
else
|
|
83
|
+
false
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
content = res.map { |x| x.values.join(':') }.join("\n")
|
|
88
|
+
Shadow.new(@path, content: content, filters: @filters + filters)
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def users(query = nil)
|
|
92
|
+
warn '[DEPRECATION] The shadow `users` property is deprecated and will be removed' \
|
|
93
|
+
' in InSpec 3.0. Please use `user` instead.'
|
|
94
|
+
query.nil? ? user : user(query)
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def passwords(query = nil)
|
|
98
|
+
warn '[DEPRECATION] The shadow `passwords` property is deprecated and will be removed' \
|
|
99
|
+
' in InSpec 3.0. Please use `password` instead.'
|
|
100
|
+
query.nil? ? password : password(query)
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def last_changes(query = nil)
|
|
104
|
+
warn '[DEPRECATION] The shadow `last_changes` property is deprecated and will be removed' \
|
|
105
|
+
' in InSpec 3.0. Please use `last_change` instead.'
|
|
106
|
+
query.nil? ? last_change : last_change(query)
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def expiry_dates(query = nil)
|
|
110
|
+
warn '[DEPRECATION] The shadow `expiry_dates` property is deprecated and will be removed' \
|
|
111
|
+
' in InSpec 3.0. Please use `expiry_date` instead.'
|
|
112
|
+
query.nil? ? expiry_date : expiry_date(query)
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def lines
|
|
116
|
+
warn '[DEPRECATION] The shadow `lines` property is deprecated and will be removed' \
|
|
117
|
+
' in InSpec 3.0.'
|
|
118
|
+
shadow_content.to_s.split("\n")
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def to_s
|
|
122
|
+
f = @filters.empty? ? '' : ' with'+@filters
|
|
123
|
+
"#{@path}#{f}"
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
private
|
|
127
|
+
|
|
128
|
+
def shadow_content
|
|
129
|
+
@opts[:content] || read_file_content(@path, allow_empty: true)
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
def set_params
|
|
133
|
+
@params ||= Array(shadow_content.to_s.split("\n")).map { |l| parse_shadow_line(l) }
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
def map_data(id)
|
|
137
|
+
set_params.collect { |x| x[id] }
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
# Parse a line of /etc/shadow
|
|
141
|
+
#
|
|
142
|
+
# @param [String] line a line of /etc/shadow
|
|
143
|
+
# @return [Hash] Map of entries in this line
|
|
144
|
+
def parse_shadow_line(line)
|
|
145
|
+
x = line.split(':')
|
|
146
|
+
{
|
|
147
|
+
'user' => x.at(0),
|
|
148
|
+
'password' => x.at(1),
|
|
149
|
+
'last_change' => x.at(2),
|
|
150
|
+
'min_days' => x.at(3),
|
|
151
|
+
'max_days' => x.at(4),
|
|
152
|
+
'warn_days' => x.at(5),
|
|
153
|
+
'inactive_days' => x.at(6),
|
|
154
|
+
'expiry_date' => x.at(7),
|
|
155
|
+
'reserved' => x.at(8),
|
|
156
|
+
}
|
|
157
|
+
end
|
|
158
|
+
end
|
|
159
|
+
end
|
data/lib/resources/ssh_conf.rb
CHANGED
|
@@ -1,97 +1,97 @@
|
|
|
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 SshConf < Inspec.resource(1)
|
|
9
|
-
name 'ssh_config'
|
|
10
|
-
supports platform: 'unix'
|
|
11
|
-
desc 'Use the `ssh_config` InSpec audit resource to test OpenSSH client configuration data located at `/etc/ssh/ssh_config` on Linux and Unix platforms.'
|
|
12
|
-
example "
|
|
13
|
-
describe ssh_config do
|
|
14
|
-
its('cipher') { should contain '3des' }
|
|
15
|
-
its('port') { should eq '22' }
|
|
16
|
-
its('hostname') { should include('example.com') }
|
|
17
|
-
end
|
|
18
|
-
"
|
|
19
|
-
|
|
20
|
-
include FileReader
|
|
21
|
-
|
|
22
|
-
def initialize(conf_path = nil, type = nil)
|
|
23
|
-
@conf_path = conf_path || '/etc/ssh/ssh_config'
|
|
24
|
-
typename = (@conf_path.include?('sshd') ? 'Server' : 'Client')
|
|
25
|
-
@type = type || "SSH #{typename} configuration #{conf_path}"
|
|
26
|
-
read_content
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
def content
|
|
30
|
-
read_content
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def params(*opts)
|
|
34
|
-
opts.inject(read_params) do |res, nxt|
|
|
35
|
-
res.respond_to?(:key) ? res[nxt] : nil
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def convert_hash(hash)
|
|
40
|
-
new_hash = {}
|
|
41
|
-
hash.each do |k, v|
|
|
42
|
-
new_hash[k.downcase] = v
|
|
43
|
-
end
|
|
44
|
-
new_hash
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
def method_missing(name)
|
|
48
|
-
param = read_params[name.to_s.downcase]
|
|
49
|
-
return nil if param.nil?
|
|
50
|
-
# extract first value if we have only one value in array
|
|
51
|
-
return param[0] if param.length == 1
|
|
52
|
-
param
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
def to_s
|
|
56
|
-
'SSH Configuration'
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
private
|
|
60
|
-
|
|
61
|
-
def read_content
|
|
62
|
-
return @content if defined?(@content)
|
|
63
|
-
|
|
64
|
-
@content = read_file_content(@conf_path)
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
def read_params
|
|
68
|
-
return @params if defined?(@params)
|
|
69
|
-
return @params = {} if read_content.nil?
|
|
70
|
-
conf = SimpleConfig.new(
|
|
71
|
-
read_content,
|
|
72
|
-
assignment_regex: /^\s*(\S+?)\s+(.*?)\s*$/,
|
|
73
|
-
multiple_values: true,
|
|
74
|
-
)
|
|
75
|
-
@params = convert_hash(conf.params)
|
|
76
|
-
end
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
class SshdConf < SshConf
|
|
80
|
-
name 'sshd_config'
|
|
81
|
-
supports platform: 'unix'
|
|
82
|
-
desc 'Use the sshd_config InSpec audit resource to test configuration data for the Open SSH daemon located at /etc/ssh/sshd_config on Linux and UNIX platforms. sshd---the Open SSH daemon---listens on dedicated ports, starts a daemon for each incoming connection, and then handles encryption, authentication, key exchanges, command execution, and data exchanges.'
|
|
83
|
-
example "
|
|
84
|
-
describe sshd_config do
|
|
85
|
-
its('Protocol') { should eq '2' }
|
|
86
|
-
end
|
|
87
|
-
"
|
|
88
|
-
|
|
89
|
-
def initialize(path = nil)
|
|
90
|
-
super(path || '/etc/ssh/sshd_config')
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
def to_s
|
|
94
|
-
'SSHD Configuration'
|
|
95
|
-
end
|
|
96
|
-
end
|
|
97
|
-
end
|
|
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 SshConf < Inspec.resource(1)
|
|
9
|
+
name 'ssh_config'
|
|
10
|
+
supports platform: 'unix'
|
|
11
|
+
desc 'Use the `ssh_config` InSpec audit resource to test OpenSSH client configuration data located at `/etc/ssh/ssh_config` on Linux and Unix platforms.'
|
|
12
|
+
example "
|
|
13
|
+
describe ssh_config do
|
|
14
|
+
its('cipher') { should contain '3des' }
|
|
15
|
+
its('port') { should eq '22' }
|
|
16
|
+
its('hostname') { should include('example.com') }
|
|
17
|
+
end
|
|
18
|
+
"
|
|
19
|
+
|
|
20
|
+
include FileReader
|
|
21
|
+
|
|
22
|
+
def initialize(conf_path = nil, type = nil)
|
|
23
|
+
@conf_path = conf_path || '/etc/ssh/ssh_config'
|
|
24
|
+
typename = (@conf_path.include?('sshd') ? 'Server' : 'Client')
|
|
25
|
+
@type = type || "SSH #{typename} configuration #{conf_path}"
|
|
26
|
+
read_content
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def content
|
|
30
|
+
read_content
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def params(*opts)
|
|
34
|
+
opts.inject(read_params) do |res, nxt|
|
|
35
|
+
res.respond_to?(:key) ? res[nxt] : nil
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def convert_hash(hash)
|
|
40
|
+
new_hash = {}
|
|
41
|
+
hash.each do |k, v|
|
|
42
|
+
new_hash[k.downcase] = v
|
|
43
|
+
end
|
|
44
|
+
new_hash
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def method_missing(name)
|
|
48
|
+
param = read_params[name.to_s.downcase]
|
|
49
|
+
return nil if param.nil?
|
|
50
|
+
# extract first value if we have only one value in array
|
|
51
|
+
return param[0] if param.length == 1
|
|
52
|
+
param
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def to_s
|
|
56
|
+
'SSH Configuration'
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
private
|
|
60
|
+
|
|
61
|
+
def read_content
|
|
62
|
+
return @content if defined?(@content)
|
|
63
|
+
|
|
64
|
+
@content = read_file_content(@conf_path)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def read_params
|
|
68
|
+
return @params if defined?(@params)
|
|
69
|
+
return @params = {} if read_content.nil?
|
|
70
|
+
conf = SimpleConfig.new(
|
|
71
|
+
read_content,
|
|
72
|
+
assignment_regex: /^\s*(\S+?)\s+(.*?)\s*$/,
|
|
73
|
+
multiple_values: true,
|
|
74
|
+
)
|
|
75
|
+
@params = convert_hash(conf.params)
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
class SshdConf < SshConf
|
|
80
|
+
name 'sshd_config'
|
|
81
|
+
supports platform: 'unix'
|
|
82
|
+
desc 'Use the sshd_config InSpec audit resource to test configuration data for the Open SSH daemon located at /etc/ssh/sshd_config on Linux and UNIX platforms. sshd---the Open SSH daemon---listens on dedicated ports, starts a daemon for each incoming connection, and then handles encryption, authentication, key exchanges, command execution, and data exchanges.'
|
|
83
|
+
example "
|
|
84
|
+
describe sshd_config do
|
|
85
|
+
its('Protocol') { should eq '2' }
|
|
86
|
+
end
|
|
87
|
+
"
|
|
88
|
+
|
|
89
|
+
def initialize(path = nil)
|
|
90
|
+
super(path || '/etc/ssh/sshd_config')
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def to_s
|
|
94
|
+
'SSHD Configuration'
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
end
|